1、数据库系统概论数据库系统概论An Introduction to Database System第三章第三章 关系数据库标准语言关系数据库标准语言SQLSQL“数据库原理及安全数据库原理及安全”课程课程关系数据库标准语言关系数据库标准语言SQL SQL l 结构化查询语言(Structured Query Language,SQL),是一种数据库查询和程序设计的编程语言,用于定义、查询、更新数据以及管理关系数据库系统。目前,SQL已成为关系数据库的标准语言。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君第三章第三章 关系数据库标准语言关系数据库标准语言SQL3
2、.1 SQL概述概述3.2 MySQL数据库简介数据库简介3.3 定义数据定义数据3.4 查询数据查询数据 3.5 更新数据更新数据3.6 视图视图3.7 小结小结2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.1 SQL概述概述l SQL是最重要的关系数据库操作语言l SQL基本上独立于数据库本身使用的机器、网络、操作系统,基于SQL的DBMS产品可以运行在从个人机、工作站到基于局域网、小型机和大型机的各种计算机系统上,具有良好的可移植性。l SQL是一种交互式查询语言,允许用户直接查询存储数据,但它不是完整的程序语言,如它没有DO或FOR 类似的循环语句
3、,但它可以嵌入另一种语言中,也可以借用VB、C、Java等语言,通过调用级接口(Call Level Interface)直接发送到数据库管理系统。SQL基本上是域关系演算,但可以实现关系代数操作。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.1 SQL概述概述l SQL包含以下6个部分v 1数据定义语言(Schema Data Definition Language,DDL)其语句包括动词CREATE和DROP。利用DDL在数据库中创建新表(CREAT TABLE)或删除表(DROP TABLE);为表加入索引等。DDL也是动作查询的一部分。v 2数据查
4、询语言(Data Query Language,DQL)其语句也称为“数据检索语句”,用于从表中获得数据,保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE、ORDER BY、GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。v 3数据操作语言(Data Manipulation Language,DML)其语句包括动词INSERT、UPDATE和DELETE,分别用于添加、修改和删除表中的行,也称为动作查询语言。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.1 SQL概述概述l
5、SQL包含以下6个部分v 4数据控制语言(Data Control Language,DCL)它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。v 5事务处理语言(TPL)它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION、COMMIT和ROLLBACK。v 6指针控制语言(CCL)它的语句像DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT一样用于对一个或多个表单独行的操作。2022年8月3日北京电
6、子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.1 SQL概述概述3.1.1 SQL的产生与发展的产生与发展 3.1.2 SQL的基本概念的基本概念3.1.3 SQL的特点的特点2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.1.1 SQL的产生与发展的产生与发展v在20世纪70年代初,IBM公司的San Jose和California研究实验室的 Edgar Codd发表将数据组成表格的应用原则(Codds Relational Algebra)。1974年,同一实验室的D.D.Chamberlin和R.F.Boyce研制出一套规范语言SEQU
7、EL(Structured English QUEry Language),并在1976年11月公布新版本的SQL(名叫SEQUEL/2)。1980年改名为SQL。1986年10月,美国ANSI公布了第一个SQL标准(SQL-86),后为国际标准化组织(ISO)采纳为国际标准。此后,ANSI不断修改和完善SQL,并在1989年第二次公布SQL标准(SQL-89)。1992年又公布SQL-92标准。v目前主要的关系数据库管理系统支持某些形式的SQL,大部分数据库管理系统能支持SQL-92标准中的大部分功能以及SQL-99、SQL-2003中的部分概念。许多数据库软件厂商对SQL基本命令集还进行了
8、不同程度的扩充和修改,也有所支持标准以外的一些功能的尝试。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.1.2 SQL的基本概念的基本概念2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.1.3 SQL的特点的特点v SQL是一种非过程化的语言,它允许在高层数据结构上操作,而不是对单个记录进行操作。用户在使用SQL的过程中,完全不用考虑数据的存储格式、数据存储路径等复杂问题。用户需要做的只是用SQL提出自己的需求,至于如何实现这些需求则是关系数据库管理系统的任务了。2022年8月3日北京电子科技学院计算机系北京电子科技学院
9、计算机系 张克君张克君SQL功能动 词数据定义CREATE、DROP、ALTER数据查询SELECT数据操纵INSERT、UPDATE、DELETE数据控制GRANT、REVOKE表表3.1 SQL3.1 SQL的核心动词的核心动词3.1.3 SQL的特点的特点v 1集多种数据语言为一体数据查询语言(Data Query Language,DQL)、数据操纵语言(Data Manipulation Language,DML)、数据定义语言(Schema Data Definition Language,模式DDL),以及数据控制语言(Data Control Language,DCL)都可以用
10、SQL来实现。v 2统一的数据操作方式在关系模型中,实体与实体之间的联系用关系来表示,即实体和实体具有统一的数据结构,这种统一的数据结构使得对数据的增删查改只需一种操作符。v 3面向集合的操作方式SQL采用集合操作方式,每次增删查改的操作对象都可以是元组的集合。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.1.3 SQL的特点的特点v 4高度非过程化用SQL对数据进行操作,只需要知道想做什么并写出相应的SQL语句,而不需要知道该怎么做,存取路径的选择和SQL语句的操作过程全部由数据库关系系统自动完成。v 5一种语言,两种使用方式用户既可以在终端键盘上直接键
11、入SQL命令对数据库进行操作,也可以作为嵌入式语言,嵌入高级语言的程序中。这两种使用方式的语法基本一致。v 6语言易懂易学易用SQL非常接近日常生活中的英语,容易学习,并且它只用了9个动词就完成了数据定义、数据操作、数据控制的核心功能,语言简洁、容易使用。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君第三章第三章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 MySQL数据库简介数据库简介3.3 定义数据定义数据3.4 查询数据查询数据 3.5 更新数据更新数据3.6 视图视图3.7 小结小结2022年8月3日北京电子科技学院计算机系
12、北京电子科技学院计算机系 张克君张克君3.2 MySQL数据库简介数据库简介3.2.1 MySQL常用语句常用语句 3.2.2 MySQL的数据类型的数据类型2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.2.1 MySQL的常用语句的常用语句vMySQL中的常用语句如下。v(1)使用SHOW语句查找服务器当前存在的数据库SHOW DATABASES;SHOW DATABASES;v(2)创建一个数据库DBCREATE DATABASE DB;CREATE DATABASE DB;v(3)选择创建的数据库USE DB;USE DB;v(4)查看当前数据库中存
13、在的表SHOW TABLES;SHOW TABLES;v(5)显示表的结构DESCRIBE TB;DESCRIBE TB;2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.2.1 MySQL的常用语句的常用语句vMySQL中的常用语句如下。v(6)用文本方式将数据装入数据库表中(如D:/mysql.txt)LOAD DATA LOCAL INFILE D:/mysql.txt INTO TABLE TB;LOAD DATA LOCAL INFILE D:/mysql.txt INTO TABLE TB;v(7)导入.sql文件命令(如D:/mysql.sql)
14、USE DATAEBASE;USE DATAEBASE;SOURCE d:/mysql.sql;SOURCE d:/mysql.sql;v(8)删除表DROP TABLE TB;DROP TABLE TB;v(9)清空表DELETE FROM TB;DELETE FROM TB;2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.2.1 MySQL的常用语句的常用语句vMySQL中的常用语句如下。v(6)用文本方式将数据装入数据库表中(如D:/mysql.txt)LOAD DATA LOCAL INFILE D:/mysql.txt INTO TABLE TB;
15、LOAD DATA LOCAL INFILE D:/mysql.txt INTO TABLE TB;v(7)导入.sql文件命令(如D:/mysql.sql)USE DATAEBASE;USE DATAEBASE;SOURCE d:/mysql.sql;SOURCE d:/mysql.sql;v(8)删除表DROP TABLE TB;DROP TABLE TB;v(9)清空表DELETE FROM TB;DELETE FROM TB;2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.2.1 MySQL的常用语句的常用语句vMySQL中的常用语句如下。v(10)
16、全局管理权限对应解释FILE:在MySQL服务器上读写文件。PROCESS:显示或杀死属于其他用户的服务线程。RELOAD:重载访问控制表、刷新日志等。SHUTDOWN:关闭MySQL服务。v(11)数据库/数据表/数据列权限ALTER:修改已存在的数据表(如增加/删除列)和索引。CREATE:建立新的数据库或数据表。DELETE:删除表的记录。DROP:删除数据表或数据库。INSERT:增加表的记录。SELECT:显示/搜索表的记录。UPDATE:修改表中已存在的记录。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.2 MySQL数据库简介数据库简介3.2
17、.1 MySQL常用语句常用语句 3.2.2 MySQL的数据类型的数据类型2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.2.1 MySQL的数据类型的数据类型v数值类型2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君类型大小范围(有符号)范围(无符号)用途TINYINT1字节(128,127)(0,255)小整数值SMALLINT2字节(32768,32767)(0,65535)大整数值MEDIUMINT3字节(8388608,8388607)(0,16777215)大整数值INT或INTEGER4字节(214748364
18、8,2147483647)(0,4294967295)极大整数值BIGINT8字节(9233372036854775808,9233372036854775807)(0,18446744073709551615)小整数值FLOAT4字节(3.402823466E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402823466 351 E+38)0,(1.175 494 351 E-38,3.402823466 351 E+38)单精度浮点数值DOUBLE8字节(1.7976931348623157E+308,2.225 073 858 507
19、2014 E-308),0,(2.225 073 858 507 2014 E-308,1.7976931348623157E+308)0,(2.225 073 858 507 2014 E-308,1.7976931348623157E+308)双精度浮点数值DECIMAL对DECIMAL(M,D),如果MD,为M+2,否则为D+2依赖于M和D的值依赖于M和D的值小数值3.2.1 MySQL的数据类型的数据类型v字符串类型2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君类 型大 小用 途CHAR0255字节定长字符串VARCHAR0255字节变长字符串TINY
20、BLOB0255字节不超过255个字符的二进制字符串TINYTEXT0255字节短文本字符串BLOB065535字节二进制形式的长文本数据TEXT065535字节长文本数据MEDIUMELOB016 777 215字节二进制形式的中等长度文本数据MEDIUMTEXT016 777 215字节中等长度文本数据LOGNGBLOB04 294 967 295字节二进制形式的极大文本数据LONGTEXT04 294 967 295字节极大文本数据3.2.1 MySQL的数据类型的数据类型v日期和时间类型2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君类 型大小(字符)范
21、 围格 式用 途DATE31000-01-019999-12-31YYYY-MM-DD日期值TIME3-838:59:59 838:59:59HH:MM:SS时间值或持续时间YEAR119012155YYYY年份值DATETIME81000-01-01 00:00:009999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP81970-01-01 00:00:00/2037年某时YYYYMMDDHHMMSS混合日期和时间值,时间戳第三章第三章 关系数据库标准语言关系数据库标准语言3.1 SQL概述概述3.2 MySQL数据库简介数据库简介3
22、.3 定义数据定义数据3.4 查询数据查询数据 3.5 更新数据更新数据3.6 视图视图3.7 小结小结2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3 定义数据定义数据3.3.1 创建与使用模式创建与使用模式 3.3.2 创建与使用基本表创建与使用基本表3.3.3 创建与使用索引创建与使用索引2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.1 创建与使用模式创建与使用模式v 1.创建模式例3-1 定义一个学生-课程模式S_T。CREATE SCHEMAS_T;CREATE SCHEMAS_T;在MySQL Work
23、bench中的具体操作如图所示。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.1 创建与使用模式创建与使用模式解释:一个数据库系统可能有多个数据库,而创建模式就是在同一个数据库系统中建立一个新的具体的数据库。举一个简单的例子,在自己的计算机安装了MySQL服务器,在自己计算机的MySQL服务器下,新建一个用户,之后这个用户创建了多个数据库,包括学生选课数据库、银行借贷款数据库、商场进出货数据库,这些不同的数据库就对应的模式。v 2.删除模式例3-2 删除模式S_T。DROP SCHEMA S_T CASCADE;DROP SCHEMA S_T CASC
24、ADE;解释:删除模式S_T的同时,该模式中的表也被删除。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.2 创建与使用基本表创建与使用基本表v 1.创建基本表例3-3 建立一个存储学生信息的表,包含学生的学号、姓名、性别、年龄、所属院系5个属性的信息,并且学号是主键,不能为空,值唯一。CREATE TABLE StudentCREATE TABLE Student(SnoSno VARCHAR(10)PRIMARY KEY,VARCHAR(10)PRIMARY KEY,SnameSname VARCHAR(5),VARCHAR(5),SsexSsex
25、VARCHAR(1),VARCHAR(1),Sage INT,Sage INT,SdepartmentVARCHARSdepartmentVARCHAR(10)(10););解释:一个数据库中,即在一个模式下可能有多个表。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.2 创建与使用基本表创建与使用基本表v 1.创建基本表例3-4 建立一个存储课程的表,包含课程的代号、课程名、选修课程、学分4个属性的信息,并且课程代号是主键,不能为空,值唯一,选修课程是外键,被参照表是存储课程的表,被参照列是课程的代号。CREATE TABLE CourseCREATE
26、 TABLE Course(CnoCno VARCHAR(10)PRIMARY KEY,VARCHAR(10)PRIMARY KEY,CnameCname VARCHAR(10),VARCHAR(10),CprimarynoVARCHARCprimarynoVARCHAR(10),(10),CcreditVARCHARCcreditVARCHAR(10),(10),FOREIGN KEY(FOREIGN KEY(CprimarynoCprimaryno)REFERENCES Course()REFERENCES Course(CnoCno)2022年8月3日北京电子科技学院计算机系北京电子科技
27、学院计算机系 张克君张克君3.3.2 创建与使用基本表创建与使用基本表v 1.创建基本表例3-5 建立一个学生选课表S_C,包含学生学号、选修课程号、成绩3个属性,主键由学号和课程号定义,外键学号参照的是学生表中的学号列,外键课程号参照的是课程表中的课程号列。CREATE TABLE SCCREATE TABLE SC(SnoSno VARCHAR(10),VARCHAR(10),CnoCno VARCHAR(10),VARCHAR(10),Result VARCHAR(10),Result VARCHAR(10),PRIMARY KEY(PRIMARY KEY(Sno,CnoSno,Cno)
28、,),FOREIGN KEY FOREIGN KEY SnoSno REFERENCE Student(REFERENCE Student(SnoSno),),FOREIGN KEY FOREIGN KEY CnoCno REFERENCE Course(REFERENCE Course(CnoCno)2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.2 创建与使用基本表创建与使用基本表v 1.创建基本表例3-5解释:SQL主键与外键的作用。主键默认不能为空,且值唯一,并自动按主键建立索引。外键取值要么为空值,要么参照主键的值。插入非空值时,如果主键表中没
29、有这个值,则不能插入;更新时,不能改为主键表中没有的值;删除主键表记录时,可以在创建外键时设置外键记录一起级联删除还是拒绝删除;更新主键记录时,同样有级联更新和拒绝执行的选择。外键的作用就是保持数据的一致性和完整性的,主键为外键提供数据完整性约束。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.2 创建与使用基本表创建与使用基本表v 2.向基本表中增加一列例3-6 向存储学生信息的表中增加一个属性:学生所属的班级,即向Student表中增加一列班级。ALTER TABLE Student ALTER TABLE Student ADD Class CHA
30、R(5);ADD Class CHAR(5);解释:不论原表是否为空,都可以增加一列,并且增加的一列的值都为空。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.2 创建与使用基本表创建与使用基本表v 3.修改列的数据类型例3-7 由于学校转来一名少数民族的学生,学生姓名长度不满足需求,需要增加其长度,即修改Student表中Name列的数据类型。ALTER TABLE Student ALTER TABLE Student MODIFY Name CHARMODIFY Name CHAR(1010);解释:如果更改数据类型,可能会破坏原有的数据。2022
31、年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.2 创建与使用基本表创建与使用基本表v 4.删除唯一性约束例3-8 学生信息表中不再以学号为唯一的标识,即删除Student表中No列取唯一值的约束。ALTER TABLE Student ALTER TABLE Student DROP UNIQUE(No);DROP UNIQUE(No);SQL没有提供删除属性列的语句,可以将原表中要保留的列以及内容复制到一个新表中来删除原表。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.2 创建与使用基本表创建与使用基本表v 5.删除
32、基本表例3-9 删除Student表。DROP TABLE Student;DROP TABLE Student;2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.3 创建与使用索引创建与使用索引v 为了加快查询速度,建立索引是行之有效的方法。在日常生活中翻阅字典时,肯定不是直接查找信息,而是通过目录找到信息所在的页码,之后只需要翻阅感兴趣的几页,而不用翻阅整本字典。数据库建立的索引就相当于字典的目录,通过索引可以大大加快查询的速度。v 可以在基本表上根据需要建立一个或多个索引,并且建立与删除索引由数据库管理员(DBA)负责完成,系统存取数据时,自动选择合
33、适的索引作为存储路径,不需要用户干预。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.3 创建与使用索引创建与使用索引v 1建立索引例3-10 为了加快查询速度,为学生信息表(Student表)按学号(No)建立唯一索引。CREATE UNIQUE INDEX CREATE UNIQUE INDEX StunameStuname ON Student ON Student(SnameSname);2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.3 创建与使用索引创建与使用索引v 1建立索引解释:可以在Student
34、表中的Indexes中看到两个索引(Sno与Stuname),这是因为在以Sno为主键建表时,系统默认以Sno建立索引。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.3.3 创建与使用索引创建与使用索引2删除索引例3-11 删除学生信息表(Student表)的Stuname索引。DROP INDEX DROP INDEX StunameStuname;2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君第三章第三章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 MySQL数据库简介数据库简介3.3 定义
35、数据定义数据3.4 查询数据查询数据 3.5 更新数据更新数据3.6 视图视图3.7 小结小结2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.4 查询数据查询数据l 数据库的查询功能可以说是数据库的核心功能。SQL提供了SELECT语句进行数据查询,并且提供了丰富的用法以满足用户各种需求的查询。l 以学生-课程信息数据库为例,以下是数据库中的三个表。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君学生基本信息表(学号,姓名,性别,年龄,院系)Student(Sno,Sname,Ssex,Sage,Sdepartment)课程信
36、息表(课程编号,课程名,要修这门课需要先修的课程,学分)Course(Cno,Cname,Cprimaryno,Ccredit)学生选课表(学号,课程号,成绩)SC(Sno,Cno,Result)3.4 查询数据查询数据3.4.1 Select命令的一般格式命令的一般格式 3.4.2 单表查询单表查询3.4.3 连接查询连接查询3.4.4 嵌套查询嵌套查询3.4.5 集合查询集合查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.4.1 Select命令的一般格式命令的一般格式v解释:(1)方括号为可选项。(2)GROUP BY GROUP BY HAVIN
37、G HAVING表示将结果按 的值进行分组,该值相等的记录为一组,带【HAVINGHAVING】短语则只有满足指定条件的组才会输出。(3)ORDER BY ORDER BY ASC ASC DESC DESC显示结果要按值升序或降序排序2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君SELECT ALL DISTICT ,FROM,,WHERE GROUP BY HAVINGORDER BY ASC DESC3.4 查询数据查询数据3.4.1 Select命令的一般格式命令的一般格式 3.4.2 单表查询单表查询3.4.3 连接查询连接查询3.4.4 嵌套查询嵌
38、套查询3.4.5 集合查询集合查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.4.2 单表查询单表查询v 单表查询是指要查询的数据只和一个表相关。u 1查询表的全部内容例3-12 不知道Student表中有何内容,简单地浏览表中的所有数据。2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君SELECT*FROM Student;SELECT*FROM Course;SELECT*FROM SC;3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君图图3.7 3.7 查询
39、查询StudentStudent表的全部内容示例表的全部内容示例3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君图图3.8 3.8 查询查询CourseCourse表的全部内容示例表的全部内容示例3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君图图3.9 3.9 查询查询SCSC表的全部内容示例表的全部内容示例3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君u 2查询表中某些列的内容例3-13 查询全体学生的学号和姓
40、名。SELECT Sno,Sname FROM Student;3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 3查询表中的某些列,并且按照规定的列顺序显示例3-14 查询全体学生的学号和姓名,并且按照姓名、学号的列顺序输出。SELECT Sname,SnoFROM Student;3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 4查询经过计算的值,并更改列标题例3-15 查询全体学生的出生日期,并用Birthday作为计算出的出生日期的列标题。SELECT Sno
41、Number,Sname Name,2016-Sage Birthday FROM Student;解释:2016-Sage是一个算术表达式,根据需要也可以是函数和字符串,例如,My name is、COUNT(列的名称)、AVG(列的名称)、MAX(列的名称)等。3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 5查询表中符合条件的元组例3-16 查询全体男生的学号。SELECT DISTINCT SnameFROM StudentWHERE Ssex=男男;3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北
42、京电子科技学院计算机系 张克君张克君v 5查询表中符合条件的元组解释:(1)DISTINCT的作用是去除重复的查询结果,假如有两个人都叫小明,则这里的查询结果只会显示一个。(2)WHERE之后的条件语句可以根据需求自己编写。SELECT DISTINCT SnameFROM StudentWHERE Ssex=男男;u 字符匹配是查找指定的属性列值与相匹配的元组。可以是一个完整的字符串,也可以含有通配符%和_。u%(百分号)代表任意长度(长度可以为0)的字符串。例如,a%b标识以a开头,以b结尾的任意长度的字符串。Abc、addgb、ab等都满足该匹配串。u _(下画线)代表任意单个字符。例如
43、,a_b表示以a开头,以b结尾的长度为3的任意字符串,acb、afb等都满足该匹配串。谓语动词表谓语动词表2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君查询条件谓 词比较=、=、!=、!确定范围BETWEEN.AND.,NOT BETWEEN.AND.确定集合IN,NOT IN字符匹配LIKE,NOT LIKE空值IS NULL,IS NOT NULL多重条件AND,OR3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 6对查询结果进行排序例3-17 查询全体学生的1号课程的成绩,并按这门课程的成绩
44、由高到低排序。v 解释:DESC表示降序,ASC表示升序(默认为升序)。SELECT Sno,ResultFROM SCWHERE Cno=1ORDER BY Result DESC;3.4.2 单表查询单表查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 7对查询的结果进行分组例3-18 查询全体学生中选修了两门以上课程的学号,以及选修的总门数。v 解释:这条SELECT语句按Sno分组,即把具有相同学号的元组分到一个组中并对其进行计数。WHERE和HAVING都是条件语句,不过WHERE的操作对象是元组,而HAVING的操作对象是由元组组成的组。SEL
45、ECT Sno,COUNT(Cno)FROM SCGROUP BY SnoHAVING COUNT(*)1;3.4 查询数据查询数据3.4.1 Select命令的一般格式命令的一般格式 3.4.2 单表查询单表查询3.4.3 连接查询连接查询3.4.4 嵌套查询嵌套查询3.4.5 集合查询集合查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君3.4.3 连接查询连接查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 一个数据库中肯定不止存在一张表,并且这些表之间一般都存在某种联系,它们一起提供完整可用的信息,若一个查询同时涉
46、及两个或者两个以上的表,则需要进行连接查询。v 1.等值与非等值的连接查询例3-19 查询每个学生及其选课情况,要求显示学生学号、学生姓名、选修课程代码和成绩。SELECT Student.Sno,Sname,SC.Cno,ResultFROM Student,SCWHERE Student.Sno=SC.Sno;3.4.3 连接查询连接查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 1.等值与非等值的连接查询解释(1)上面的SQL语句是对Student表、SC表的自然连接。还有一种意义不大的卡氏积。它对每个表的每个元组都要进行连接,其查询结果可能很庞大
47、。假如Student表里有5个元组,SC表有4个元组,查询结果就会有5420个元组。卡氏积的SQL语句如下:SELECT Student.Sno,Sname,SC.Cno,ResultFROM Student,SCWHERE Student.Sno=SC.Sno;SWLWCT Student.*,SC.*.FROM Student,SC3.4.3 连接查询连接查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 1.等值与非等值的连接查询(2)连接查询的WHERE子句中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为:其中比较运算符主要有:=、=、=、
48、!=(或)等。此外,连接谓词还可以使用下面的形式。当连接运算符为=时,称为等值连接。使用其他运算符称为非等值连接。连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的,但名称不必相同。SELECT Student.Sno,Sname,SC.Cno,ResultFROM Student,SCWHERE Student.Sno=SC.Sno;.2.BETWEENBETWEEN.ANDAND.33.4.3 连接查询连接查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 2.表自身和自身连接查询例3-20 查询课程的先修课的先修课,要求显示课程号,以
49、及先修课的先修课的课程号。解释:为了区分自身连接的前后两个相同的表,在FROM语句中为这两个表定义了两个不同的别名。SELECT ONE.Cno,TWO.CprimerynoFROM Course ONE,Course TWOWHERE ONE.Cprimeryno=TWO.Cno;3.4.3 连接查询连接查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 3外连接查询例3-21 查询每个学生及其选课情况,要求显示学生学号、学生姓名、选修课程代码,以及成绩。解释:外连接符*出现在连接运算符的右边,称为左外连接;出现在连接运算符的左边叫作右外连接。SELECT
50、 Student.Sno,Sname,SC.Cno,ResultFROM Student,SCWHERE Student.Sno=SC.Sno;3.4.3 连接查询连接查询2022年8月3日北京电子科技学院计算机系北京电子科技学院计算机系 张克君张克君v 4更多表、更多条件的连接查询例3-22 查询每个学生及其选课情况,要求显示学生学号、学生姓名、选修课程代码、课程名称以及成绩。SELECT Student.Sno,Sname,SC.Cno,Cname,ResultFROM Student,Course,SCWHERE Student.Sno=SC.Sno AND Course.Cno=SC.