SQL 入门指南

使用 SQL 构建关系数据库比您想象的要容易。
273 位读者喜欢这篇文章。
Getting started with SQL

Opensource.com

使用 SQL 构建数据库比大多数人想象的要简单。 事实上,您甚至不需要成为经验丰富的程序员就可以使用 SQL 创建数据库。 在本文中,我将解释如何使用 MySQL 5.6 创建一个简单的关系数据库管理系统 (RDMS)。 在我开始之前,我想快速感谢 SQL Fiddle,我用它来运行我的脚本。 它为测试简单脚本提供了一个有用的沙箱。

在本教程中,我将构建一个数据库,该数据库使用下面实体关系图 (ERD) 中显示的简单模式。 该数据库列出了学生以及每人正在学习的课程。 为了简单起见,我使用了两个实体(即表),只有一个关系和依赖关系。 这些实体名为 dbo_studentsdbo_courses

entity relationship diagram

opensource.com

数据库的多重性是一对多,因为每门课程可以包含许多学生,但每个学生只能学习一门课程。

关于术语的简要说明

  1. 表称为实体
  2. 字段称为属性
  3. 记录称为元组
  4. 用于构建数据库的脚本称为模式

构建模式

要构建数据库,请使用 CREATE TABLE <表名> 命令,然后定义每个字段名称和数据类型。 此数据库使用 VARCHAR(n)(字符串)和 INT(n)(整数),其中 n 指的是可以存储的值的数量。 例如 INT(2) 可以是 01。

以下是用于创建两个表的代码

CREATE TABLE dbo_students
(
  student_id INT(2) AUTO_INCREMENT NOT NULL,
  student_name VARCHAR(50),
  course_studied INT(2),
  PRIMARY KEY (student_id)
);

CREATE TABLE dbo_courses
(
  course_id INT(2) AUTO_INCREMENT NOT NULL,
  course_name VARCHAR(30),
  PRIMARY KEY (course_id)
);

NOT NULL 表示该字段不能为空,AUTO_INCREMENT 表示当添加新元组时,ID 号将自动生成,并在先前存储的 ID 号上加 1,以强制跨实体的引用完整性。 PRIMARY KEY 是每个表的唯一标识符属性。 这意味着每个元组都有其自己独特的标识

作为约束的关系

就目前而言,这两个表各自独立存在,没有连接或关系。 要连接它们,必须标识外键。 在 dbo_students 中,外键是 course_studied,其来源在 dbo_courses 中,这意味着该字段被引用。 SQL 中的特定命令称为 CONSTRAINT,此关系将使用另一个名为 ALTER TABLE 的命令添加,即使在模式构建之后也可以编辑表。

以下代码将关系添加到数据库构建脚本中

ALTER TABLE dbo_students
ADD CONSTRAINT FK_course_studied
FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

使用 CONSTRAINT 命令实际上不是必需的,但这是一个很好的做法,因为它意味着可以命名约束,并且使维护更容易。 现在数据库已完成,是时候添加一些数据了。

向数据库添加数据

INSERT INTO <表名> 是用于直接选择将数据添加到哪些属性(即字段)的命令。 首先定义实体名称,然后定义属性。 此命令下方是将添加到该实体的数据,从而创建一个元组。 如果已指定 NOT NULL,则表示该属性不能为空。 以下代码显示了如何向表中添加记录

INSERT INTO dbo_courses(course_id,course_name)
VALUES(001,'Software Engineering');
INSERT INTO dbo_courses(course_id,course_name)
VALUES(002,'Computer Science');
INSERT INTO dbo_courses(course_id,course_name)
VALUES(003,'Computing');

INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(001,'student1',001);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(002,'student2',002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(003,'student3',002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(004,'student4',003);

现在数据库模式已完成并且已添加数据,是时候在数据库上运行查询了。

查询

查询遵循使用这些命令的设定结构

SELECT <attributes>
FROM <entity>
WHERE <condition>

要显示 dbo_courses 实体中的所有记录并显示课程代码和课程名称,请使用星号。 这是一个通配符,无需键入所有属性名称。(不建议在生产数据库中使用它。)此查询的代码是

SELECT *
FROM dbo_courses

此查询的输出显示表中的所有元组,因此可以显示所有可用的课程

| course_id |          course_name |
|-----------|----------------------|
|         1 | Software Engineering |
|         2 |     Computer Science |
|         3 |            Computing |

在以后的文章中,我将解释更复杂的查询,使用三种连接类型之一:Inner、Outer 或 Cross。

这是完整的脚本

CREATE TABLE dbo_students
(
  student_id INT(2) AUTO_INCREMENT NOT NULL,
  student_name VARCHAR(50),
  course_studied INT(2),
  PRIMARY KEY (student_id)
);

CREATE TABLE dbo_courses
(
  course_id INT(2) AUTO_INCREMENT NOT NULL,
  course_name VARCHAR(30),
  PRIMARY KEY (course_id)
);

ALTER TABLE dbo_students
ADD CONSTRAINT FK_course_studied
FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

INSERT INTO dbo_courses(course_id,course_name)
VALUES(001,'Software Engineering');
INSERT INTO dbo_courses(course_id,course_name)
VALUES(002,'Computer Science');
INSERT INTO dbo_courses(course_id,course_name)
VALUES(003,'Computing');

INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(001,'student1',001);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(002,'student2',002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(003,'student3',002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(004,'student4',003);

SELECT *
FROM dbo_courses

了解更多

SQL 并不难; 我认为它比编程更简单,并且该语言对于不同的数据库系统是通用的。 请注意,dbo.<实体> 不是必需的实体命名约定; 我使用它仅仅是因为它是 Microsoft SQL Server 中的标准。

如果您想了解更多信息,互联网上最好的指南是 W3Schools.com 针对所有数据库平台的综合 SQL 指南。

请随意试用我的数据库。 此外,如果您有任何建议或问题,请在评论中回复。

标签
User profile image.
英格兰北部一所继续教育学院(16-19 岁)的计算机科学教师,开源爱好者,狂热的播客听众和超过 7 年的 Linux 用户。 我拥有计算机科学荣誉学位和项目管理研究生证书。

1 条评论

我使用 PostgreSQL 相当多。 正如您所暗示的那样,SQL 的优点在于,从一种方法到另一种方法,许多语法都是相同的。
导出为 HTML 也可以是一个方便的功能。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.