《数据库原理及应用案例教程》

上传人:ra****d 文档编号:241657880 上传时间:2024-07-13 格式:PPT 页数:128 大小:282.50KB
返回 下载 相关 举报
《数据库原理及应用案例教程》_第1页
第1页 / 共128页
《数据库原理及应用案例教程》_第2页
第2页 / 共128页
《数据库原理及应用案例教程》_第3页
第3页 / 共128页
点击查看更多>>
资源描述
关系数据库语言关系数据库语言SQLSQL概述概述SQL的开展的开展SQL(Structured Query Language)意为结构意为结构化查询语言化查询语言.1974年由年由Boyce和和Chamberlin提出来提出来.最初最初在在System R关系数据库中实现关系数据库中实现.1986年成为美国国家标准年成为美国国家标准.1987年成为国际标准年成为国际标准SQL86.1989年年,ISO公布了增强完整性特征的公布了增强完整性特征的SQL89标准标准.1993年年,ISO对对SQL89标准进行了大量的修改标准进行了大量的修改和扩充和扩充,推出推出SQL2(SQL92).SQL概述概述SQL是一种通用的、功能极强的关系数据库语言是一种通用的、功能极强的关系数据库语言.各数据库厂家纷纷推出各自支持各数据库厂家纷纷推出各自支持SQL的软件或与的软件或与SQL 接口软件接口软件,使自己的数据库可以运行使自己的数据库可以运行SQL.许多其他软件许多其他软件(例如图形处理、人工智能、软件工例如图形处理、人工智能、软件工程工具、软件开发工具等程工具、软件开发工具等)也利用也利用SQL语言的数据语言的数据查询功能查询功能,作为自身的一局部作为自身的一局部,使其数据查询功能使其数据查询功能更强大更强大.许多程序设计语言中也都引入了许多程序设计语言中也都引入了SQL.SQL概述概述SQL的特点的特点(1)一体化一体化非关系模型的数据语言非关系模型的数据语言模式数据定义语言:模式数据定义语言:Schema DDL外模式外模式(子模式数据定义语言:子模式数据定义语言:SubSchema DDL存储模式数据定义语言:存储模式数据定义语言:DSDL(Data Storage Definition Language)数据操纵语言:数据操纵语言:DMLSQL语言语言SQL将数据定义语言将数据定义语言DDL、数据操纵语言、数据操纵语言DML和数和数据控制语言据控制语言DCL集成在一起集成在一起,各种语言风格统一各种语言风格统一.SQL概述概述(2)高度非过程化高度非过程化非关系语言非关系语言通过存取路径存取数据通过存取路径存取数据.SQL语言语言SQL是一种面向问题的语言是一种面向问题的语言,只需提出只需提出“做什么做什么,不不必指出必指出“怎么做怎么做.存取路径的选择和存取路径的选择和SQL的操作的操作过程是由系统自动完成的过程是由系统自动完成的.(3)面向集合的操作方式面向集合的操作方式非关系语言非关系语言一次一个记录一次一个记录SQL采用集合操作采用集合操作,操作对象和操作结果都是元组的集合操作对象和操作结果都是元组的集合.SQL概述概述(4)两种使用方式、统一的语法结构两种使用方式、统一的语法结构SQL既是自含式语言既是自含式语言,又是嵌入式语言又是嵌入式语言.自含式语言自含式语言能独立地在联机方式下使用能独立地在联机方式下使用(命令方式命令方式),用户可以在用户可以在终端键盘上直接输入终端键盘上直接输入SQL命令对命令对DB进行操作进行操作.嵌入式语言嵌入式语言嵌入到高级语言嵌入到高级语言(VB、PB、Java等等)程序中程序中,利用主语利用主语言言(高级语言高级语言)进行计算处理、利用进行计算处理、利用DB语言进行数语言进行数据管理据管理.同一条命令在两种操作方式中的语法结构根本一致同一条命令在两种操作方式中的语法结构根本一致.SQL概述概述(5)语言简捷、易学易用语言简捷、易学易用SQL具有很强的功能具有很强的功能,但由于其设计巧妙但由于其设计巧妙,使得使得语言十分简捷语言十分简捷.完成其核心功能只用完成其核心功能只用9个动词:个动词:SELECT(查询查询)、CREATE(创立表、索引、视图创立表、索引、视图)、DROP(删删除表、索引、视图除表、索引、视图)、ALTER(修改表修改表)、INSERT(插入插入)、DELETE(删除删除)、UPDATE(修改修改)、GRANT(授权授权)、REVOKE(收回授收回授权权)SQL概述概述SQL支持三级模式结构:支持三级模式结构:外模式外模式外模式对应于视图外模式对应于视图View和局部根本表和局部根本表Base Table用户可以用用户可以用SQL语言对根本表和视图进行操作语言对根本表和视图进行操作从用户的观点看根本表和视图是一样的从用户的观点看根本表和视图是一样的模式模式模式对应于根本表模式对应于根本表根本表是独立存在的表根本表是独立存在的表每个根本表对应一个关系每个根本表对应一个关系内模式内模式内模式对应于存储文件内模式对应于存储文件存储文件是在计算机存储介质中存放的文件形式存储文件是在计算机存储介质中存放的文件形式一个或假设干个根本表对应一个存储文件一个或假设干个根本表对应一个存储文件SQL概述概述视图视图视图是从一个或几个根本表或其他视图导视图是从一个或几个根本表或其他视图导出的表出的表视图并不存放实际的数据视图并不存放实际的数据,仅保存视图的定仅保存视图的定义义使用视图时使用视图时,根据视图定义根据视图定义,从根本表中取从根本表中取数据数据因此因此,视图实际上是一个虚表视图实际上是一个虚表SQL概述概述SQL概述概述SQL语言分为三种子语言:语言分为三种子语言:数据定义语言数据定义语言DDL:用于定义数据库、表、视图用于定义数据库、表、视图等。主要有等。主要有CREATE、ALTER、DROP语句。语句。数据操纵语言数据操纵语言DML:用于插入、修改、删除和查用于插入、修改、删除和查询数据。主要有:询数据。主要有:INSERT、DELETE、UPDATE、SELECT语句语句。数据控制语言数据控制语言DCL:用于管理数据库用户对数据用于管理数据库用户对数据库中表、视图等的使用权限。主要有库中表、视图等的使用权限。主要有GRANT、REVOKE语句语句。数据定义数据定义1.定义数据库定义数据库CREATE DATABASE 参数参数1,参数参数nCREATE DATABASE为关键字。为关键字。尖括号尖括号“中的这局部,表示是不可省略的中的这局部,表示是不可省略的。中括号中括号“中的这局部,表示是可省略的。如语中的这局部,表示是可省略的。如语法中法中“参数参数1 参数参数n表示这些参数能省略表示这些参数能省略。创立一个学生选课数据库,取名为创立一个学生选课数据库,取名为StudentsInfo CREATE DATABASE StudentsInfo数据定义数据定义语句的执行语句的执行:在查询分析器的命令输入窗口中输:在查询分析器的命令输入窗口中输入入CREATE DATABASE StudentsInfoCREATE DATABASE StudentsInfo命令,点击界命令,点击界面上绿色的运行按钮,就可执行命令。命令执行面上绿色的运行按钮,就可执行命令。命令执行完成后,在查询分析器的右下方,有一个结果显完成后,在查询分析器的右下方,有一个结果显示窗口,从中可看到命令执行的结果。示窗口,从中可看到命令执行的结果。执行的结果执行的结果:CREATE DATABASE CREATE DATABASE 进程正在磁盘进程正在磁盘 StudentsInfo StudentsInfo 上分配上分配 0.75 MB 0.75 MB 的空间;的空间;CREATE DATABASE CREATE DATABASE 进程正在磁盘进程正在磁盘 StudentsInfo_log StudentsInfo_log 上分配上分配 0.49 MB 0.49 MB 的空间的空间数据定义数据定义2.定义表结构定义表结构表结构:即表头。定义表由几个列组成,每个列的表结构:即表头。定义表由几个列组成,每个列的列名是什么、该列中存放什么样的数据由数据列名是什么、该列中存放什么样的数据由数据类型决定、该列的宽度是多少、列中存放的数类型决定、该列的宽度是多少、列中存放的数据有什么样的约束、表中各列之间有什么样的约据有什么样的约束、表中各列之间有什么样的约束等。束等。语法:语法:CREATE TABLE (列级完整性约束列级完整性约束,n,n,表级完整性约束表级完整性约束,n )数据定义数据定义语句说明语句说明:用户给定的标识符。即所要定义的表名。用户给定的标识符。即所要定义的表名。表名最好取有意义的名字,如表名最好取有意义的名字,如Students,做到,做到见名知意;同一个数据库中,表名不允许同名。见名知意;同一个数据库中,表名不允许同名。用户给定的列名,最好取有意义的列名,用户给定的列名,最好取有意义的列名,如如Sno,Cno,做到见名知意。,做到见名知意。:指定该列存放数据的数据类型。:指定该列存放数据的数据类型。各各RDBMS所提供的数据类型有所不同的。所提供的数据类型有所不同的。SQL Server的常用数据类型:定长字符型的常用数据类型:定长字符型CHAR(n),变长字符型,变长字符型VARCHAR(n),整数,整数型型INT或或INTEGER,浮点型,浮点型FLOAT,日期型,日期型 Datetime。数据定义数据定义列级完整性约束列级完整性约束:定义该列上数据的约束条:定义该列上数据的约束条件。件。表级完整性约束表级完整性约束:定义某一列上的数据或某:定义某一列上的数据或某些列上的数据的约束条件。些列上的数据的约束条件。如果约束只用到表中的一列,那么可以在如果约束只用到表中的一列,那么可以在列级列级完整性约束完整性约束处定义,即在每一列的处定义,即在每一列的之后定义。也可以在之后定义。也可以在表级完整性约束表级完整性约束处定义,处定义,即在所有列定义完后定义。即在所有列定义完后定义。如果完整性约束涉及表中多个列,那么必须在如果完整性约束涉及表中多个列,那么必须在表级完整性约束表级完整性约束 处定义。处定义。数据定义数据定义常见的约束:常见的约束:NULL/NOT NULL(NULL/NOT NULL(空值约束空值约束/非空值约束非空值约束)DEFAULT(DEFAULT(默认值约束默认值约束)UNIQUE(UNIQUE(惟一值约束惟一值约束)CHECK(CHECK(检查约束检查约束)PRIMARY KEY(PRIMARY KEY(主键约束主键约束)FOREIGN KEY(FOREIGN KEY(外键约束外键约束)注意:注意:NOT NULL和和DEFAULT只能是列级约束,只能是列级约束,也即只能在列的数据类型之后定义。其他约束既也即只能在列的数据类型之后定义。其他约束既可作为列级约束,也可作为表级约束。可作为列级约束,也可作为表级约束。数据定义数据定义要在当前数据库要在当前数据库StudentsInfoStudentsInfo中的定义一个表,中的定义一个表,表名为表名为StudentsStudents,表中各列的要求见表,表中各列的要求见表3-1.3-1.数据定义数据定义定义语句:定义语句:CREATE TABLE Students(Sno CHAR(10)PRIMARY KEY,Sname CHAR(8)NOT NULL,Ssex CHAR(1)NOT NULL CHECK(Ssex=F OR Ssex=M),Sage INT NULL Sdept CHAR(15)DEFAULT Computer )数据定义数据定义等价定义如下等价定义如下CREATE TABLE Students (Sno CHAR(10),Sname CHAR(8)NOT NULL,Ssex CHAR(1)NOT NULL,Sage INT,Sdept CHAR(15)DEFAULT Computer ,PRIMARY KEY(Sno),CHECK(Ssex=F OR Ssex=M)数据定义数据定义除空值除空值/非空值约束外,其他约束都可定义一个约束名,非空值约束外,其他约束都可定义一个约束名,用用CONSTRAINT CONSTRAINT 来定义来定义上面的定义语句可以写成:上面的定义语句可以写成:CREATE TABLE Students (Sno CHAR(10),Sname CHAR(8)NOT NULL,Ssex CHAR(1)NOT NULL,Sage INT,Sdept CHAR(20)DEFAULT Computer ,CONSTRAINT SPK PRIMARY KEY(Sno),CONSTRAINT CK CHECK(Ssex=F OR Ssex=M)数据定义数据定义要在当前数据库要在当前数据库StudentsInfoStudentsInfo中的参加中的参加CoursesCourses表,表,表中各列的要求见表表中各列的要求见表3-2 3-2。数据定义数据定义定义语句定义语句:CREATE TABLE Courses(Cno CHAR(6)PRIMARY KEY,Cname CHAR(20)NOT NULL,PreCno CHAR(6),Credits INT)数据定义数据定义等价语句:等价语句:CREATE TABLE Courses(Cno CHAR(6),Cname CHAR(20)NOT NULL,PreCno CHAR(6),Credits INT,CONSTRAINT CPK PRIMARY KEY(Cno)数据定义数据定义在当前数据库在当前数据库StudentsInfoStudentsInfo中的参加中的参加EnrollmentEnrollment表,表中各列的要求见表表,表中各列的要求见表3-33-3。数据定义数据定义定义语句定义语句:CREATE TABLE Enrollment(Sno CHAR(10)NOT NULL,Cno CHAR(6)NOT NULL,Grade INT,CONSTRAINT EPK PRIMARY KEY(Sno,Cno),CONSTRAINT ESlink FOREIGN KEY(Sno)REFERENCES Students(Sno),CONSTRAINT EClink FOREIGN KEY(Cno)REFERENCES Courses(Cno)数据定义数据定义等价语句:等价语句:CREATE TABLE Enrollment(Sno CHAR(10)NOT NULL FOREIGN KEY(Sno)REFEENCES Students(Sno),Cno CHAR(6)NOT NULL FOREIGN KEY(Cno)REFERENCES Courses(Cno),Grade INT,PRIMARY KEY(Sno,Cno)数据定义数据定义等价语句:等价语句:CREATE TABLE Enrollment(Sno CHAR(10)NOT NULL REFERENCES Students(Sno),Cno CHAR(6)NOT NULL REFERENCES Courses(Cno),Grade INT,PRIMARY KEY(Sno,Cno)数据定义数据定义注意:在定义一个表结构时,除定义各列注意:在定义一个表结构时,除定义各列的列名、数据类型外,也定义了各列的约的列名、数据类型外,也定义了各列的约束条件。列的约束条件可以防止不合理的束条件。列的约束条件可以防止不合理的数据插入到表中,也能防止不该删除的数数据插入到表中,也能防止不该删除的数据被删除。据被删除。例如,在例如,在Students表中,定义了表中,定义了Sno为该为该表的主键约束,表示该列的值非空且惟一。表的主键约束,表示该列的值非空且惟一。因此,如果要向表中插入一行,但没有给因此,如果要向表中插入一行,但没有给出出Sno的值或给出空值,那么无法插入该行。的值或给出空值,那么无法插入该行。数据定义数据定义 又如,假设表中已有一行,该行的又如,假设表中已有一行,该行的Sno值为值为10010101,那么不能再插入一行,它的,那么不能再插入一行,它的Sno值也为值也为10010101。因为主键约束要求表中每行的主键值惟。因为主键约束要求表中每行的主键值惟一。一。再如,表中外键的约束保证了表间参照关系的正确性。再如,表中外键的约束保证了表间参照关系的正确性。如一个表中某一行的主键被另一个表的外键参照时,就如一个表中某一行的主键被另一个表的外键参照时,就不能删除该表中的行。不能删除该表中的行。关系模型要求关系实现实体完整性和参照完整性。即表关系模型要求关系实现实体完整性和参照完整性。即表必须有主键约束,并且如果表间有参照关系,那么必须必须有主键约束,并且如果表间有参照关系,那么必须定义外键约束。遗憾的是定义外键约束。遗憾的是SQL Server 2000中允许定义中允许定义没有主键约束的表。没有主键约束的表。数据定义数据定义3.3.修改表的结构修改表的结构语法:语法:ALTER TABLEALTER TABLE ALTER COLUMN ALTER COLUMN|ADD ADD|DROP COLUMN DROP COLUMN|ADD CONSTRAINT ADD CONSTRAINT|DROP CONSTRAINT DROP CONSTRAINT 数据定义数据定义语句说明:语句说明:ALTER TABLE为关键字。为关键字。指定要修改的表名。指定要修改的表名。“|分隔符,表示选其中之一。分隔符,表示选其中之一。、与与CREATE TABLE语句中的使用方法语句中的使用方法相同。相同。数据定义数据定义将将StudentsStudents表的表的SageSage列由原来的列由原来的INTINT类型改为类型改为SMALLINTSMALLINT类型。类型。定义语句定义语句:ALTER TABLE Students ALTER TABLE Students ALTER COLUMN Sage SMALLINT ALTER COLUMN Sage SMALLINT 为为EnrollmentEnrollment表添加一列,列的定义为:表添加一列,列的定义为:Room Room CHAR(20)CHAR(20)。定义语句:定义语句:ALTER TABLE Enrollment ALTER TABLE Enrollment ADD Room CHAR(20)ADD Room CHAR(20)注意:注意:向表中添加一列时,要么指定默认值约束,向表中添加一列时,要么指定默认值约束,要么指定要么指定NULL约束。约束。数据定义数据定义删除删除EnrollmentEnrollment表中已添加的表中已添加的RoomRoom列。列。定义语句:定义语句:ALTER TABLE Enrollment ALTER TABLE Enrollment DROP COLUMN Room DROP COLUMN Room注意:在删除一列时,必须先删除与该列有关的注意:在删除一列时,必须先删除与该列有关的所有约束,否那么该列不能被删除。原因很简单,所有约束,否那么该列不能被删除。原因很简单,如果还有其他约束用到该列,而该列允许被删除如果还有其他约束用到该列,而该列允许被删除的话,那么约束显然会出错。的话,那么约束显然会出错。数据定义数据定义为为EnrollmentEnrollment表的表的CreditsCredits列添加检查约束,要求列添加检查约束,要求CreditsCredits大于大于0 0小于小于2020。定义语句:定义语句:ALTER TABLE Enrollment ALTER TABLE Enrollment ADD CONSTRAINT CK3 CHECK(Credits0 AND ADD CONSTRAINT CK3 CHECK(Credits0 AND Credits20)Credits20)删除删除EnrollmentEnrollment表中已添加的约束表中已添加的约束CK3CK3。定义语句:定义语句:ALTER TABLE Enrollment ALTER TABLE Enrollment DROP CONSTRAINT CK3 DROP CONSTRAINT CK3注意:注意:上例中:上例中:CK3CK3为约束名。可见,删除约束时,必须为约束名。可见,删除约束时,必须给出约束名。所以在定义约束时,最好有约束名。给出约束名。所以在定义约束时,最好有约束名。数据定义数据定义4.4.删除表结构删除表结构语法:语法:DROP TABLEDROP TABLE 语句说明:语句说明:DROP TABLEDROP TABLE为关键字。为关键字。为要删除的表名。为要删除的表名。假定当前数据库中有一个临时表假定当前数据库中有一个临时表OldStudentsOldStudents,删,删除该表。除该表。定义语句:定义语句:DROP TABLE OldStudentsDROP TABLE OldStudents数据定义数据定义注意:如果要删除的表被另一个表的注意:如果要删除的表被另一个表的REFERENCESREFERENCES子句参照,那么不允许删除。子句参照,那么不允许删除。例如,如果在定义例如,如果在定义EnrollmentEnrollment表时,定义表时,定义了一个外键为:了一个外键为:FOREIGN KEY(Sno)FOREIGN KEY(Sno)REFERENCES Students(Sno)REFERENCES Students(Sno),那么表示,那么表示StudentsStudents表被表被EnrollmentEnrollment表参照,此时,表参照,此时,不能删除不能删除StudentsStudents表。假设一定要删除表。假设一定要删除StudentsStudents表,那么必须先删除表,那么必须先删除EnrollmentEnrollment表,然后才能删除表,然后才能删除StudentsStudents表。表。数据查询数据查询当定义了表结构后,此时的表只是一个空当定义了表结构后,此时的表只是一个空表。接下来,最好,先向表中添加假设干表。接下来,最好,先向表中添加假设干行,然后进行数据查询。向表中添加数据行,然后进行数据查询。向表中添加数据有两种方法,一种方法是利用数据库产品有两种方法,一种方法是利用数据库产品提供的工具,通过它可直接向表中添加、提供的工具,通过它可直接向表中添加、修改、删除数据。另一种是用修改、删除数据。另一种是用SQL的数据的数据更新更新INSERT、UPDATE、DELETE 语语句,有关数据更新语句的使用,详见句,有关数据更新语句的使用,详见3.4节。节。数据查询数据查询假定已建好假定已建好Students、Courses、Enrollment三个表,三个表,并已向各个表添加了数据见表并已向各个表添加了数据见表3-4、3-5、3-6。数据查询数据查询数据查询的相关问题数据查询的相关问题数据查询用来描述怎样从数据库中获取所数据查询用来描述怎样从数据库中获取所需的数据。需的数据。数据查询用到的语句就是查询语句,即数据查询用到的语句就是查询语句,即SELECT语句,它是数据库操作中最根本、语句,它是数据库操作中最根本、最重要的语句之一。最重要的语句之一。SELECT语句的功能就是从一个或多个表或语句的功能就是从一个或多个表或视图一种虚拟表中查到满足条件的数视图一种虚拟表中查到满足条件的数据。据。它的数据源是表或视图,而结果是另一个它的数据源是表或视图,而结果是另一个表。表。数据查询数据查询1.查询语句查询语句语法:语法:SELECT FROM WHERE GROUP BY HAVING ORDER BY 数据查询数据查询语句说明:语句说明:SELECTSELECT语句包括:语句包括:SELECT SELECT 子句,子句,FROMFROM子句,子句,可选的可选的WHEREWHERE子句、子句、GROUP BYGROUP BY子句、子句、HAVINGHAVING子句和可选的子句和可选的ORDER BYORDER BY子句。子句。SELECT SELECT ,称为,称为SELECTSELECT子句。子句。用于指定整个查询结果表中包含的列。假用于指定整个查询结果表中包含的列。假定已经执行完定已经执行完FROMFROM、WHEREWHERE、GROUP BYGROUP BY、HAVINGHAVING子句,从概念上来说得到了一个表,子句,从概念上来说得到了一个表,假设将该表称为假设将该表称为T T,从,从T T表中选择表中选择SELECTSELECT子子句指定的目标列组成表就为整个查询的结句指定的目标列组成表就为整个查询的结果表。果表。数据查询数据查询语句说明:语句说明:FROM FROM ,称为,称为FROMFROM子句。用于指子句。用于指定整个查询语句用到的一个或多个根本表定整个查询语句用到的一个或多个根本表或视图,是整个查询语句的数据来源,通或视图,是整个查询语句的数据来源,通常称为数据源表。常称为数据源表。WHERE WHERE ,称为,称为WHEREWHERE子句。用于子句。用于指定多个数据源表的连接条件和单个源表指定多个数据源表的连接条件和单个源表中行的筛选条件或选择条件。如果只有一中行的筛选条件或选择条件。如果只有一个源表,那么没有表间的连接条件,只有个源表,那么没有表间的连接条件,只有行的筛选条件。行的筛选条件。数据查询数据查询语句说明:语句说明:GROUP BY GROUP BY ,称为,称为GROUP BYGROUP BY子句。子句。假定已经执行完假定已经执行完FROMFROM、WHEREWHERE子句,那么从子句,那么从概念上来说得到了一个表,假设将该表称为概念上来说得到了一个表,假设将该表称为T1T1表,那么表,那么GROUP BYGROUP BY用于指定用于指定T1T1表按哪些列表按哪些列(称为分组列称为分组列)进行分组,对每一个分组进行进行分组,对每一个分组进行运算,产生一行。所有这些行组成一个表,运算,产生一行。所有这些行组成一个表,不妨把它称为不妨把它称为T2T2表,表,T2T2表实际上是一个组表。表实际上是一个组表。HAVING HAVING ,称为,称为HAVINGHAVING子句。子句。与与GROUP BYGROUP BY子句一起使用。用于指定组表子句一起使用。用于指定组表T2T2表的选择条件,即选择表的选择条件,即选择T2T2表中满足表中满足 的行,组成一个表就是的行,组成一个表就是SELECTSELECT子句中子句中提到的表提到的表T T数据查询数据查询语句说明:语句说明:ORDER BY ORDER BY ,称为,称为ORDER BYORDER BY子句。子句。假设有假设有ORDER BYORDER BY子句,那么用于指定查询子句,那么用于指定查询结果表结果表T T中按指定列进行升序或降序排序,中按指定列进行升序或降序排序,得到整个查询的结果表。得到整个查询的结果表。注意:注意:SELECTSELECT语句的结果表不一定满足关语句的结果表不一定满足关系的性质,也就是说,它不一定是一个关系的性质,也就是说,它不一定是一个关系,但是本章中仍然称为表。系,但是本章中仍然称为表。SELECTSELECT语句包含了关系代数中的选择、投语句包含了关系代数中的选择、投影、连接、笛卡儿积等运算。影、连接、笛卡儿积等运算。数据查询数据查询2.2.单表查询:在一个源表中查找所需的数据。单表查询:在一个源表中查找所需的数据。因此,单表查询时,因此,单表查询时,FROMFROM子句中的子句中的 只要给出一个源表表名。只要给出一个源表表名。SELECTSELECT子句:选择表中的假设干列子句:选择表中的假设干列在在SELECTSELECT子句的子句的 中指定整个查中指定整个查询结果表中出现的假设干个列名,各列名询结果表中出现的假设干个列名,各列名之间用逗号分隔。之间用逗号分隔。例:查询全体学生的学号与姓名例:查询全体学生的学号与姓名 SELECT Sno,Sname FROM Students SELECT Sno,Sname FROM Students 数据查询数据查询SELECT子句:选择表中的所有列子句:选择表中的所有列可以在可以在中指定表中所有列的列名,中指定表中所有列的列名,也可以用也可以用*来代替,或用来代替,或用.*代表指定表的所代表指定表的所有列。有列。例:例:查询全体学生的学号、姓名、性别、年龄、所查询全体学生的学号、姓名、性别、年龄、所在系。在系。SELECT Sno,Sname,Sname,Ssex,Sage,Sdept FROM Students 等价于等价于:SELECT*FROM Students数据查询数据查询SELECT子句:使用表达式子句:使用表达式表达式可以是列名、常量、函数、或用列名、常表达式可以是列名、常量、函数、或用列名、常量、函数等经过量、函数等经过+(加加)、-(减减)、*(乘乘)、/(除除)等等组成的公式。组成的公式。例:例:查询全体学生的选课情况,即学号、课程号、查询全体学生的选课情况,即学号、课程号、成绩,对成绩值都加成绩,对成绩值都加5。SELECT Sno,Cno,Grade+5 FROM Enrollment 注意:注意:注意:注意:结果中表达式列结果中表达式列Grade5无列名。实际上所有表达式列都没无列名。实际上所有表达式列都没有列名。有列名。数据查询数据查询SELECT子句:设置列的别名子句:设置列的别名所谓别名,就是另一个名字。主要是为了方便阅读。所谓别名,就是另一个名字。主要是为了方便阅读。设置列别名的方法有:设置列别名的方法有:原列名原列名 AS 列别名列别名 列别名原列名列别名原列名例:例:查询全体学生的学号、姓名,并为原来的英文列名设查询全体学生的学号、姓名,并为原来的英文列名设置中文别名。以下三种方法等价:置中文别名。以下三种方法等价:SELECT Sno 学号学号,Sname 姓名姓名 FROM StudentsSELECT Sno AS 学号学号,Sname AS 姓名姓名 FROM StudentsSELECT 学号学号=Sno,姓名姓名=Sname FROM Students数据查询数据查询综合例:查询全体学生的选课情况,其成综合例:查询全体学生的选课情况,其成绩列值都加绩列值都加5,并为各列设置中文的别名。,并为各列设置中文的别名。SELECT Sno 学号学号,Cno 课程号课程号,Grade+5 成绩成绩 FROM Enrollment结果为:结果为:数据查询数据查询SELECT子句:使用子句:使用DISTINCT消除结果表中完全消除结果表中完全重复的行重复的行 例:显示所有选课学生的学号。例:显示所有选课学生的学号。SELECT Sno 学号学号 FROM Enrollment例:显示所有选课学生的学号,并去掉重复行。例:显示所有选课学生的学号,并去掉重复行。SELECT DISTINCT Sno 学号学号 FROM Enrollment注意:与注意:与DISTINCT相反的是相反的是ALL,ALL表示保存表示保存结结 果表中的重复行。默认情况下是果表中的重复行。默认情况下是ALL,表示,表示保保 留重复行。留重复行。数据查询数据查询FROM子句:单表查询子句:单表查询单表查询中,源表只有一个,因此,单表查询中,源表只有一个,因此,FROM 例:要查找学生有关的信息,用到例:要查找学生有关的信息,用到Students表,表,那么那么FROM子句为:子句为:FROM Students例:要查找课程有关的信息,用到例:要查找课程有关的信息,用到Courses表,表,那么那么FROM子句为:子句为:FROM Courses例:要查找选课有关的信息,用到例:要查找选课有关的信息,用到Enrollment表,那么表,那么FROM子句为:子句为:FROM Enrollment 数据查询数据查询WHERE子句:子句:WHERE查询体条件中没有多表连接条件,只有一个表的查询体条件中没有多表连接条件,只有一个表的行筛选条件行筛选条件。中常用的运算符:比较运算符和逻辑中常用的运算符:比较运算符和逻辑运算符。运算符。比较运算符用于比较两个数值之间的大小是否相比较运算符用于比较两个数值之间的大小是否相等。常用的比较运算符有:等。常用的比较运算符有:=(等于等于)、(大于大于)、=(大于等于大于等于)、=(小于等于小于等于)、!=或或(不等于不等于)、!(不大于不大于)、!(不小于不小于)共共9种。种。数据查询数据查询逻辑运算符:逻辑运算符:范围比较运算符:范围比较运算符:BETWEEN AND,NOT BETWEEN AND 集合比较运算符:集合比较运算符:IN,NOT IN字符匹配运算符:字符匹配运算符:LIKE,NOT LIKE空值比较运算符:空值比较运算符:IS NULL,IS NOT NULL条件连接运算符:条件连接运算符:AND,OR,NOT 数据查询数据查询基于比较运算符的查询基于比较运算符的查询例:查询学生选课成绩大于例:查询学生选课成绩大于80分的学生学号、课分的学生学号、课程号、成绩。程号、成绩。SELECT*FROM Enrollment WHERE Grade80例:查询数学系全体学生的学号、姓名。例:查询数学系全体学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE Sdept=Math 数据查询数据查询基于基于BETWEENAND的查询的查询根本形式:列名根本形式:列名 BETWEEN 下限值下限值 AND 上限值上限值 等价于:列名等价于:列名=下限值下限值 AND列名列名=80 AND Grade=90 数据查询数据查询例:例:查询学生年龄不在查询学生年龄不在2030之间的学生学之间的学生学号、姓名、所在系。号、姓名、所在系。SELECT Sno,Sname,Sdept FROM Students WHERE Sage NOT BETWEEN 20 AND 30等价于:等价于:SELECT Sno,Sname,Sdept FROM Students WHERE Sage30数据查询数据查询基于基于IN的查询:的查询:IN用于测试一个列值是否用于测试一个列值是否与常量表中的任何一个值相等。与常量表中的任何一个值相等。IN条件表示格式为:条件表示格式为:列名列名 IN(常量常量1,常量常量2,常量常量n)当列值与当列值与IN中的任一常量值相等时,那么中的任一常量值相等时,那么条件为条件为TRUE,否那么为,否那么为FALSE。NOT IN与与IN的含义正好相反,当列值与的含义正好相反,当列值与IN中的任一常量值都不相等时,那么结果为中的任一常量值都不相等时,那么结果为TRUE,否那么为,否那么为FALSE。数据查询数据查询例:例:查询数学系、计算机系、艺术系学生的学号、查询数学系、计算机系、艺术系学生的学号、姓名。姓名。SELECT Sno,Sname FROM Students WHERE Sdept IN(Math,Computer,Art)等价于:等价于:SELECT Sno,Sname FROM Students WHERE Sdept=Math OR Sdept=Computer OR Sdept=Art数据查询数据查询例:例:查询既不是数学系、计算机系,也不是艺术系查询既不是数学系、计算机系,也不是艺术系学生的学号、姓名。学生的学号、姓名。SELECT Sno,Sname FROM Students WHERE Sdept NOT IN(Math,Computer,Art)等价于:等价于:SELECT Sno,Sname FROM Students WHERE Sdept!=Math AND Sdept!=Computer AND Sdept!=Art数据查询数据查询基于基于LIKE的查询:的查询:LIKE用于测试一个字符用于测试一个字符串是否与给定的模式匹配。所谓模式是一串是否与给定的模式匹配。所谓模式是一种特殊的字符串,其中可以包含普通字符,种特殊的字符串,其中可以包含普通字符,也可以包含特殊意义的字符,通常叫通配也可以包含特殊意义的字符,通常叫通配符。符。LIKE运算符的一般形式为:运算符的一般形式为:列名列名 LIKE 一般用一般用LIKE实现模糊查询实现模糊查询数据查询数据查询模式串可包含如下四种通配符:模式串可包含如下四种通配符:_:匹配任意一个字符。注意,在这里一个汉字:匹配任意一个字符。注意,在这里一个汉字或一个全角字符也算一个字符。如或一个全角字符也算一个字符。如 _u_表示表示第二个字符为第二个字符为u或或U,第一、第三个字符为任意,第一、第三个字符为任意字符的字符串。字符的字符串。%:匹配任意:匹配任意0个或多个字符。如个或多个字符。如S%表示以表示以S开头的字符串。开头的字符串。:匹配:匹配 中的任意一个字符。如中的任意一个字符。如SDJ 。:不匹配:不匹配 中的任意一个字符。如中的任意一个字符。如SDJ。数据查询数据查询例:例:查找姓名的第二个字符是查找姓名的第二个字符是u并且只有并且只有3个字符的学生的学个字符的学生的学号及姓名。号及姓名。SELECT Sno,Sname FROM Students WHERE Sname LIKE _u_例:例:查找姓名以查找姓名以S开头的所有学生的学号和姓名。开头的所有学生的学号和姓名。SELECT Sno,Sname FROM Students WHERE Sname LIKE S%例:例:查找姓名是以查找姓名是以S,D或或J开头的所有学生的学号及姓名。开头的所有学生的学号及姓名。SELECT Sno,Sname FROM Students WHERE Sname LIKE SDJ%例:例:查找姓名不是以查找姓名不是以S,D或或J开头的所有学生的学号及姓名。开头的所有学生的学号及姓名。SELECT Sno,Sname FROM Students WHERE Sname LIKE SDJ%数据查询数据查询基于基于NULL的查询:的查询:NULL是尚未确定或不是尚未确定或不确定的值。判断某列值是否为确定的值。判断某列值是否为NULL值,不值,不能使用比较运算符等于和不等于,而只能能使用比较运算符等于和不等于,而只能使用专门的判断空值的子句,如下:使用专门的判断空值的子句,如下:判断列值为空的语句格式为:列名判断列值为空的语句格式为:列名 IS NULL 判断列值不为空的语句格式为:列名判断列值不为空的语句格式为:列名 IS NOT NULL 数据查询数据查询例:查询无考试成绩的学生的学号和相应的课程号。例:查询无考试成绩的学生的学号和相应的课程号。SELECT Sno,Cno FROM Enrollment WHERE Grade IS NULL不等价于:不等价于:SELECT Sno,Cno FROM Enrollment WHERE Grade=0 例例:查查询询有有考考试试成成绩绩(即即成成绩绩不不为为空空值值)的的学学生生的的学学号号、课程号。课程号。SELECT Sno,Cno FROM Enrollment WHERE Grade IS NOT NULL 数据查询数据查询基于多个条件的查询:可以使用基于多个条件的查询:可以使用AND、OR逻辑谓词来连接多个条件,构成一个复杂逻辑谓词来连接多个条件,构成一个复杂的查询条件。的查询条件。使用格式为:使用格式为:AND AND OR OR用用AND连接的所有的条件都为连接的所有的条件都为TRUE时,整时,整个查询条件才为个查询条件才为TRUE。用用OR连接的条件中,只要其中任一个条件连接的条件中,只要其中任一个条件为为TRUE,整个查询条件就为整个查询条件就为TRUE。数据查询数据查询例:例:查询计算机系年龄在查询计算机系年龄在18岁以上的学生学岁以上的学生学号、姓名。号、姓名。SELECT Sno,Sname FROMStudents WHERE Sdept=ComputerAND Sage18例:例:求选修了求选修了C1C1课程或课程或C2C2课程的学生学号、课程的学生学号、成绩。成绩。SELECT Sno,Grade FROM Enrollment WHERE Cno=C1 OR Cno=C2数据查询数据查询基于统计函数的查询:统计函数也称为集合函数基于统计函数的查询:统计函数也称为集合函数或聚集函数,其作用是对一组值进行计算并返回或聚集函数,其作用是对一组值进行计算并返回一个值。一个值。数据查询数据查询例:例:求学生的总人数求学生的总人数SELECT COUNT(*)AS学生的总人数学生的总人数FROM Students例:例:求选修了课程的学生人数求选修了课程的学生人数SELECT COUNT(DISTINCT Sno)AS 选修课程的总人数选修课程的总人数 FROM Enrollment例:例:求选修了求选修了C1课程的学生的平均成绩。课程的学生的平均成绩。SELECT AVG(Grade)AS 平均成绩平均成绩 FROM Enrollment WHERE Cno=C1数据查询数据查询例:例:求求20010102号学生的考试总成绩之和。号学生的考试总成绩之和。SELECT SUM(Grade)AS 20010102考考试试总总成成绩绩 FROM Enrollment WHERE Sno=20010102例:例:选修了选修了C1课程的学生的最高分和最低分课程的学生的最高分和最低分SELECT MAX(Grade)AS 最高分最高分,MIN(Grade)AS 最低分最低分 FROM Enrollment WHERE Cno=C1 数据查询数据查询GROUP BY子句子句:有时我们需要把有时我们需要把FROM、WHERE子句产生的表按某种原那么分成假子句产生的表按某种原那么分成假设干组,然后再对每个组进行统计,一组设干组,然后再对每个组进行统计,一组形成一行,最后把所有这些行组成一个表,形成一行,最后把所有这些行组成一个表,称为组表。称为组表。一般形式为:一般形式为:GROUP BY ,n GROUP BY子句在子句在WHERE子句后边。子句后边。其中其中是分组的依据。分组原那么是分组的依据。分组原那么是是的列值相同,就为同一组。当的列值相同,就为同一组。当有多个有多个时,那么先按第一个列值时,那么先按第一个列值分组,然后对每一组再按第二个列值进行分组,然后对每一组再按第二个列值进行分组,依此类推。分组,依此类推。数据查询数据查询例:例:求选修每门课程的学生人数。求选修每门课程的学生人数。SELECT Cno AS 课课程程号号,COUNT(Sno)AS 选选修修人人数数FROM Enrollment GROUP BY Cno 数据查询数据查询例:例:输出每个学生的学号和他输出每个学生的学号和他/她的各门课程的总她的各门课程的总成绩。成绩。SELECT Sno 学号学号,Sum(grade)总成绩总成绩 FROM Enrollment GROUP BY Sno 学号学号总成绩总成绩200101019020010102244数据查询数据查询注意:包含注意:包含GROUP BY子句的查询语句中,子句的查询语句中,SELECT子句指定的列名,要么是统计函数,如上子句指定的列名,要么是统计函数,如上例中的例中的COUNT(Sno),要么是包含在,要么是包含在GROUP BY子句中的列名,如上例中的子句中的列名,如上例中的Cno,否那么将出错。,否那么将出错。如以下语句是错误的:如以下语句是错误的:SELECT Sno AS 学号学号,Cno AS 课程号课程号,COUNT(Sno)AS 选修人数选修人数 FROM Enrollment GROUP BY CnoSELECT子句中的子句中的Sno列,既不是统计函数,也不列,既不是统计函数,也不是是GROUP BY子句中的列名。子句中的列名。数据查询数据查询HAVING子句:子句:指定指定GROUP BY生成的组表的选择生成的组表的选择条件。条件。一般形式:一般形式:HAVING 注意:注意:HAVING子句在子句在GROUP BY子句之后,并子句之后,并且必须与且必须与GROUP BY子句一起使用子句一起使用例:例:求选修课程大于等于求选修课程大于等于2门课的学生的学号、平均门课的学生的学号、平均成绩,选修的门数。成绩,选修的门数。SELECT Sno,AVG(Grade)AS 平均成绩平均成绩,COUNT(*)AS 选修门数选修门数 FROM EnrollmentGROUP BY Sno HAVING COUNT(*)=2数据查询数据查询ORDER BYORDER BY子句:指定整个子句:指定整个SELECTSELECT语句的输出结果中语句的输出结果中记录的排序依据。记录的排序依据。一般格式:一般格式:ORDER BY ORDER BY ASC|DESC ASC|DESC ,n n 指定排序的依据,指定排序的依据,ASCASC表示按列值升序方式排表示按列值升序方式排序,序,DESCDESC表示按列值降序方式排序。如果没有指定表示按列值降序方式排序。如果没有指定排序方式,那么默认的排序方式为升序排序。排序方式,那么默认的排序方式为升序排序。在在ORDER BYORDER BY子句中,可以指定多个用逗号分隔的列子句中,可以指定多个用逗号分隔的列名。这些列出现的顺序决定了查询结果排序的顺序。名。这些列出现的顺序决定了查询结果排序的顺序。当指定多个列时,首先按最前面的列进行排序,如当指定多个列时,首先按最前面的列进行排序,如果排序后存在两个或两个以上列值相同的行,那么果排序后存在两个或两个以上列值相同的行,那么对这些值相同的行再依据第二列进行排序,依此类对这些值相同的行再依据第二列进行排序,依此类推推 数据查询数据查询例:例:查询所有学生的行,并按学生的年龄值查询所有学生的行,并按学生的年龄值从小到大排序。从小到大排序。SELECT*FROM Students ORDER BY Sage例:例:查询选修了查询选修了C1课程的学生的学号和成绩,课程的学生的学号和成绩,查询结果按成绩降序排列。查询结果按成绩降序排列。SELECT Sno,Grade FROM Enrollment WHERE Cno=C1 ORDER BY Grade DESC数据查询数据查询例:例:查询全体学生信息,查询结果按所在系的系名查询全体学生信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列。升序排列,同一系的学生按年龄降序排列。SELECT*FROM Students ORDER BY Sdept ASC,Sage DESC例:例:求选修课程大于等于求选修课程大于等于2 2门课的学生的学号、平门课的学生的学号、平均成绩和选课门数,并按平均成绩降序排列。均成绩和选课门数,并按平均成绩降序排列。SELECT Sno AS 学学号号,AVG(Grade)AS 平平均均成成绩绩,COUNT(*)AS 修课门数修课门数 FROM Enrollment GROUP BY Sno HAVING COUNT(*)=2 ORDER BY AVG(Grade)DESC 数据查询数据查询3.多表连接查询:多表查询指的是从多个源多表连接查询:多表查询指的是从多个源表中检索数据表中检索数据。因此,多表查询时,。因此,多表查询时,FROM子句中的子句中的要给出所有源要给出所有源表表名,各个表名之间要用逗号分隔。表表名,各个表名之间要用逗号分隔。FROM子句:子句:FROM 例:假设一个查询用到三个表,表名分别为例:假设一个查询用到三个表,表名分别为Students、Enrollment,Courses。那么。那么FROM子句为:子句为:FROM Students,Enrollment,Courses数据查询数据查询SELECT子句子句与单表查询的与单表查询的SELECT子句功能根本相同,也是用子句功能根本相同,也是用来指定查询
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!