问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL语法规则入门:从基础到进阶,深入解析5个常用的SQL指令

创作时间:
作者:
@小白创作中心

SQL语法规则入门:从基础到进阶,深入解析5个常用的SQL指令

引用
1
来源
1.
https://www.pcschool.com.tw/blog/it/useful-sql-code

SQL(Structured Query Language)是一种专门用于数据库管理的编程语言,广泛应用于数据查询、数据表创建、权限管理等多个方面。本文将从基础到进阶,深入解析5个常用的SQL指令,帮助读者快速掌握SQL语言的核心概念和使用方法。

在探索SQL语法规则的旅程中,了解不同类型的SQL语句及其用途是非常重要的。数据库不能直接使用程序语言进行沟通,必须通过数据库语言才能与数据库进行交互,无论是数据的查询、数据表的创建还是权限的变更,都需要使用这种数据库语言,这种语言被称为SQL(而微软的数据库产品,恰好也叫做SQL数据库)。

SQL语法规则分类

SQL语法规则可以大致分为三类,分别是:数据操作语言(DML)、数据控制语言(DCL)和数据定义语言(DDL)。这些分类帮助我们明确知道每种语句在数据库管理和操作中所扮演的角色和功能。

DML(数据操作语言)

DML涉及数据的查询、新增、更新和删除数据库中数据的操作。它是与数据库互动时最频繁使用的SQL语言类型,是日常数据操作的核心,用户通过它来处理和分析数据。

  • SELECT:查询数据库中的数据。
  • INSERT:向数据库表中插入新的数据行。
  • UPDATE:更新数据库表中的现有数据。
  • DELETE:从数据库表中删除数据。

DCL(数据控制语言)

DCL包含用于配置数据库用户权限和连接控制的语句。数据库管理员能够通过DCL控制谁可以做什么操作,可以细部管理对数据库的操作,确保数据的安全性和完整性。

  • GRANT:赋予使用者或角色某特定的操作权限。
  • REVOKE:移除使用者或角色的操作权限。

DDL(数据定义语言)

DDL则是SQL语言用于定义和修改数据库的结构,例如数据表、索引键和其他数据库对象的建立和变更,让我们能够建立和修改数据库的架构,以符合应用程式的需求和效能的优化。

  • CREATE:建立新的数据库对象,如数据表、检视表、索引等。
  • ALTER:修改现有数据库对象的结构。
  • DROP:删除数据库对象。
  • TRUNCATE:快速删除表中的所有数据行,但保留数据表的结构。

DML数据操作语法规则

本篇内容着重于DML数据操作语言,让大家快速理解在应用程式开发过程中,我们所接触最多的SQL语言类型。

1. 数据的查询

SELECT 是SQL语法规则中最常用的操作之一,允许从一个或多个数据表中选择并筛选数据。语法规则中涉及到数据表及栏位,基本句型为

SELECT Code, Name FROM Course;

其中from后面接的是数据表名称,而select后面接的是栏位名称,整句的意思是从学员数据表中选择编号及姓名数据。

指定条件查询(WHERE),多数的查询通常会带有一定的查询条件,特别是数据量较大的功能,要为数据的查询加上条件只需要在后面加上 where 与条件比较关键字即可,例如下列范例表示查询课程分类是Database的数据。

SELECT Code, Name FROM Course WHERE Category = 'Database';

当有多重查询条件时,则可以使用 and 或 or 关键字来进行组合,and表示所有条件必须符合,而or 则是其1个条件符合即可,例如下列范例表示查询课程分类是Database并且课程时数是小于等于30小时的课。

SELECT Code, Name FROM Course WHERE Category = 'Database' and Times<=30;

最后如果希望数据是有排序的,那么可以再加上order by 句子,例如希望用课程时数排序

SELECT Code, Name FROM Course WHERE Category = 'Database' and Times<=30 order by Times;

2. 数据的新增

向数据表插入新的数据行记录,使用INSERT INTO语句。这个范例会在Course数据表中新增一笔Microsoft SQL SERVER入門的课程数据,而课程时数则为18小时。

INSERT INTO Course (Code, Name, Times) VALUES ('DB001', N'Microsoft SQL SERVER入門', 18);

3. 数据的更新

允许修改数据表中的现有数据时,要特别注意,在不指定条件的情况下,是全部数据都会被修改。当数据有外部关联键时,数据库会检查必须符合关联键的检查,以避免数据的不一致性。

UPDATE Course SET Times = 26 WHERE Code = 'DB001';

若为多个栏位的更新,那么可以使用逗点符号区分多个个栏位的更新,例如同时更新时数及名称。

UPDATE Course SET Name=N'Microsoft SQL SERVER',Times = 26 WHERE Code = 'DB001';

4. 数据的删除

允许删除数据表中的现有数据,要特别注意当数据有外部关联键时,数据库会检查符合关联键的检查,以避免数据的不一致性。相同的,在不指定条件的情况下,那么是全部数据都会被删除。

DELETE FROM Course WHERE Code = 'DB001';

在DML里除了常见的SQL语法规则SELECT、INSERT、UPDATE、DELETE之外,另一部分常见的就是JOIN语法规则了,在开始说明JOIN之前,让我们先快速复习一下关联式数据库的特色。

关联式数据库是什么?

关联式数据库是一种以表格形式组织数据的数据库。每张数据表由数据行(记录)和数据列(栏位)所构成,数据表中的数据可以通过主键(Primary Key)和外部关联键(Foreign Key)进行关联。

这意谓,当我们把一笔完整的记录放入到关联式数据库时,事实上在关联式数据库里是把数据拆开,并且储存在经过正规化后的不同数据表中,因此当我们要把数据从关联式数据库取出时,也就必须从不同的数据表中,把数据库进行组合。这个组合的程序就称之为JOIN。

JOIN的操作是关联式数据库的核心特性之一,在查询句中大量被使用,特别是执行复杂的查询和报表,同时也会考验查询效能,它允许从两个或两个以上的数据表,基于数据表之间的主键和外部关联键所建立的关联性结合相关联的栏位。

SQL语法规则:JOIN的运作原理

当执行一个JOIN查询时,关联式数据库管理系统(RDBMS)会根据JOIN语法规则中所指定的连接条件栏位,进行二个数据表间数据的串接。例如课程数据表与开课数据表,共同基于课程代码(Code)栏位进行JOIN。

SELECT
Course.Code,Course.Name,CourseSchedule.Sdate,CourseSchedule.EdateFROM Course
INNER JOIN CourseSchedule ON Course.Code = CourseSchedule.CourseCode

常见的JOIN类型

首先我们假设拥有以下二张数据表,分别表示课程基本数据与开课数据

Code
Name
Times
DB001
SQL资料库入門
30
PG001
ASP.NET 程式設計
72
AI001
ChatGPT应用
18
CourseCode
StartDate
EndDate
Location
DB001
2024/01/08
2024/05/30
高雄
PG001
2024/03/01
2024/07/15
高雄
PG001
2024/04/08
2024/09/10
台北
1. INNER JOIN:

只取得两个数据表中都有匹配的数据,当join语法规则中不特别指定join类型时,预设是以inner join 做为查询。

SELECT
Course.Code,Course.Name,CourseSchedule.Sdate,CourseSchedule.Edate, CourseSchedule.Location
FROM Course
INNER JOIN CourseSchedule ON Course.Code = CourseSchedule.CourseCode

上述语法规则使用INNER JOIN查询课程代码、名称和对应的开课日期、结束日期及上课地点,只会取得Course和CourseSchedule表中都存在的记录,因此课程AI001便不会出现在查询结果记录里。

Code
Name
StartDate
EndDate
Location
DB001
SQL资料库入門
2024/01/08
2024/05/30
高雄
PG001
ASP.NET 程式設計
2024/03/01
2024/07/15
高雄
PG001
ASP.NET 程式設計
2024/04/08
2024/09/10
台北
2. LEFT JOIN(或LEFT OUTER JOIN):

取得左表(Course)中的所有数据行,即使右表(CourseSchedule)中没有匹配的数据。

SELECT
Course.Code,Course.Name,CourseSchedule.Sdate,CourseSchedule.Edate, CourseSchedule.Location
FROM Course
LEFT JOIN CourseSchedule ON Course.Code = CourseSchedule.CourseCode

上述语法规则使用LEFT JOIN查询课程代码、名称和对应的开课日期、结束日期及上课地点,会取得Course数据中所有的数据,包含尚未有开课记录的AI001课程,此时AI001在查询结果中的开课日期、结束日期及上课地点均会显示为NULL值。

Code
Name
StartDate
EndDate
Location
DB001
SQL资料库入門
2024/01/08
2024/05/30
高雄
PG001
ASP.NET 程式設計
2024/03/01
2024/07/15
高雄
PG001
ASP.NET 程式設計
2024/04/08
2024/09/10
台北
AI001
ChatGPT应用
NULL
NULL
NULL
3. RIGHT JOIN(或RIGHT OUTER JOIN):

取得右表(CourseSchedule)中的所有数据,即使左表(Course)中没有匹配的数据。

SELECT
Course.Code,Course.Name,CourseSchedule.Sdate,CourseSchedule.Edate, CourseSchedule.Location
FROM Course
RIGHT JOIN CourseSchedule ON Course.Code = CourseSchedule.CourseCode
Code
Name
StartDate
EndDate
Location
DB001
SQL资料库入門
2024/01/08
2024/05/30
高雄
PG001
ASP.NET 程式設計
2024/03/01
2024/07/15
高雄
PG001
ASP.NET 程式設計
2024/04/08
2024/09/10
台北
NULL
NULL
2024/05/18
2024/09/23
台北

注意:从数据正规化的角度来看,本例不应该有这种数据的存在

4. FULL JOIN(或FULL OUTER JOIN):

返回左右两个数据表中至少有一边有匹配的所有数据,如果某一边数据表没有匹配的数据,那么该边的相关联栏位将返回NULL。

SELECT
Course.Code,Course.Name,CourseSchedule.Sdate,CourseSchedule.Edate, CourseSchedule.Location
FROM Course
FULL JOIN CourseSchedule ON Course.Code = CourseSchedule.CourseCode
Code
Name
StartDate
EndDate
Location
DB001
SQL资料库入門
2024/01/08
2024/05/30
高雄
PG001
ASP.NET 程式設計
2024/03/01
2024/07/15
高雄
PG001
ASP.NET 程式設計
2024/04/08
2024/09/10
台北
NULL
NULL
2024/05/18
2024/09/23
台北
AI001
ChatGPT应用
NULL
NULL
NULL

JOIN操作可使数据库中的相关联数据从两个或多個表中结合。在实际应用中,JOIN非常灵活,可应付各种复杂的查询,包括多个数据表连接、条件过滤和聚合操作,像是CROSS JOIN、SELF JOIN等,甚至与子查询相結合等进阶应用,可以說是在关联式数据库中,您一定會使用到的语法规则之一。

总结

通过以上的基本范例,大家是不是都学会了如何使用SQL语法规则跟数据库说话了呢?当然实务运用上还会有很多的变化,特别是查询语法规则,包含像是子查询、彙总运算、分群运算以及效能调校等议题。面对人工智能的时代,数据库是基础支撑人工智能的一环,可以说是相当重要的且必学的,如果您想要对数据库有更深入的認識,推荐您可透过SQL线上课程 | 微軟 SQL Server 資料庫認證系列 | 巨匠電腦線上直播課程 (pcschool.com.tw)獲取更深的資料庫知識及技巧喔!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号