[转帖]SQL 入门

sql,入门 · 浏览次数 : 0

小编点评

**使用 SQL 创建数据库** **1. 创建实体** ```sql 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) ); ``` **2. 添加数据** ```sql 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); ``` **3. 查询数据** ```sql SELECT *FROM dbo_courses; ``` **结果:** ``` | course_id |          course_name | |---|---|---| | 1 | Software Engineering | | 2 | Computer Science | | 3 | Computing | | 1 | student1 | | 2 | student2 | | 3 | student3 | | 4 | student4 | ``` **注意:** * 实体关系图 (ERD) 中的 dbo.<实体> (LCTT 译注:文章中使用的是 dbo_<实体>)不是必需的实体命名约定。 * 我之所以使用实体关系图命名空间,是因为它是 Microsoft SQL Server 中的标准。如果您想了解更多,在网络上这方面的最佳指南是 W3Schools.com 中对所有数据库平台的 SQL 综合指南。

正文

https://linux.cn/article-9597-1.html

 

| 2018-04-12 08:37   收藏: 1    

使用 SQL 构建一个关系数据库比你想的更容易。

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

在本教程中,我将构建一个使用如下实体关系图(ERD)中显示的简单架构的数据库。数据库列出了学生和正在学习的课程。为了保持简单,我使用了两个实体(即表),只有一种关系和依赖。这两个实体称为 dbo_students 和 dbo_courses

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

关于术语的快速说明:

  1. 一张表称为一个实体。
  2. 一个字段称为一个属性。
  3. 一条记录称为一个元组。
  4. 用于构建数据库的脚本称为架构。

构建架构

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

这是用于创建两个表的代码:

  1. CREATE TABLE dbo_students
  2. (
  3. student_id INT(2) AUTO_INCREMENT NOT NULL,
  4. student_name VARCHAR(50),
  5. course_studied INT(2),
  6. PRIMARY KEY (student_id)
  7. );
  8. CREATE TABLE dbo_courses
  9. (
  10. course_id INT(2) AUTO_INCREMENT NOT NULL,
  11. course_name VARCHAR(30),
  12. PRIMARY KEY (course_id)
  13. );

NOT NULL 意味着字段不能为空,AUTO_INCREMENT 意味着当一个新的元组被添加时,ID 号将自动生成,是对先前存储的 ID 号加 1,以强化各实体之间的完整参照性。 PRIMARY KEY 是每个表的惟一标识符属性。这意味着每个元组都有自己的不同的标识。

关系作为一种约束

就目前来看,这两张表格是独立存在的,没有任何联系或关系。要连接它们,必须标识一个外键。在 dbo_students 中,外键是 course_studied,其来源在 dbo_courses 中,意味着该字段被引用。SQL 中的特定命令为 CONSTRAINT,并且将使用另一个名为 ALTER TABLE 的命令添加这种关系,这样即使在架构构建完毕后,也可以编辑表。

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

  1. ALTER TABLE dbo_students
  2. ADD CONSTRAINT FK_course_studied
  3. FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

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

将数据添加到数据库

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

  1. INSERT INTO dbo_courses(course_id,course_name)
  2. VALUES(001,'Software Engineering');
  3. INSERT INTO dbo_courses(course_id,course_name)
  4. VALUES(002,'Computer Science');
  5. INSERT INTO dbo_courses(course_id,course_name)
  6. VALUES(003,'Computing');
  7. INSERT INTO dbo_students(student_id,student_name,course_studied)
  8. VALUES(001,'student1',001);
  9. INSERT INTO dbo_students(student_id,student_name,course_studied)
  10. VALUES(002,'student2',002);
  11. INSERT INTO dbo_students(student_id,student_name,course_studied)
  12. VALUES(003,'student3',002);
  13. INSERT INTO dbo_students(student_id,student_name,course_studied)
  14. VALUES(004,'student4',003);

现在数据库架构已经完成并添加了数据,现在是时候在数据库上运行查询了。

查询

查询遵循使用以下命令的集合结构:

  1. SELECT <attributes>
  2. FROM <entity>
  3. WHERE <condition>

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

  1. SELECT *
  2. FROM dbo_courses

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

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

在后面的文章中,我将使用三种类型的连接之一来解释更复杂的查询:内连接、外连接和交叉连接。

这是完整的脚本:

  1. CREATE TABLE dbo_students
  2. (
  3. student_id INT(2) AUTO_INCREMENT NOT NULL,
  4. student_name VARCHAR(50),
  5. course_studied INT(2),
  6. PRIMARY KEY (student_id)
  7. );
  8. CREATE TABLE dbo_courses
  9. (
  10. course_id INT(2) AUTO_INCREMENT NOT NULL,
  11. course_name VARCHAR(30),
  12. PRIMARY KEY (course_id)
  13. );
  14. ALTER TABLE dbo_students
  15. ADD CONSTRAINT FK_course_studied
  16. FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);
  17. INSERT INTO dbo_courses(course_id,course_name)
  18. VALUES(001,'Software Engineering');
  19. INSERT INTO dbo_courses(course_id,course_name)
  20. VALUES(002,'Computer Science');
  21. INSERT INTO dbo_courses(course_id,course_name)
  22. VALUES(003,'Computing');
  23. INSERT INTO dbo_students(student_id,student_name,course_studied)
  24. VALUES(001,'student1',001);
  25. INSERT INTO dbo_students(student_id,student_name,course_studied)
  26. VALUES(002,'student2',002);
  27. INSERT INTO dbo_students(student_id,student_name,course_studied)
  28. VALUES(003,'student3',002);
  29. INSERT INTO dbo_students(student_id,student_name,course_studied)
  30. VALUES(004,'student4',003);
  31. SELECT *
  32. FROM dbo_courses

学习更多

SQL 并不困难;我认为它比编程简单,并且该语言对于不同的数据库系统是通用的。 请注意,实体关系图中 dbo.<实体> (LCTT 译注:文章中使用的是 dbo_<实体>)不是必需的实体命名约定;我之所以使用,仅仅是因为它是 Microsoft SQL Server 中的标准。

如果你想了解更多,在网络上这方面的最佳指南是 W3Schools.com 中对所有数据库平台的 SQL 综合指南。

与[转帖]SQL 入门相似的内容:

[转帖]SQL 入门

https://linux.cn/article-9597-1.html | 2018-04-12 08:37 收藏: 1 使用 SQL 构建一个关系数据库比你想的更容易。 使用 SQL 构建数据库比大多数人想象得要简单。实际上,你甚至不需要成为一个有经验的程序员就可以使用 SQL 创建数据库。在本

[转帖]SQL Server 聚集索引和 非聚集索引 说明

https://www.cndba.cn/dave/article/4506 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。 1 聚集索引

[转帖]SQL Server 不同版本之间的 区别说明

2021-05-12 23:5062070原创SQLServer 本文链接:https://www.cndba.cn/dave/article/4527 SQL Server 数据库版本也是在不断的进行迭代。目前主流存在的版本有:SQL Server 2008、2012、2014、2016、2017

[转帖]SQL Server 体系结构中的2个主要引擎 说明

2020-03-18 16:2321450原创SQLServer 本文链接:https://www.cndba.cn/dave/article/4498 SQL Server 由两个主要引擎组成∶关系引擎(relational engine)和存储引擎(storage engine)。 1 关系引擎

[转帖]SQL Server 内部数据库版本 及兼容表

2022-04-20 09:043100转载SQLServer Microsoft SQL Server 的较新版本创建的数据库无法附加或还原到较早的版本。之所以存在此限制,是因为较旧的版本不知道新版本中引入的文件格式有哪些变更。 如果你尝试将数据库附加到早期版本、或者还原到早期版本,将会收到 SQ

[转帖]Sql Server中通过sql命令获取cpu占用及产生锁的sql

https://www.jb51.net/article/266255.htm 这篇文章主要介绍了Sql Server中通过sql命令获取cpu占用及产生锁的sql,需要的朋友可以参考下 获取SQLSERVER中产生锁的SQL语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1

[转帖]sql server 2016不能全部用到CPU的逻辑核心数的问题

https://blog.csdn.net/u011966339/article/details/122969685 最近在工作中遇到了,sql server 2016 不能把CPU 的核心全部用到的问题.通过分析工具看到 总共CPU核心有72核,但sql 只能用到40核心,想信也有很多人遇到这问题

[转帖]SQL Server各版本序列号/激活码/License/秘钥

https://www.cnblogs.com/cqpanda/p/16184853.html SQL Server 2019# Enterprise:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8GEnterprise Core:2C9JR-K3RNG-QD4M4-JQ2HR-8468J

[转帖]SQL Server 2022 正式发布,支持 Azure 最多的 SQL Server 版本!

https://www.modb.pro/db/559467 SQLSERVER 最新版 2022年11月16日,我们宣布正式发布 SQL Server 2022,这是迄今为止支持 Azure 最多的 SQL Server 版本,并在性能、安全性和可用性方面不断创新。这标志着 SQL Server

[转帖]SQL语言的分类总结

https://zhuanlan.zhihu.com/p/555596861 常用的SQL命令 数据定义语言DDL(Data Definition Language) create 、drop 、alter 主要为创建、修改、删除数据库的逻辑结构,其中包括表结构,视图和索引等。 create 创建数