第四章 结构化查询语言SQL(2012)_第1页
第四章 结构化查询语言SQL(2012)_第2页
第四章 结构化查询语言SQL(2012)_第3页
第四章 结构化查询语言SQL(2012)_第4页
第四章 结构化查询语言SQL(2012)_第5页
已阅读5页,还剩171页未读 继续免费阅读

下载本文档

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

文档简介

1、数理学院 冯莉第四章 结构化查询语言SQL12SQL概述数据定义语句3 查询54数据操纵视图4.1 SQL概述概述n SQL(Structured Query Language) SQL(Structured Query Language)结构化查询语结构化查询语言,言,19741974年年BoyceBoyce和和ChamberlinChamberlin提出,首先在提出,首先在IBMIBM公公司的关系数据库系统司的关系数据库系统System RSystem R上实现。上实现。 特点:功能丰富、使用方便、灵活、语言简洁易特点:功能丰富、使用方便、灵活、语言简洁易学,学,应用系统范围广,统一标准应

2、用系统范围广,统一标准。19861986年,年,ANSIANSI数据库委员会数据库委员会X3H2X3H2批准了批准了SQLSQL作为作为数据库语言的美国标准,数据库语言的美国标准,ISOISO随后也通过这一标准,随后也通过这一标准,使得使得SQLSQL成为数据库领域的主流语言成为数据库领域的主流语言。4.1.1 SQL语言的发展语言的发展n有关标准有关标准: :n SQL/86 SQL/86n SQL/89 SQL/89n SQL/92 SQL/92n SQL99 SQL99n SQL2003 SQL2003n SQL2006 SQL2006n 现状现状: :大部分大部分DBMSDBMS产品都

3、支持产品都支持SQLSQL,成为数据库的标,成为数据库的标准语言,是一个通用的、功能极强的关系数据库语言。准语言,是一个通用的、功能极强的关系数据库语言。4.1.1 SQL语言的发展语言的发展4.1.2 SQL语言的语言的特点特点一一. . 综合统一综合统一 集数据定义语言集数据定义语言DDLDDL、数据操纵语言、数据操纵语言DMLDML和数据和数据控制语言控制语言DCLDCL于一体,语言风格统一,可以独立完于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。成数据库生命周期中的全部活动。二二. . 高度非过程化高度非过程化 用户只需提出用户只需提出“做什么做什么”,至于,至于“怎么

4、做怎么做”由由DBMSDBMS解决;用户无需了解存取路径,存取路径的选解决;用户无需了解存取路径,存取路径的选择以及择以及SQLSQL语句的操作过程由系统自动完成。语句的操作过程由系统自动完成。 数据定义(数据定义(DDLDDL) 定义、删除、修改关系模式定义、删除、修改关系模式 定义、删除视图(定义、删除视图(ViewView) 定义、删除索引(定义、删除索引(IndexIndex) 数据操纵(数据操纵(DMLDML) 数据查询数据查询 数据增、删、改数据增、删、改 数据控制(数据控制(DCLDCL) 用户访问权限的授予、收回用户访问权限的授予、收回4.1.2 SQL语言的特点语言的特点三三

5、. . 面向集合的操作方式面向集合的操作方式 每一个每一个SQLSQL的操作对象是一个或多个关系,操的操作对象是一个或多个关系,操作的结果也是关系。作的结果也是关系。四四. . 以同一种语法结构提供两种使用方式以同一种语法结构提供两种使用方式 即可独立使用,又可嵌入到高级语言中使用,即可独立使用,又可嵌入到高级语言中使用,具有自主型和嵌入型两种特点,且在两种使用方具有自主型和嵌入型两种特点,且在两种使用方式下,式下,SQLSQL语言的语法结构基本一致。语言的语法结构基本一致。4.1.2 SQL语言的特点语言的特点五五. . 语言简捷、易学易用语言简捷、易学易用 核心功能只有核心功能只有9 9个

6、动词,个动词,语法简单,接近英语。语法简单,接近英语。SQL功能功能操作符操作符数据查询数据查询SELECT数据定义数据定义CREATE,DROP,ALTER数据操纵数据操纵INSERT,UPDATE,DELETE数据控制数据控制GRANT,REVOKE4.1.2 SQL语言的特点语言的特点4.1.3 SQL语言的语言的基本概念基本概念 支持关系数据库的三级模式结构支持关系数据库的三级模式结构SQL用户用户基本表基本表1视图视图1视图视图2基本表基本表2基本表基本表3基本表基本表4存储文件存储文件1存储文件存储文件2外模式外模式模式模式内模式内模式4.2 数据定义语句数据定义语句 SQL的数据

7、定义语句的数据定义语句操作操作对象对象操作方式操作方式创建创建删除删除修改修改表表CREAT TABLEDROP TABLEALTER TABLE视图视图CREAT VIEWDROP VIEW索引索引CREAT INDEXDROP INDEX注:注:SQLSQL通常不提供修改视图定义和索引定义的操作。通常不提供修改视图定义和索引定义的操作。补充补充 数据库的定义数据库的定义定义数据库定义数据库 CREATE DATABASE ON / LOG ON ( NAME=, FILENAME=, SIZE=, MAXSIZE=, FILEGROWTH= ) 补充补充 数据库的定义数据库的定义CREAT

8、E DATABASE Sample; 电力抢修工程数据库的数据库名为电力抢修工程数据库的数据库名为SampleSample,建立电力抢修工程数据库的命令:,建立电力抢修工程数据库的命令:删除数据库删除数据库 DROP DATABASE 例:例: drop database Sample;4.2.1 基本表的定义基本表的定义 CREATE TABLE (列级完整性约束条件列级完整性约束条件, 列级完整性约束条件列级完整性约束条件 ,表级完整性约束条件表级完整性约束条件);注:注:若完整性约束条件涉及多个属性列,则必须定义在表级上,若完整性约束条件涉及多个属性列,则必须定义在表级上,否则即可定义在

9、列级也可定义在表级。否则即可定义在列级也可定义在表级。创建表语句中创建表语句中常用完整性约束常用完整性约束、主码约束:、主码约束: PRIMARY KEYPRIMARY KEY、唯一性约束:、唯一性约束:UNIQUEUNIQUE、非空值约束:、非空值约束:NOT NULLNOT NULL、参照完整性约束、参照完整性约束: :FOREIGN KEY REFERENCES FOREIGN KEY REFERENCES 引用表名(引用列)引用表名(引用列)、检查约束:、检查约束:CHECK(CHECK(检查表达式检查表达式) ) 、默认值约束:、默认值约束:DEFAULTDEFAULT默认值默认值4

10、.2.1 基本表的定义基本表的定义 本章所有例子均来自电力抢修工程数据库,本章所有例子均来自电力抢修工程数据库,该数据库包括三个表:该数据库包括三个表:(1)(1)抢修工程计划表:抢修工程计划表:salvagingsalvaging(prj_num, prj_name, start_date, prj_num, prj_name, start_date, end_date, Prj_statusend_date, Prj_status) 其中其中prj_numprj_num为主码为主码 各属性含义如下:各属性含义如下: 工程项目编号(工程项目编号(prj_numprj_num) 工程项目名称(

11、工程项目名称(prj_nameprj_name) 开始日期(开始日期(start_datestart_date) 结束日期(结束日期(end_dateend_date) 是否按期完成(是否按期完成(Prj_statusPrj_status)4.2.1 基本表的定义基本表的定义(2)(2)配电物资库存记录表:配电物资库存记录表:stockstock(mat_num, mat_name, speci, warehouse, mat_num, mat_name, speci, warehouse, amount, unit, totalamount, unit, total) 其中其中mat_num

12、mat_num为主码。为主码。各属性含义如下:各属性含义如下: 物资编号(物资编号(mat_nummat_num) 物资名称(物资名称(mat_namemat_name) 规格(规格(specispeci) 仓库名称(仓库名称(warehousewarehouse) 数量(数量(amountamount) 单价(单价(unitunit) 总金额(总金额(total)total)4.2.1 基本表的定义基本表的定义(3)(3)配电物资领料出库表:配电物资领料出库表:out_stockout_stock(prj_num, mat_num, amount, get_date, prj_num, ma

13、t_num, amount, get_date, departmentdepartment) 主码为(主码为(prj_num, mat_numprj_num, mat_num)各属性含义如下:各属性含义如下: 工程项目编号(工程项目编号(prj_numprj_num) 物资编号(物资编号(mat_nummat_num) 领取数量(领取数量(amountamount) 领料日期(领料日期(get_dateget_date) 领料部门(领料部门(departmentdepartment)4.2.1 基本表的定义基本表的定义【例例4.14.1】建立建立 “抢修工程计划表抢修工程计划表”表表salva

14、gingsalvagingCREATE TABLE salvagingCREATE TABLE salvaging( prj_num char(8) PRIMARY KEY , ( prj_num char(8) PRIMARY KEY , / /* * 列级完整性约束,列级完整性约束,prj_numprj_num是主码是主码 * */ / prj_name varchar(50) , prj_name varchar(50) , start_date datetime , start_date datetime , end_date datetime , end_date datetime

15、, prj_status bit , prj_status bit ,);); 4.2.1 基本表的定义基本表的定义【例例4.24.2】建立一个建立一个“配电物资库存记录表配电物资库存记录表”表表stockstock。CREATE TABLE stockCREATE TABLE stock( mat_num char(8) PRIMARY KEY, ( mat_num char(8) PRIMARY KEY, mat_name varchar(50) NOT NULL, mat_name varchar(50) NOT NULL, speci varchar(20) NOT NULL, spe

16、ci varchar(20) NOT NULL, warehouse varchar(50) , warehouse varchar(50) , amount int , amount int , unit decimal(18, 2) , unit decimal(18, 2) , total AS (amount total AS (amount * * unit), unit), / /* * as as为自动计算字段,不能输入值,表示:总金额为自动计算字段,不能输入值,表示:总金额= =数量数量* *单单价价* */ /););4.2.1 基本表的定义基本表的定义【例例4.34.3】建

17、立一个建立一个“配电物资领料出库表配电物资领料出库表”表表out_stockout_stock。CREATE TABLE out_stockCREATE TABLE out_stock( prj_num char(8) ,( prj_num char(8) , mat_num char(8) , mat_num char(8) , amount int , amount int , get_date datetime , get_date datetime , department varchar(100) , department varchar(100) , PRIMARY KEY(prj

18、_num,mat_num), PRIMARY KEY(prj_num,mat_num), / /* * 主码由两个属性构成,必须作为表级完整性约束主码由两个属性构成,必须作为表级完整性约束 * */ / FOREIGN KEY (prj_num) REFERENCES salvaging(prj_num), FOREIGN KEY (prj_num) REFERENCES salvaging(prj_num), FOREIGN KEY (mat_num) REFERENCES stock(mat_num), FOREIGN KEY (mat_num) REFERENCES stock(mat_

19、num),););4.2.1 基本表的定义基本表的定义4.2.1 基本表的定义基本表的定义定义表的各个属性时需要指明其数据类型及长度。要注意,定义表的各个属性时需要指明其数据类型及长度。要注意,不同的不同的RDBMSRDBMS支持的数据类型不完全相同。支持的数据类型不完全相同。4.2.2 基本表的修改基本表的修改 ALTER TABLE ADD 完整性约束条件完整性约束条件DROP COLUMN ALTER COLUMN ;其中:其中: ADDADD增加新列和新的完整性约束条件;增加新列和新的完整性约束条件; DROPDROP删除指定列或者完整性约束条件;删除指定列或者完整性约束条件; ALT

20、ERALTER修改原有的列定义,包括修改列名和数据类型。修改原有的列定义,包括修改列名和数据类型。4.2.2 基本表的修改基本表的修改【例例4.44.4】向抢修工程计划表向抢修工程计划表salvagingsalvaging增加增加“工程项目负工程项目负责人责人”列,数据类型为字符型。列,数据类型为字符型。ALTER TABLE salvagingALTER TABLE salvaging ADD prj_director VARCHAR(10); ADD prj_director VARCHAR(10);【例例4.54.5】删除抢修工程计划表删除抢修工程计划表salvagingsalvagin

21、g中中“工程项工程项目负责人目负责人”的属性列。的属性列。ALTER TABLE salvagingALTER TABLE salvaging DROP COLUMN prj_director; DROP COLUMN prj_director; 【例例4.64.6】将配电物资领料出库表将配电物资领料出库表out_stockout_stock中领取数量中领取数量的数据类型由字符型改为正数。的数据类型由字符型改为正数。ALTER TABLE out_stockALTER TABLE out_stock ALTER COLUMN amount int; ALTER COLUMN amount in

22、t;注意:不论基本表中原来是否已有数据,新增加的列一律为空值。注意:不论基本表中原来是否已有数据,新增加的列一律为空值。注意:修改原有的列定义有可能会破坏已有数据。注意:修改原有的列定义有可能会破坏已有数据。4.2.3 基本表的删除基本表的删除 DROP TABLE 如:如:DROP TABLE out_stock;:基本表一旦删除,基本表一旦删除,则表中的数据,以及在其则表中的数据,以及在其基础上建立的索引和视图基础上建立的索引和视图都将自动删除。都将自动删除。注意:注意:基本表的删除是有限制条件基本表的删除是有限制条件的,欲删除的基本表不能被其他表的,欲删除的基本表不能被其他表的约束所引用

23、。如果存在这些依赖的约束所引用。如果存在这些依赖该表的对象,则此表不能被删除。该表的对象,则此表不能被删除。比如若执行:比如若执行:DROP TABLE stock;DROP TABLE stock;系统将会弹出如下图的提示:系统将会弹出如下图的提示:4.3 数据查询数据查询 查询是对现有的基本表和视图进行数据查询,并不改查询是对现有的基本表和视图进行数据查询,并不改变数据本身,是数据库的核心操作。变数据本身,是数据库的核心操作。 一般格式:一般格式:SELECT ALL|DISTINCTFROM WHERE GROUP BY HAVING ORDER BY ASC|DESC;4.3 数据查询

24、数据查询执行过程:执行过程:(5)ORDER(5)ORDER子句对输出的目标表进行排序子句对输出的目标表进行排序, ,可选择升序可选择升序或降序或降序. .(4)(4)按按SELECTSELECT子句中给出的列名或列表达式求值输出子句中给出的列名或列表达式求值输出; ;(2)(2)选取满足选取满足WHEREWHERE子句中给出的条件表达式的元组子句中给出的条件表达式的元组; ;(1)(1)读取读取FROMFROM子句中基本表、视图的数据子句中基本表、视图的数据, ,执行笛卡执行笛卡儿积操作儿积操作; ;(3)(3)按按GROUPGROUP子句中指定列的值分组子句中指定列的值分组, ,同时提取满

25、足同时提取满足HAVINGHAVING子句中组条件表达式的那些组子句中组条件表达式的那些组; ;4.3 数据查询数据查询 SelectSelect语句的含义语句的含义 对对 From From 子句中的各关系,作笛卡儿积子句中的各关系,作笛卡儿积( ();); 对对 Where Where 子句中的逻辑表达式进行选择(子句中的逻辑表达式进行选择()运算,找出符合条件的元组运算,找出符合条件的元组; ; Select Select 子句中的属性列表,对上述结果作投子句中的属性列表,对上述结果作投影(影()操作)操作. . 结果集结果集 查询操作的对象是关系,结果还是一个关系,查询操作的对象是关系

26、,结果还是一个关系,是一个结果集,而且是一个动态数据集。是一个结果集,而且是一个动态数据集。等价于:等价于:a a1 1 , a , a2 2 , , , a , an n( ( p p(R(R1 1 R R2 2 R Rm m) 我们以电力抢修工程数据库我们以电力抢修工程数据库 为例说明为例说明SELECTSELECT语句的各种用法语句的各种用法. . (a) stock表4.3 数据查询数据查询(b) salvaging表4.3 数据查询数据查询(c) out_stock表4.3 数据查询数据查询4.3.1 4.3.1 单表查询单表查询【例例4.84.8】查询所有配电物资的物资编号、物资名

27、称、查询所有配电物资的物资编号、物资名称、规格。规格。 SELECT mat_num, mat_name, speciSELECT mat_num, mat_name, speci FROM stock; FROM stock;选择表中若干列选择表中若干列选择表中的全部列或部分列,即关系代数的投影运算。选择表中的全部列或部分列,即关系代数的投影运算。1) 查询指定的列查询指定的列【例例4.94.9】查询所有配电物资的物资名称、物资编号、查询所有配电物资的物资名称、物资编号、规格和所在仓库名称。规格和所在仓库名称。 SELECT mat_name, mat_num, speci, warehou

28、seSELECT mat_name, mat_num, speci, warehouse FROM stock; FROM stock;注:注: 中各个列的先后顺序可以与表中的顺序不一致,用户可以中各个列的先后顺序可以与表中的顺序不一致,用户可以根据应用的需要改变列的显示顺序。根据应用的需要改变列的显示顺序。【例例4.104.10】查询所有配电物资的记录。查询所有配电物资的记录。 SELECT SELECT * * FROM stock FROM stock等价于:等价于:SELECT mat_num, mat_name, speci, warehouse, SELECT mat_num, m

29、at_name, speci, warehouse, amount, unit, totalamount, unit, totalFROM stockFROM stock4.3.1 单表查询单表查询2) 查询全部列查询全部列注注:用:用* *,则列的显示顺序与基本表一致。,则列的显示顺序与基本表一致。 【例例4.114.11】查询所有抢修工程的抢修天数。查询所有抢修工程的抢修天数。SELECT prj_name, start_date, end_date, SELECT prj_name, start_date, end_date, datediff(day, start_date,end_d

30、ate )datediff(day, start_date,end_date )FROM salvaging;FROM salvaging;4.3.1 单表查询单表查询3) 查询经过计算的值查询经过计算的值注注: 不仅不仅可以是属性列,也可以可以是属性列,也可以是算术表达式,还可以是算术表达式,还可以是字符串常量、函数等。是字符串常量、函数等。 SQL Server 2005 SQL Server 2005提供时间函数,可以对日期和时间输入提供时间函数,可以对日期和时间输入值执行操作,并返回一个字符串、数字或日期和时间值,如值执行操作,并返回一个字符串、数字或日期和时间值,如下表所示下表所示

31、函数函数功能功能getdate()getdate()返回系统当前的日期和时间返回系统当前的日期和时间year(date)year(date)返回一个整数,表示指定日期中的年份返回一个整数,表示指定日期中的年份month(date)month(date)返回一个整数,表示指定日期中的月份返回一个整数,表示指定日期中的月份day(date)day(date)返回一个整数,表示指定日期中的天数返回一个整数,表示指定日期中的天数datediff(datepart,dadatediff(datepart,date1,date2)te1,date2)返回返回date1date1和和date2date2的时

32、间间隔,其单位由的时间间隔,其单位由datepartdatepart参数指定参数指定4.3.1 单表查询单表查询【例例4.124.12】查询所有抢修工程的抢修天数,并在实际抢查询所有抢修工程的抢修天数,并在实际抢修天数列前加入一个列,此列的每行数据均为修天数列前加入一个列,此列的每行数据均为抢修抢修天数天数常量值。常量值。SELECT prj_name,SELECT prj_name,抢修天数抢修天数,datediff(day, ,datediff(day, start_date,end_date )start_date,end_date )FROM salvaging;FROM salvag

33、ing; 4.3.1 单表查询单表查询用户可以通过指定别名来改变查询结果的列标题,语法用户可以通过指定别名来改变查询结果的列标题,语法格式为:格式为:列名列名| |表达式表达式 AS AS 列标题列标题 或:或:列标题列标题= =列名列名| |表达式表达式SELECT prj_name SELECT prj_name 项目名称项目名称, start_date , start_date 开始日期开始日期, , end_date end_date 结束日期结束日期, datediff(day, , datediff(day, start_date,end_date ) start_date,end

34、_date ) 抢修天数抢修天数FROM salvaging;FROM salvaging;4.3.1 单表查询单表查询【例例4.134.13】在配电物资库存记录表中查询出所有的在配电物资库存记录表中查询出所有的仓库名称,并去掉结果表中的重复行。仓库名称,并去掉结果表中的重复行。SELECT warehouseSELECT warehouseFROM stock;FROM stock;4.3.1 单表查询单表查询2. 选择表中若干元组选择表中若干元组1)消除取值重复的行)消除取值重复的行保留表中取值重复行保留表中取值重复行 删除表中取值重复行删除表中取值重复行 SELECT DISTINCT

35、warehouseSELECT DISTINCT warehouseFROM stock;FROM stock;4.3.1 单表查询单表查询查询条件查询条件 比较比较确定范围确定范围确定集合确定集合字符匹配字符匹配 空值空值多重条件多重条件谓词谓词=,=,=,!=,!,!, NOT+上述比较运算上述比较运算BETWEEN AND, NOT BETWEEN ANDIN, NOT INLIKE, NOT LIKEIS NULL, IS NOT NULLAND, OR,NOT2) 查询满足条件的元组(查询满足条件的元组(WHERE)【例例4.144.14】查询供电局查询供电局1#1#仓库存放的所有物

36、资编号、仓库存放的所有物资编号、物资名称、规格以及数量。物资名称、规格以及数量。SELECT mat_num, mat_name, speci,amountSELECT mat_num, mat_name, speci,amountFROM stockFROM stockWHERE warehouse =WHERE warehouse =供电局供电局1#1#仓库仓库 4.3.1 单表查询单表查询(1)比较大小)比较大小【例例4.154.15】查询所有单价小于查询所有单价小于8080的物资名称、数量的物资名称、数量及其单价。及其单价。 SELECT mat_name, amount,unit S

37、ELECT mat_name, amount,unit FROM stock FROM stock WHERE unit 80; WHERE unit =80; WHERE NOT unit =80;4.3.1 单表查询单表查询【例例4.164.16】查询单价在查询单价在5010050100之间的物资名称、数之间的物资名称、数量及其单价。量及其单价。 SELECT mat_name, amount, unitSELECT mat_name, amount, unit FROM stock FROM stock WHERE unit BETWEEN 50 AND 100; WHERE unit

38、BETWEEN 50 AND 100;此句等价于:此句等价于: SELECT mat_name, amount, unitSELECT mat_name, amount, unit FROM stock FROM stock WHERE unit =50 AND unit =50 AND unit =100; 4.3.1 单表查询单表查询(2)确定范围)确定范围(between and, not between and) 【例例4.174.17】查询单价不在查询单价不在5010050100之间的物资名称、之间的物资名称、数量及其单价。数量及其单价。 SELECT mat_name, amoun

39、t, unitSELECT mat_name, amount, unit FROM stock FROM stock WHERE unit NOT BETWEEN 50 AND 100; WHERE unit NOT BETWEEN 50 AND 100;此句等价于:此句等价于: SELECT mat_name, amount, unit SELECT mat_name, amount, unit FROM stock FROM stock WHERE unit100; WHERE unit100;4.3.1 单表查询单表查询【例例4.184.18】查询存放在供电局查询存放在供电局1#1#仓库

40、和供电局仓库和供电局2#2#仓库的仓库的物资名称、规格及其数量。物资名称、规格及其数量。SELECT mat_name, speci, amountSELECT mat_name, speci, amountFROM stockFROM stockWHERE warehouse IN(WHERE warehouse IN(供电局供电局1#1#仓库仓库,供电局供电局2#2#仓库仓库)此句等价于:此句等价于:SELECT mat_name, speci, amountSELECT mat_name, speci, amountFROM stockFROM stockWHERE warehouse

41、=WHERE warehouse =供电局供电局1#1#仓库仓库 OR warehouse = OR warehouse =供电局供电局2#2#仓库仓库 4.3.1 单表查询单表查询(3)确定集合)确定集合(in, not in)【例例4.194.19】查询既没有存放在供电局查询既没有存放在供电局1#1#仓库,也没有仓库,也没有存放在供电局存放在供电局2#2#仓库的物资名称、规格及其数量。仓库的物资名称、规格及其数量。SELECT mat_name, speci, amountSELECT mat_name, speci, amountFROM stockFROM stockWHERE war

42、ehouse NOT IN (WHERE warehouse NOT IN (供电局供电局1#1#仓库仓库,供电局供电局2#2#仓库仓库)此句等价于:此句等价于:SELECT mat_name, speci, amountSELECT mat_name, speci, amountFROM stockFROM stockWHERE warehouse !=WHERE warehouse !=供电局供电局1#1#仓库仓库 AND warehouse != AND warehouse !=供电局供电局2#2#仓库仓库 4.3.1 单表查询单表查询4.3.1 单表查询单表查询(4)字符匹配)字符匹配

43、(like,not like,模糊查询,模糊查询)n找出满足给定匹配条件的字符串,其格式为:找出满足给定匹配条件的字符串,其格式为:NOT LIKE ESCAPE 匹配规则:匹配规则: “%” :代表任意长度(:代表任意长度(0个或多个)字符串。个或多个)字符串。 “_”:代表任意单个字符。:代表任意单个字符。 escape :定义换码字符,以去掉特殊字符的特定含义,:定义换码字符,以去掉特殊字符的特定含义,使其被作为普通字符看待。如使其被作为普通字符看待。如escape ,定义了,定义了 作为换作为换码字符,则可用码字符,则可用%去匹配去匹配%,用,用去匹配,用去匹配,用 去匹去匹配配 。【

44、例例4.204.20】查询存放在供电局查询存放在供电局1#1#仓库的物资的详细仓库的物资的详细情况。情况。SELECT SELECT * * FROM stock FROM stock WHERE warehouse LIKE WHERE warehouse LIKE 供电局供电局1#1#仓库仓库 等价于:等价于:SELECT SELECT * *FROM stockFROM stockWHERE warehouse =WHERE warehouse =供电局供电局1#1#仓库仓库 4.3.1 单表查询单表查询【例例4.214.21】查询所有绝缘电线的物资编号、名称和查询所有绝缘电线的物资编号

45、、名称和规格。规格。SELECT mat_num , mat_name, speciSELECT mat_num , mat_name, speciFROM stock FROM stock WHERE mat_name LIKE %WHERE mat_name LIKE %绝缘电线绝缘电线 【例例4.224.22】查询物资名称中第三、四个字为查询物资名称中第三、四个字为“绝缘绝缘”的物资编号、名称和规格。的物资编号、名称和规格。SELECT mat_num , mat_name, speciSELECT mat_num , mat_name, speciFROM stock FROM sto

46、ck WHERE mat_name LIKE _ _WHERE mat_name LIKE _ _绝缘绝缘%4.3.1 单表查询单表查询【例例4.234.23】查询所有不带绝缘两个字的物资编号、名称和查询所有不带绝缘两个字的物资编号、名称和规格。规格。SELECT mat_num , mat_name, speciSELECT mat_num , mat_name, speciFROM stock FROM stock WHERE mat_name NOT LIKE %WHERE mat_name NOT LIKE %绝缘绝缘%【例例4.244.24】查询物资名称为查询物资名称为断路器断路器_

47、 _户外真空户外真空物资信物资信息。息。SELECT SELECT * *FROM stock FROM stock WHERE mat_name LIKE WHERE mat_name LIKE 断路器断路器_户外真空户外真空 ESCAPE ; ESCAPE ; 说明:说明:ESCAPEESCAPE 短语表示短语表示“ ”为换码字符,这样匹配串中紧跟在为换码字符,这样匹配串中紧跟在“ ”后面的字符后面的字符“_ _”不再具有通配符的含义,转义为普通的不再具有通配符的含义,转义为普通的“_ _”字符。字符。4.3.1 单表查询单表查询 判断取值为空的语句格式为:判断取值为空的语句格式为: 列名

48、列名 IS NULLIS NULL 判断取值不为空的语句格式为:判断取值不为空的语句格式为:列名列名 IS NOT NULLIS NOT NULL【例例4.254.25】查询无库存单价的物资编号及其名称。查询无库存单价的物资编号及其名称。 SELECT mat_num , mat_nameSELECT mat_num , mat_name FROM stock FROM stock WHERE unit IS NULL WHERE unit IS NULL注意:这里的注意:这里的“ISIS”不能用等号(不能用等号(= =)代替。)代替。(5)涉及空值的查询)涉及空值的查询(is null, i

49、s not null)4.3.1 单表查询单表查询【例例4.264.26】查询规格为查询规格为BVV-120BVV-120的护套绝缘电线的的护套绝缘电线的物资编号、库存数量及库存地点。物资编号、库存数量及库存地点。SELECT mat_num,warehouse,amount SELECT mat_num,warehouse,amount FROM stock FROM stock WHERE mat_name=WHERE mat_name=护套绝缘电线护套绝缘电线 AND speci=BVV-120 AND speci=BVV-1204.3.1 单表查询单表查询(6)多重条件查询)多重条件查

50、询(and, or)【例例4.274.27】查询查询“护套绝缘电线护套绝缘电线”的物资编号及其单价,的物资编号及其单价,查询结果按单价降序排列。查询结果按单价降序排列。SELECT mat_name,unitSELECT mat_name,unitFROM stockFROM stockWHERE mat_name=WHERE mat_name=护套绝缘电线护套绝缘电线 ORDER BY unit DESCORDER BY unit DESC3. 3. 对查询结果排序对查询结果排序(order by (order by ASC|DESC)ASC|DESC)4.3.1 单表查询单表查询【例例4.

51、284.28】查询所有物资的信息,查询结果按所在仓库查询所有物资的信息,查询结果按所在仓库名降序排列,同一仓库的物资按库存量升序排列。名降序排列,同一仓库的物资按库存量升序排列。SELECT SELECT * * FROM stockFROM stockORDER BY warehouse DESC , amountORDER BY warehouse DESC , amount4.3.1 单表查询单表查询注:注: 1)默认为升序;)默认为升序; 2)认为空值是最)认为空值是最小的。小的。 TOP nTOP n子句子句:在查询结果中输出前面的:在查询结果中输出前面的n n条记录;条记录; TO

52、P n PERCENTTOP n PERCENT子句子句:在查询结果中输出前面占结果:在查询结果中输出前面占结果记录总数的记录总数的n%n%条记录。条记录。【例例4.294.29】显示显示stockstock表中,库存量最大的两条记录。表中,库存量最大的两条记录。SELECT TOP 2 SELECT TOP 2 * * FROM stock FROM stock ORDER BY amount DESCORDER BY amount DESC4. TOP4. TOP子句的用法子句的用法4.3.1 单表查询单表查询【例例4.304.30】显示显示stockstock表中占总数表中占总数20%2

53、0%的记录。的记录。SELECT TOP 20 PERCENT SELECT TOP 20 PERCENT * * FROM stockFROM stock 注意:注意:top top 子句不能和子句不能和DistinctDistinct关键字同时使用。关键字同时使用。4.3.1 单表查询单表查询4.3.1 单表查询单表查询5. 聚集函数聚集函数 COUNT(DISTINCT|ALL COUNT(DISTINCT|ALL * *) ) 统计元组个数统计元组个数 COUNT(DISTINCT|ALL COUNT(DISTINCT|ALL ) ) 统计一列中值的个数统计一列中值的个数SUM(DIS

54、TINCT|ALL SUM(DISTINCT|ALL ) ) 计算一列值的总和(此计算一列值的总和(此列必须是数值型)列必须是数值型)AVG(DISTINCT|ALL AVG(DISTINCT|ALL ) ) 计算一列值的平均(此计算一列值的平均(此列必须是数值型)列必须是数值型)MAX(DISTINCT|ALL MAX(DISTINCT|ALL ) ) 求一列值中的最大值求一列值中的最大值MIN(DISTINCT|ALL MIN(DISTINCT|ALL ) ) 求一列值中的最小值求一列值中的最小值 注:缺省为注:缺省为ALL,即计算时不取消重复值。,即计算时不取消重复值。【例例4.314.

55、31】 统计领取了物资的抢修工程项目数。统计领取了物资的抢修工程项目数。SELECT COUNT (DISTINCT prj_num)SELECT COUNT (DISTINCT prj_num)FROM out_stock;FROM out_stock;【例例4.324.32】 查询使用查询使用m001m001号物资的抢修工程的最高领号物资的抢修工程的最高领取数量、最低领取数量以及平均领取数量。取数量、最低领取数量以及平均领取数量。SELECT MAX(amount), MIN(amount), AVG(amount)SELECT MAX(amount), MIN(amount), AVG(

56、amount)FROM out_stockFROM out_stockWHERE mat_num = m001;WHERE mat_num = m001;注意:聚集函数中除注意:聚集函数中除COUNTCOUNT外,其他函数在计算过程中外,其他函数在计算过程中均忽略均忽略NULLNULL值;值;WHEREWHERE子句中是不能使用聚集函数作子句中是不能使用聚集函数作为条件表达式的。为条件表达式的。4.3.1 单表查询单表查询4.3.1 单表查询单表查询6. 对查询结果分组对查询结果分组(group by) GROUP BYGROUP BY子句可以将查询结果表按一列或多列子句可以将查询结果表按一列

57、或多列取值相等的原则进行分组。取值相等的原则进行分组。 分组的目的:为了分组的目的:为了细化集函数细化集函数的作用对象。如的作用对象。如果未对查询结果分组,集函数将作用于整个查询结果未对查询结果分组,集函数将作用于整个查询结果,即整个查询结果只有一个函数值。如果用果,即整个查询结果只有一个函数值。如果用GROUPGROUP分了组,集函数将作用于每一个组,即每一分了组,集函数将作用于每一个组,即每一组都有一个函数值。组都有一个函数值。【例例4.334.33】 查询每个抢修工程项目号及使用的物查询每个抢修工程项目号及使用的物资种类。资种类。SELECT prj_num SELECT prj_num

58、 项目号项目号, COUNT(, COUNT(* *) ) 物资种类物资种类FROM out_stockFROM out_stockGROUP BY prj_num;GROUP BY prj_num;4.3.1 单表查询单表查询3.4.1 单表查询单表查询HAVINGHAVING可以针对集函数的结果值进行筛选,它是作用可以针对集函数的结果值进行筛选,它是作用于分组计算的结果集;于分组计算的结果集;跟在跟在Group ByGroup By子句的后面,有子句的后面,有GROUP BYGROUP BY才有才有HAVINGHAVING【例例4.34】 查询使用了查询使用了2种以上物资的抢修工程项目号。

59、种以上物资的抢修工程项目号。SELECT prj_num 项目号项目号FROM out_stockGROUP BY prj_numHAVING COUNT(*)2;注:注:(1)WHERE作用于基本表或视图,从中选择满足条件的元组;作用于基本表或视图,从中选择满足条件的元组;(2)HAVING作用于组,从中选择满足条件的组。作用于组,从中选择满足条件的组。语法格式如下:语法格式如下: COMPUTE COMPUTE AVG | COUNT | MAX | MIN | SUM AVG | COUNT | MAX | MIN | SUM ( ( 表达式表达式) ,.n ) ,.n BY BY 表达

60、式表达式 ,.n ,.n 其中:其中:AVG | COUNT | MAX | MIN | SUMAVG | COUNT | MAX | MIN | SUM表示表示可以使用的聚集函数。表达式表示计算的列名,可以使用的聚集函数。表达式表示计算的列名,必须出现在选择列表中。必须出现在选择列表中。BY BY 表达式表示在结果集表达式表示在结果集中生成控制中断和小计。中生成控制中断和小计。 4.3.1 单表查询单表查询7. COMPUTER BY 子句子句获得统计数据及相应统计的明细数据。获得统计数据及相应统计的明细数据。【例例4.354.35】统计存放于供电局统计存放于供电局2#2#仓库的所有物仓库的

温馨提示

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

评论

0/150

提交评论