《数据库整理》第3章 sql.ppt_第1页
《数据库整理》第3章 sql.ppt_第2页
《数据库整理》第3章 sql.ppt_第3页
《数据库整理》第3章 sql.ppt_第4页
《数据库整理》第3章 sql.ppt_第5页
已阅读5页,还剩99页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 关系数据库标准语言SQL,2,3.1 SQL语言的基本概念与特点 3.2 了解SQL Server 2008 3.3 创建与使用数据库 3.4 创建与使用数据表 3.5 创建与使用索引 3.6 数据查询 3.7 数据更新 3.8 视图 3.9 数据控制,3,结构化查询语言 Structured Query Language,数据查询 数据定义 数据操纵 数据控制,SQL简洁、方便实用、功能齐全,已成为目前应用最广泛的关系数据库语言。,4,3.1 SQL语言的基本概念与特点,3.1.1 SQL语言的发展及标准化 SQL语言的发展,Chamberlin,SEQUEL,SQL,大型数据库 Sybase INFORMIX SQL Server Oracle DB2 INGRES - 小型数据库 FoxPro Access,5,3.1.2 SQL语言的基本概念,基本表(Base Table) 一个关系对应一个基本表 一个或多个基本表对应一个存储文件 视图(View) 视图是从一个或几个基本表导出的表,是一个虚拟的表 S(SNo,SN,Sex,Age,Dept) S_Male(SNo,SN,Age,Dept),无数据,只有定义,Sex=男,在数据库中只存有S_Male的定义,数据仍在S表中,6,SQL语言支持的关系数据库的三级模式结构,7,3.1.3 SQL语言的主要特点,SQL语言是类似于英语的自然语言,简洁易用 SQL语言是一种非过程语言 SQL语言是一种面向集合的语言 SQL语言既是自含式语言,又是嵌入式语言 SQL语言具有数据查询、数据定义、数据操纵和数据控制四种功能,8,3.2 了解SQL Server 2008,企业版 SQL Server 2008 是满足企业联机事务处理和数据仓库应用程序高标准要求的综合数据平台。 标准版 SQL Server 2008 Standard 是一个完整的数据管理和商业智能平台,为正在运行的部门应用程序提供一流的易用性和易管理性。 Specialized 版本 工作组版 在此可靠的数据管理和报表平台上运行分机位置,提供安全性的远程同步和管理功能。 网络版 借助于面向 Web 服务环境的高度可用的 Internet,为您的客户提供低成本、大规模、高度可用的 Web 应用程序或主机解决方案。 移动版 可以免费下载,为所有 Microsoft Windows 平台上的移动设备、桌面和 Web 客户端构建单机应用程序和偶尔连接的应用程序。 免费版 可以免费下载,Express 对于学习和构建桌面和小型服务器应用程序以及对于通过 ISV 重新分发非常理想。,9,SQL Server 发展,10,3.2.1 SQL Server 2008的组件与体系结构,SQL Server 2008系统由4个主要部分组成,这4个部分被称为4个服务,分别是上面的数据引擎、分析服务、报表服务和集成服务。这些服务之间相互依存。,数据库引擎是(SQL Server Database Engine,SSDE)是SQL Server 2008系统的核心服务,负责完成业务数据的存储、处理、查询和安全管理等操作。例如:创建数据库、创建表、执行各种数据查询、访问数据库等操作都是由数据库引擎完成的。 分析服务(SQL Server Analysis Server ,SSAS)提供了多维分析和数据挖掘功能,可以支持用户建立数据库和进行商业智能分析。 报表服务(SQL Server Reporting Services ,SSRS)为用户提供了支持Web的企业级的报表功能。通过使用SQL Server 2008系统提供的SSRS服务,用户可以方便地定义和发展布满足自己需求的报表。 集成服务(SQL Server Integration Sevives,SSIS)是一个数据集成平台,可以完成有关数据的提取、转换、加载等。,11,3.2.2 企业管理器,由Enterprise Manager产生的SQL脚本是一个后缀名为.sql的文件 企业管理器的管理工作,文本文件,管理数据库,管理数据库对象,管理备份,管理复制,管理登录和许可,管理SQL Server Agent,管理SQL Server Mail,企业管理器界面、菜单、工具栏,12,3.2.3 查询分析器,使用查询分析器的熟练程度是衡量一个SQL Server用户水平的标准。,自SQL server 2005开始微将企业管理器和查询分析器合二为一,统一整合到 SQL Server Management Studio中。,13,3.3 创建与使用数据库,数据文件1,事务日志文件,数据库,数据文件n,存放数据库数据和数据库对象的文件 主要数据文件(.mdf ) +次要数据文件(.ndf ),只有一个,可有多个,记录数据库更新情况,扩展名为.ldf 当数据库破坏时可以用事务日志还原数据 库内容,采用多个数据文件来存储数据的优点体现在: (1)数据文件可以不断扩充而不受操作系统文件大小的限制。 (2)可将数据文件存储在不同的硬盘中,同时对多个硬盘做数据存取,提高效率。,14,文件组 文件组(File Group)是将多个数据文件集合起来形成的一个整体 主要文件组+次要文件组 一个数据文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用 日志文件不分组,它不能属于任何文件组,15,3.3.1 SQL Server的系统数据库,Model,Msdb,Tempdb,系统默认数据库,系统信息 : 磁盘空间 ;文件分配和使用 ;系统级的配置参 数;登录账号信息 ;SQL Server初始化信息; 系统中其他系统数据库和用户数据库的相关信息,Model数据库存储了所有用户数据库和Tempdb数 据库的创建模板 通过更改Model数据库的设置可以大大简化数据 库及其对象的创建设置工作,存储计划信息以及与备份和还原相关的信息,Tempdb数据库用作系统的临时存储空间 存储临时表,临时存储过程和全局变量值 ,创建临 时表 ,存储用户利用游标说明所筛选出来的数据,Master,16,3.3.2 SQL Server的实例数据库,实例数据库,pubs,Northwind,虚构的图书出版公司的基本情况,包含了一个公司的销售数据,SQL Server2005及SQL Server 2008中,代码示例和示例数据库不再随产品一起提供。但可以从 /sqlserversamples 下载。,17,3.3.3 创建用户数据库,用SQL Server Management Studio(SSMS)创建数据库 用SQL命令创建数据库 CREATE DATABASE database_name ON ,.n , ,.n LOG ON ,.n COLLATE collation_name FOR LOAD | FOR ATTACH ,18,例3-1 用SQL命令创建一个教学数据库Teach,数据文件的逻辑名称为Teach_Data,数据文件物理地存放在D:盘的根目录下,文件名为TeachData.mdf,数据文件的初始存储空间大小为10MB,最大存储空间为50MB,存储空间自动增长量为5MB;日志文件的逻辑名称为Teach_Log,日志文件物理地存放在D:盘的根目录下,文件名为TeachLog.ldf,初始存储空间大小为10MB,最大存储空间为25MB,存储空间自动增长量为5MB。,CREATE DATABASE Teach ON ( NAME=Teach_Data, FILENAME=D:TeachData.mdf, SIZE=10, MAXSIZE=50, FILEGROWTH=5) LOG ON ( NAME=Teach_Log, FILENAME=D:TeachLog.ldf, SIZE=5, MAXSIZE=25, FILEGROWTH=5),19,CREATE DATABASE MyDB ON PRIMARY (NAME = MyDB_file1, FILENAME = NC:DataMyDB_1.mdf, SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 10%), ( NAME = MyDB_file2, FILENAME = NC:DataMyDB_2.ndf, SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 10%), FILEGROUP NewFileGroup1 ( NAME = MyDB_file3, FILENAME = NC:DataMyDB_3.ndf, SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 10%), ( NAME = MyDB_file4, FILENAME = NC:DataMyDB_4.ndf, SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 10%), FILEGROUP NewFileGroup2 ( NAME = MyDB_file5, FILENAME = NC:DataMyDB_5.ndf, SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 10%) LOG ON ( NAME = MyDB_Logfile1, FILENAME = NC:DataMyDB_Logfile1.ldf, SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 10%), ( NAME = MyDB_Logfile2, FILENAME = NC:DataMyDB_Logfile2.ldf, SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB) GO,数据库 MyDB,主文件组 10MB C:DataMyDB_1.mdf 10MB C:DataMyDB_2.ndf,NewFileGroup1文件组 10MB C:DataMyDB_3.ndf 10MB C:DataMyDB_4.ndf,NewFileGroup2文件组 10MB C:DataMyDB_5.ndf,日志文件组 10MB C:DataMyDB_Logfile1.ldf 10MB C:DataMyDB_Logfile2.ldf,21,3.3.4 修改用户数据库,用SSMS修改数据库 用SQL命令修改数据库 ALTER DATABASE database_name ADD FILE ,.n TO FILEGROUP filegroup_name | ADD LOG FILE ,.n | REMOVE FILE logical_file_name WITH DELETE | ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name | MODIFY FILE | MODIFY NAME = new_dbname | MODIFY FILEGROUP filegroup_name filegroup_property | NAME = new_filegroup_name | SET ,.n WITH | COLLATE ,22,例3-2 修改Teaching数据库中的逻辑文件名Teaching_Data的文件增容方式为一次增加2MB。,ALTER DATABASE Teaching MODIFY FILE ( NAME = Teaching_Data, FILEGROWTH = 2mb ),23,3.3.5 删除用户数据库,用SSMS删除数据库 用SQL命令删除数据库 DROP DATABASE database_name ,.n 例3-3 删除数据库Teach。 DROP DATABASE Teach,24,3.3.6 查看数据库信息,用SSMS查看数据库信息(属性) 用系统存储过程显示数据库信息 用系统存储过程显示数据库结构 用系统存储过程显示文件信息 用系统存储过程显示文件组信息,Sp_helpdb dbname= name,Sp_helpfile filename = name,Sp_helpfilegroup filegroupname = name,25,EXEC Sp_helpdb Northwind EXEC Sp_helpfile Northwind EXEC Sp_helpfilegroup,26,3.4 创建与使用数据表,3.4.1 数据类型,整数数据,精确数值,近似浮点数值,日期时间数据,bigint,int,smallint,tinyint,numeric和decimal,float和real,datetime与smalldatetime,27,字符串数据,Unicode字符串数据,二进制数据,货币数据,char、varchar、text,nchar、nvarchar与ntext,binary、varbinary、image,money与smallmoney,标记数据,timestamp和uniqueidentifier,28,3.4.2 创建数据表,用SSMS创建数据表 相关属性定义 “字段名” “数据类型” 字段的“长度”、“精度”和“小数位数” “允许空” “默认值”,同一表中不许有重名字段,系统默认为NULL,29,用SQL命令创建数据表 CREATE TABLE (,|) 例3-4 用SQL命令建立一个学生表S。 CREATE TABLE S ( SNo CHAR(6), SN VARCHAR(8), Sex CHAR(2) DEFAULT 男, Age INT, Dept VARCHAR(20), DEFAULT ,缺省值为“男”,30,3.4.3 定义数据表的约束,正确性,有效性,相容性,数据的完整性,约束(Constraint) 默认(Default) 规则(Rule) 触发器(Trigger) 存储过程(Stored Procedure),SQL Server的数据完整性机制,第3章,第5章,第7章,31,完整性约束的基本语法格式 CONSTRAINT ,NULL/NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,CHECK,约束是SQL Server自动强制数据库完整性的方式,约束定义了列中允许的取值。 列约束 CONSTRAINT 表约束 , , CONSTRAINT (,),列约束,列约束/表约束,列约束/表约束,列约束/表约束,列约束/表约束,32,NULL/NOT NULL约束 NULL表示“不知道”、“不确定”或“没有数据”的意思 主键列不允许出现空值 CONSTRAINT NULL|NOT NULL 例3-5 建立一个S表,对SNo字段进行NOT NULL约束。 CREATE TABLE S ( SNo CHAR(6) CONSTRAINT S_Cons NOT NULL, SN VARCHAR(8), Sex CHAR(2), Age INT, Dept VARCHAR(20),可省略约束名称 : SNo CHAR(6) NOT NULL,33,UNIQUE约束(惟一约束) 指明基本表在某一列或多个列的组合上的取值必须惟一 在建立UNIQUE约束时,需要考虑以下几个因素: 使用UNIQUE约束的字段允许为NULL值。 一个表中可以允许有多个UNIQUE约束。 可以把UNIQUE约束定义在多个字段上。 UNIQUE约束用于强制在指定字段上创建一个UNIQUE索引,缺省为非聚集索引。 UNIQUE用于定义列约束 CONSTRAINT UNIQUE UNIQUE用于定义表约束 CONSTRAINT UNIQUE(,),34,例3-6 建立一个S表,定义SN为惟一键。 CREATE TABLE S ( SNo CHAR(6), SN CHAR(8) CONSTRAINT SN_Uniq UNIQUE, Sex CHAR(2), Age INT, Dept VARCHAR(20) 例3-7 建立一个S表,定义SN+SEX为惟一键,此约束为表约束。 CREATE TABLE S ( SNo CHAR(6), SN CHAR(8) UNIQUE, Sex CHAR(2), Age INT, Dept VARCHAR(20), CONSTRAINT S_UNIQ UNIQUE(SN, Sex),SN_Uniq可以省略 SN CHAR(8) UNIQUE,35,PRIMARY KEY约束(主键约束) 用于定义基本表的主键,起惟一标识作用 PRIMARY KEY与UNIQUE 的区别: 一个基本表中只能有一个PRIMARY KEY,但可多个UNIQUE 对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现NULL值,而对于UNIQUE所约束的惟一键,则允许为NULL 对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现NULL值,而对于UNIQUE所约束的惟一键,则允许为NULL,不能为NULL,不能重复,36,PRIMARY KEY用于定义列约束 CONSTRAINT PRIMARY KEY PRIMARY KEY用于定义表约束 CONSTRAINT PRIMARY KEY (,) 例3-8 建立一个S表,定义SNo为S的主键,建立另外一个数据表C,定义CNo为C的主键。 CREATE TABLE S ( SNo CHAR(6) CONSTRAINT S_Prim PRIMARY KEY, SN CHAR(8), Sex CHAR(2), Age INT, Dept VARCHAR(20) CREATE TABLE C ( CNo CHAR(5) CONSTRAINT C_Prim PRIMARY KEY, CN CHAR(20), CT INT),37,例3-9 建立一个SC表,定义SNo+CNo为SC的主键。 CREATE TABLE SC ( SNo CHAR(5) NOT NULL, CNo CHAR(5) NOT NULL, Score NUMERIC(4,1), CONSTRAINT SC_Prim PRIMARY KEY(SNo,CNo),38,FOREIGN KEY约束(外键约束) CONSTRAINT FOREIGN KEY REFERENCES (,),外部键,从表,主键,主表,引用,39,例3-10 建立一个SC表,定义SNo,CNo为SC的外部键。 CREATE TABLE SC ( SNo CHAR(5) NOT NULL CONSTRAINT S_Fore FOREIGN KEY REFERENCES S(SNo), CNo CHAR(5) NOT NULL CONSTRAINT C_Fore FOREIGN KEY REFERENCES C(CNo), Score NUMERIC(4,1), CONSTRAINT S_C_Prim PRIMARY KEY (SNo,CNo);,40,CHECK约束 CHECK约束用来检查字段值所允许的范围 在建立CHECK约束时,需要考虑以下几个因素: 一个表中可以定义多个CHECK约束。 每个字段只能定义一个CHECK约束。 在多个字段上定义的CHECK约束必须为表约束。 当执行INSERT、UNDATE语句时CHECK约束将验证数据。 CONSTRAINT CHECK (),41,例3-11 建立一个SC表,定义Score的取值范围为0100之间。 CREATE TABLE SC ( SNo CHAR(5), CNo CHAR(5), Score NUMERIC(4,1) CONSTRAINT Score_Chk CHECK(Score=0 AND Score =100) 例3-12 建立包含完整性定义的学生表。 CREATE TABLE S ( SNo CHAR(6) CONSTRAINT S_Prim PRIMARY KEY, SN CHAR(8) CONSTRAINT SN_Cons NOT NULL, Sex CHAR(2) DEFAULT 男, Age INT CONSTRAINT Age_Cons NOT NULL CONSTRAINT Age_Chk CHECK (Age BETWEEN 15 AND 50), Dept CHAR(10) CONSTRAINT Dept_Cons NOT NULL),42,3.4.4 修改数据表,用SSMS修改数据表的结构 用SQL命令修改数据表,ALTER TABLE ADD | ,ALTER TABLE ALTER COLUMN NULL|NOT NULL,ALTER TABLE DROP CONSTRAINT ,43,例3-13 在S表中增加一个班号列和住址列。 ALTER TABLE S ADD Class_No CHAR(6), Address CHAR(40) 使用此方式增加的新列自动填充NULL值,所以不能为增加的新列指定NOT NULL约束。 例3-14 在SC表中增加完整性约束定义,使Score在0100之间。 ALTER TABLE SC ADD CONSTRAINT Score_Chk CHECK(Score BETWEEN 0 AND 100),44,例3-15 把S表中的SN列加宽到10个字符。 ALTER TABLE S ALTER COLUMN SN CHAR(10) 不能改变列名; exec sp_rename 表名.原列名,新列名,column; 不能将含有空值的列的定义修改为NOT NULL约束; 若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型;存在冲突,则不能做此更改 只能修改NULL/NOT NULL约束,其他类型的约束在修改之前必须先将约束删除,然后再重新添加修改过的约束定义。 例3-16 删除S表中的主键。 ALTER TABLE S DROP CONSTRAINT S_Prim,Drop方式只用于删除完整性约束定义,45,3.4.5 删除基本表,用SSMS删除数据表 用SQL命令删除数据表 DROP TABLE 只能删除自己建立的表,不能删除其他用户所建的表,46,3.4.6 查看数据表,查看数据表的属性 属性包括:数据表的名称,所有者,创建日期,文件组,记录的行数,数据表中的字段名称、结构和类型等。 查看数据表中的数据 在SSMS中,用右键单击要查看数据的表,从快捷菜单中选择“选择前1000行”或选择“编辑前200行”,或在查询窗口,使用SELECT语句查看 。,47,3.5 创建与使用索引,3.5.1 索引的作用 3.5.2 索引的分类,加快查询速度 保证行的惟一性,聚集索引与非聚集索引,唯一索引,复合索引,聚集索引:查询速度快 非聚集索引:更新速度快,排列的结果存储在表中 只有一个,排列的结果不存储在表中 可以有多个,有UNIQUE,自动建立非聚集的惟一索引 有PRIMARY KEY,自动建立聚集索引,将两个或多个字段组合起来建立的索引, 单独的字段允许有重复的值,48,3.5.3 创建索引,用SSMS创建索引 用索引创建向导创建索引 直接创建索引 用SQL命令创建索引 CREATE UNIQUE CLUSTERED INDEX ON ( 次序 , 次序),建立惟一索引,建立聚集索引,ASC或DESC,默认为ASC,49,例3-18 为表SC在SNo和CNo上建立惟一索引。 CREATE UNIQUE INDEX SCI ON SC(SNo,CNo) 例3-19 为教师表T在TN上建立聚集索引。 CREATE CLUSTERED INDEX TI ON T(TN) 注意: (1)改变表中的数据(如增加或删除记录)时,索引将自动更新。 (2)索引建立后,在查询使用该列时,系统将自动使用索引进行查询。 (3)索引数目无限制,但索引越多,更新数据的速度越慢。对于仅用于查询的表可多建索引,对于数据更新频繁的表则应少建索引。,50,3.5.4 查看与修改索引,用SSMS查看和修改索引 用Sp_helpindex存储过程查看索引 Sp_helpindex objname = name 例3-20 查看表SC的索引。 EXEC Sp_helpindex SC,表的名称,51,用Sp_rename存储过程更改索引名称 Sp_rename 数据表名.原索引名, 原索引名 例3-21 更改T表中的索引TI名称为T_Index。 EXEC Sp_rename T.TI, T_Index, index,52,3.5.5 删除索引,用SSMS删除索引 用DROP INDEX命令删除索引 DROP INDEX数据表名.索引名 例3-22 删除表SC的索引SCI。 DROP INDEX SC.SCI,不能删除由CREATE TABLE 或ALTER TABLE命令创建的PRIMARY KEY或UNIQUE约束索引,也不能删除系统表中的索引,53,3.6 数据查询,3.6.1 SELECT命令的格式与基本使用 SELECT ALL|DISTINCTTOP N PERCENTWITH TIES 列名AS 别名1 ,列名 AS 别名2 INTO 新表名 FROM表名1或视图名1AS 表1别名 ,表名2或视图名2AS 表2别名 WHERE检索条件 GROUP BY HAVING ORDER BY ASC|DESC,投影,选取,54,查询语句SELECT 这是最常用的SQL语句。基本作用是根据其子句where指定的条件在特定的表内进行查询,返回一个记录集。简洁的语法形式如下: Select All | Distinct fields_list From table_name Where Group by Order by,55,SELECT语句的各参数和从句说明 All:选择符合条件的全部记录; Distinct:省略选择字段中包含重复数据的记录; Fields_list:字段名称列表,可以来自多个表,字段名称之间用“,” 隔开; Table_name:从其中获取记录的表的名称,记录可以来自多个表,表之间用“,”隔开; From:创建 一个从句,指明Fields_list中的字段来自哪些表; Where:创建一个从句,指定查询查询返回的结果应该满足的条件; Group By:按照选定的字段对查询结果分组; Order By:在从句中指定按哪些字段排序,升序(asc),降序(desc)。,56,例3-23 查询全体学生的学号、姓名和年龄。 SELECT SNo, SN, Age FROM S 例3-24 查询学生的全部信息。 SELECT * FROM S 例3-25 查询选修了课程的学生号。 SELECT DISTINCT SNo FROM SC 例3-26 查询全体学生的姓名、学号和年龄。 SELECT SN Name, SNo, Age FROM S,SELECT SN AS Name, SNo, Age,57,3.6.2 条件查询,常用的比较运算符:,58,比较大小 例3-27 查询选修课程号为C1的学生的学号和成绩 SELECT SNo,Score FROM SC WHERE CNo= C1 例3-28 查询成绩高于85分的学生的学号、课程号和成绩。 SELECT SNo,CNo,Score FROM SC WHERE Score85,59,多重条件查询 NOT、AND、OR 用户可以使用括号改变优先级 例3-29 查询选修C1或C2且分数大于等于85分学生的学号、课程号和成绩。 SELECT SNo, CNo, Score FROM SC WHERE (CNo = C1 OR CNo = C2) AND (Score = 85),高,低,60,确定范围 例3-30 查询工资在1000至1500元之间的教师的教师号、姓名及职称。 SELECT TNo,TN,Prof FROM T WHERE Sal BETWEEN 1000 AND 1500 例3-31 查询工资不在1000至1500之间的教师的教师号、姓名及职称。 SELECT TNo,TN,Prof FROM T WHERE Sal NOT BETWEEN 1000 AND 1500,WHERE Sal=1000 AND Sal=1500,61,确定集合 利用“IN”操作可以查询属性值属于指定集合的元组。 例3-32 查询选修C1或C2的学生的学号、课程号和成绩。 SELECT SNo, CNo, Score FROM SC WHERE CNo IN(C1,C2) 利用“NOT IN”可以查询指定集合外的元组。 例3-33 查询没有选修C1,也没有选修C2的学生的学号、课程号和成绩。 SELECT SNo, CNo, Score FROM SC WHERE CNo NOT IN(C1,C2),62,部分匹配查询 当不知道完全精确的值时,用户可以使用LIKE或NOT LIKE进行部分匹配查询(也称模糊查询) LIKE 例3-34 查询所有姓张的教师的教师号和姓名。 SELECT TNo, TN FROM T WHERE TN LIKE 张% 例3-35 查询姓名中第二个汉字是“力”的教师号和姓名。 SELECT TNo, TN FROM T WHERE TN LIKE_力%,63,SQL模糊查询,使用like比较关键字,加上SQL里的通配符,请参考以下: 1、LIKE Mc% 将搜索以字母 Mc 开头的所有字符串(如 McBadden) 2、LIKE %inger 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer) 3、LIKE %en% 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden) 4、LIKE _heryl 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl) 5、LIKE CKarseon 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson) 6、LIKE M-Zinger 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer) 7、LIKE Mc% 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather),64,空值查询 某个字段没有值称之为具有空值(NULL) 空值不同于零和空格,它不占任何存储空间 例3-36 查询没有考试成绩的学生的学号和相应的课程号。 SELECT SNo, CNo FROM SC WHERE Score IS NULL,65,3.6.3 常用库函数及统计汇总查询,66,例3-37 求学号为S1学生的总分和平均分。 SELECT SUM(Score) AS TotalScore, AVG(Score) AS AveScore FROM SC WHERE (SNo = S1) 例3-38 求选修C1号课程的最高分、最低分及之间相差的分数。 SELECT MAX(Score) AS MaxScore, MIN(Score) AS MinScore, MAX(Score) MIN(Score) AS Diff FROM SC WHERE (CNo = C1) 例3-40 求学校中共有多少个系。 SELECT COUNT(DISTINCT Dept) AS DeptNum FROM S,DISTINCT消去重复行,67,例3-41 统计有成绩同学的人数。 SELECT COUNT (Score) FROM SC 成绩为零的同学他计算在内,没有成绩(即为空值)的不计算。 例3-42 利用特殊函数COUNT(*)求计算机系学生的总数。 SELECT COUNT(*) FROM S WHERE Dept=计算机,COUNT(*)用来统计元组的个数,不消除重复行, 不允许使用DISTINCT关键字。,68,3.6.4 分组查询,GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。 例3-43 查询各个教师的教师号及其任课的门数。 SELECT TNo,COUNT(*) AS C_Num FROM TC GROUP BY TNo,GROUP BY子句按TNo的值分组,所有具有相同TNo的元 组为一组,对每一组使用函数COUNT进行计算,统计出各位教 师任课的门数。,69,若在分组后还要按照一定的条件进行筛选,则需使用HAVING子句 例3-44 查询选修两门以上课程的学生的学号和选课门数。 SELECT SNo, COUNT(*) AS SC_Num FROM SC GROUP BY SNo HAVING (COUNT(*) = 2),GROUP BY子句按SNo的值分组,所有具有相同SNo的元组为一 组,对每一组使用函数COUNT进行计算,统计出每位学生选课的门 数。HAVING子句去掉不满足COUNT(*)=2的组,70,3.3.5 查询的排序,当需要对查询结果排序时,应该使用ORDER BY子句,ORDER BY子句必须出现在其他子句之后。排序方式可以指定,DESC为降序,ASC为升序,缺省时为升序。 例3-45 查询选修C1 的学生学号和成绩,并按成绩降序排列。 SELECT SNo, Score FROM SC WHERE (CNo = C1) ORDER BY Score DESC,71,例3-46 查询选修C2、C3、C4或C5课程的学号、课程号和成绩,查询结果按学号升序排列,学号相同再按成绩降序排列。 SELECT SNo, CNo, Score FROM SC WHERE (CNo IN (C2, C3, C4, C5) ORDER BY SNo, Score DESC,72,例3-47 求选课在三门及以上且各门课程均及格的学生的学号及其总成绩,查询结果按总成绩降序列出。 SELECT SNo, SUM(Score) AS TotalScore FROM SC WHERE (Score = 60) GROUP BY SNo HAVING (COUNT(*) = 3) ORDER BY SUM(Score) DESC,取出整个SC,筛选Score=60的元组,将选出的元组按SNo分组,筛选选课三门以上的分组,将选取结果排序,在剩下的组中提取学号和总成绩,ORDER BY 2 DESC ; “2”代表查询结果的第二列,73,3.6.6 数据表连接及连接查询,连接查询:一个查询需要对多个表进行操作 表之间的连接:连接查询的结果集或结果表 连接字段:数据表之间的联系是通过表的字段值来体现的 连接操作的目的:从多个表中查询数据 表的连接方法 : 方法1:表之间满足一定条件的行进行连接时,FROM子句指明进行连接的表名,WHERE子句指明连接的列名及其连接条件 方法2:利用关键字JOIN进行连接:当将JOIN 关键词放于FROM子句中时,应有关键词ON与之对应,以表明连接的条件,74,JION的分类,75,等值连接与非等值连接 例3-48 查询“刘伟”老师所讲授的课程,要求列出教师号、教师姓名和课程号。 方法1: SELECT T.TNo,TN,CNo FROM T,TC WHERE (T.TNo = TC. TNo) AND (TN=刘伟) 方法2: SELECT T.TNo, TN, CNo FROM T INNER JOIN TC ON T.TNo = TC.TNo WHERE (TN = 刘伟),连接条件 ,当比较运算符为“”时,称为等值连接。其他情况为非等值连接。,引用列名TNo时要加上表名前缀,这是因为两个表中的列名相同, 必须用表名前缀来确切说明所指列属于哪个表,以避免二义性。,76,例3-49 查询所有选课学生的学号、姓名、选课名称及成绩。 SELECT S.SNo,SN,CN,Score FROM S,C,SC WHERE S.SNo=SC.SNo AND SC.CNo=C.CNo 例3-50 查询每门课程的课程名、任课教师姓名及其职务、选课人数。 select CN,COUNT(SNo) as Num,TN,Prof from SC,C ,TC,T where C.CNo=SC.CNo and C.CNo=TC.CNo and TC.TNo=T.TNo group by C.CN,T.TN,Prof,77,自身连接 例3-51 查询所有比“刘伟”工资高的教师姓名、工资和刘伟的工资。,方法1: SELECT X.TN,X.Sal AS Sal_a,Y.Sal AS Sal_b FROM T AS X ,T AS Y WHERE X.SalY.Sal AND Y.TN=刘伟,方法2: SELECT X.TN, X.Sal,Y.Sal FROM T AS X INNER JOIN T AS Y ON X.SalY.Sal AND Y.TN=刘伟,方法3: SELECT R1.TN,R1.Sal, R2.Sal FROM (SELECT TN,Sal FROM S ) AS R1 INNER JOIN (SELECT Sal FROM T WHERE TN=刘伟) AS R2 ON R1.SalR2.Sal,78,例3-52 检索所有学生姓名,年龄和选课名称。,方法1: SELECT SN,Age,CN FROM S,C,SC WHERE S.SNo=SC.SNo AND SC.CNo=C.CNo,方法2: SELECT R3.SNo,R3.SN,R3.Age,R4.CN FROM (SELECT SNo,SN,Age FROM S) AS R3 INNER JOIN (SELECT R2.SNo,R1.CN FROM (SELECT CNo,CN FROM C) AS R1 INNER JOIN (SELECT SNo,CNo FROM SC) AS R2 ON R1.CNo=R2.CNo) AS R4 ON R3.SNo=R4.SNo,select SN,Age,CN from S inner join SC on S.SNo =SC.SNo inner join C on SC.CNo =C.CNo,79,外连接 而在外部连接中,参与连接的表有主从之分,以主表的每行数据去匹配从表的数据列。 符合连接条件的数据将直接返回到结果集中,对那些不符合连接条件的列,将被填上NULL值后再返回到结果集中。 例3-53 查询所有学生的学号、姓名、选课名称及成绩(没有选课的同学的选课信息显示为空)。 SELECT S.SNo,SN,CN,Score FROM S LEFT OUTER JOIN SC ON S.SNo=SC.SNo LEFT OUTER JOIN C ON C.CNo=SC.CNo,左外部连接右外部连接,例:select S.SNo,SC.CNo from s left join SC on S.SNo =SC.SNo,80,3.6.7 子查询,在WHERE子句中包含一个形如SELECT-FROM-WHERE的查询块,此查询块称为子查询或嵌套查询。 返回一个值的子查询 例3-54 查询与“刘伟”老师职称相同的教师号、姓名 SELECT TNo,TN FROM T WHERE Prof= ( SELECT Prof FROM T WHERE TN= 刘伟),使用比较运算符 (=, , =, =, !=),81,返回一组值的子查询 使用ANY 例3-55 查询讲授课程号为C5的教师姓名。 SELECT TN FROM T WHERE (TNo = ANY (SELECT TNo FROM TC WHERE CNo = C5),使用ANY或ALL,SELECT TN FROM T,TC WHERE T.TNo=TC.TNo AND TC.CNo= C5 ,IN,82,例3-56 查询其他系中比计算机系某一教师工资高的教师的姓名和工资。 SELECT TN, Sal FROM T WHERE (Sal ANY ( SELECT Sal FROM T WHERE Dept = 计算机) AND (Dept 计算机) SELECT TN, Sal FROM T WHERE Sal ( SELECT MIN(Sal) FROM T WHERE Dept = 计算机) AND Dept 计算机,83,使用ALL 例3-58 查询其他系中比计算机系所有教师工资都高的教师的姓名和工资。 SELECT TN, Sal FROM T WHERE (Sal ALL ( SELECT Sal FROM T WHERE Dept = 计算机) AND (Dept 计算机) 例3-59 查询不讲授课程号为C5的教师姓名。 SELECT DISTINCT TN FROM T WHERE (C5 ALL ( SELECT CNo FROM TC WHERE TNo = T.T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论