《3关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《3关系数据库标准语言SQL.ppt(155页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、3关系数据库标准语言关系数据库标准语言SQL电子信息工程系王国庆内容综述内容综述lSQL全称:Structured Query Language(结构化查询语言)lSQL是关系数据库的标准语言。lSQL语言具有综合统一、高度非过程化、面向集合、简捷易学等优点。lSQL语言可以分为四大部分:数据定义、数据查询、数据操作、数据控制。lSQL语言的数据查询功能非常丰富。目录目录l3.1:SQL概述l3.2:数据定义l定义数据库、基本表、索引。l3.3:查询l使用SELECT语句实现单表查询、多表查询、嵌套查询、集合查询。l3.4:数据更新l3.5:视图l3.6:数据控制l3.7:嵌入式SQL3.1:
2、SQL概述概述lSQL全称:Structured Query Language(结构化查询语言)l70年代中期,IBM公司的Sam Jose Research Laboratory(圣约瑟研究实验室)在研制System R关系数据库管理系统中研制并实现了SQL语言。l1986年10月,美国国家标准局ANSI采用SQL作为关系数据库管理系统的标准语言(ANSIX3.135-1986)。1987年国际标准化组织(ISO)通过了这一标准。lSQL成为数据库领域的主流语言,很多DBMS产品都支持SQL语言。SQL的特点:的特点:l综合统一 l高度非过程化l面向集合的操作方式l操作的对象、结果是元组的集
3、合l以同一种语法结构提供两种使用方式l既是自含式语言,又是嵌入式语言l语言简捷,易学易用l核心命令简捷,接近口语,容易学习,容易使用SQL的基本概念的基本概念lSQL包含4个部分:l数据定义语言DDL(Data Definition Language)l数据查询语言DQL(Data Query Language)l数据操纵语言DML(Data Manipulation Language)l数据控制语言DCL(Data Control Language)lSQL支持关系数据库三级模式结构,其中内模式对应于视图、部分基本表,模式对应于基本表,内模式对应于存储文件。3.2:数据定义数据定义lSQL
4、的数据定义功能包括:定义表、定义视图、定义索引。l定义表:create table,drop table,alter tablel定义视图:create view,drop viewl定义索引:create index,drop index 使用使用使用使用CREATE TABLE CREATE TABLE 语句语句语句语句CREATE TABLE 表名表名 (属性列属性列 数据类型数据类型);定义基本表的属性时需要指明各属性的数据类型、长度及与表相关的完整性约束条件。SQL CREATE TABLE dept (deptno NUMBER(2),dname VARCHAR2(14),loc
5、VARCHAR2(13);Table created.Table created.OracleOracle支持的数据类型支持的数据类型支持的数据类型支持的数据类型DatatypeDescriptionVARCHAR2(size)Variable-length character dataCHAR(size)Fixed-length character dataNUMBER(p,s)Variable-length numeric dataDATE Date and time valuesLONG Variable-length character data up to 2 gigabytesCL
6、OBSingle-byte character data up to 4 gigabytesRAW and LONG RAW Raw binary dataBLOBBinary data up to 4 gigabytesBFILEBinary data stored in an external file;up to 4 gigabytesSQL Server2000支持的数据类型支持的数据类型Integers(整型):(整型):bit、int、smallint、bigint、tinyint。Decimal(小数):(小数):decimal、numeric、float、real。Money
7、and small money(货币):(货币):Money、small money Datetime and smalldatetime(日期):(日期):Datetime、smalldatetime。Character Strings(非(非Unicode字符串):字符串):char、varchar、text。Unicode Character Strings(Unicode字符串):字符串):nchar、nvarchar、ntext。Binary Strings(二进制串):(二进制串):binary、varbinary、image。其它:其它:cursor、sql variant,ta
8、ble,timestamp、uniqueidentifier。定义完整性约束定义完整性约束定义完整性约束定义完整性约束CREATE TABLE 表名表名 (属性列属性列 数据类型数据类型 DEFAULT 表达式表达式属性列级属性列级_约束约束,表级表级_约束约束);CREATE TABLE emp(empno NUMBER(4),ename VARCHAR2(10),deptno NUMBER(7,2)NOT NULL,CONSTRAINT emp_empno_pk PRIMARY KEY(EMPNO);NOT NULL NOT NULL 约束约束约束约束 EMPEMP EMPNO ENAME
9、 JOB.COMM DEPTNO 7839 KINGPRESIDENT 10 7698 BLAKEMANAGER 30 7782 CLARKMANAGER 10 7566 JONESMANAGER 20 .NOT NULL NOT NULL 约束约束约束约束(此列中的每一行均不允许此列中的每一行均不允许此列中的每一行均不允许此列中的每一行均不允许NULLNULL值值值值)允许允许允许允许 NOT NULNOT NUL此列中可以包括此列中可以包括此列中可以包括此列中可以包括null null 值值值值NOT NULL NOT NULL 约束约束约束约束UNIQUE UNIQUE 约束约束约束约束
10、 DEPT DEPT DEPTNO DNAME LOC -10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS 30 SALESCHICAGO 40 OPERATIONS BOSTONUNIQUE UNIQUE 约束约束约束约束 50 SALESDETROIT 60BOSTON插入插入插入插入不允许不允许不允许不允许 (DNAME(DNAME-SALES 已经存在已经存在已经存在已经存在)允许允许允许允许 定义约束定义约束定义约束定义约束SQL CREATE TABLE emp(2 empno NUMBER(4),3enameVARCHAR2(10)NOT NULL
11、,4jobVARCHAR2(9),5mgrNUMBER(4),6hiredate DATE,7salNUMBER(7,2),8 commNUMBER(7,2),9deptnoNUMBER(7,2)NOT NULL);SQL CREATE TABLE dept(2 deptno NUMBER(2),3dname VARCHAR2(14),4loc VARCHAR2(13),5CONSTRAINT dept_dname_uk UNIQUE(dname);PRIMARY KEY PRIMARY KEY DEPT DEPT DEPTNO DNAME LOC -10 ACCOUNTING NEW YOR
12、K 20 RESEARCHDALLAS 30 SALESCHICAGO 40 OPERATIONS BOSTONPRIMARY KEYPRIMARY KEY插入插入插入插入 20 MARKETINGDALLAS FINANCENEW YORK不允许不允许不允许不允许 (DEPTNO(DEPTNO-20 20 已已已已经存在经存在经存在经存在)不允许不允许不允许不允许(DEPTNO(DEPTNO 为为为为NULLNULL值值值值)FOREIGN KEYFOREIGN KEY DEPT DEPT DEPTNO DNAME LOC -10 ACCOUNTING NEW YORK 20 RESEARC
13、HDALLAS .PRIMARYPRIMARYKEYKEY EMPEMP EMPNO ENAME JOB.COMM DEPTNO 7839 KINGPRESIDENT 10 7698 BLAKEMANAGER 30 .FOREIGNFOREIGNKEYKEY 7571 FORDMANAGER.200 9 7571 FORDMANAGER.200Insert intoInsert into不允许不允许不允许不允许(DEPTNO(DEPTNO-9 9 不在不在不在不在DEPTDEPT表中存在表中存在表中存在表中存在 允许允许允许允许定义约束定义约束定义约束定义约束SQL CREATE TABLE
14、dept(2 deptno NUMBER(2),3dname VARCHAR2(14),4loc VARCHAR2(13),5CONSTRAINT dept_dname_uk UNIQUE(dname),6CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno);SQL CREATE TABLE emp(2 empno NUMBER(4),3enameVARCHAR2(10)NOT NULL,4jobVARCHAR2(9),5mgrNUMBER(4),6hiredate DATE,7salNUMBER(7,2),8 commNUMBER(7,2),9deptn
15、oNUMBER(7,2)NOT NULL,10CONSTRAINT emp_deptno_fk FOREIGN KEY(deptno)11REFERENCES dept(deptno);练习:练习:例1:建立一个名为example的基本表CREATE TABLE example(A_id smallint identity(1,1)primary key,A_desc varchar(50)not null default new position title not formalized yet,Min_a tinyint not null check(min_a=10),Max_a tin
16、yint not null check(max_a ALTER TABLE dept30 2 ADD (job VARCHAR2(9);Table altered.Table altered.ALTER TABLEdept30MODIFY(ename VARCHAR2(15);Table altered.Table altered.练习练习:SQL ALTER TABLE emp 2 ADD CONSTRAINT emp_mgr_fk 3 FOREIGN KEY(mgr)REFERENCES emp(empno);Table altered.Table altered.SQL ALTER TA
17、BLE emp 2 DROP CONSTRAINT emp_mgr_fk;Table altered.Table altered.SQL ALTER TABLEdept 2 DROP PRIMARY KEY CASCADE;Table altered.Table altered.删除删除DEPT表中的表中的 PRIMARY KEY 约束约束,同时删除相应同时删除相应 EMP.DEPTNO 列的列的FOREIGN KEY 约束约束.练习:l基于教材59页的关系表,作如下修改:l向student表增加“入学时间”列,数据类型为日期型l将年龄的数据类型改为短整型l删除学生姓名必须取唯一值的约束使用使
18、用使用使用Drop TableDrop Table语句语句语句语句SQL DROP TABLE dept30;Table dropped.Table dropped.DROP TABLE student建立和删除索引建立和删除索引(1)l建立索引是加快查询速度的有效手段。l索引可以建立在表的一列或多列上。l系统在存取数据时会自动选择合适的索引,用户不必选择。l聚集索引(cluster)指索引项的顺序与表中记录的物理顺序一致的索引组织。一个基本上最多只能建立一个聚集索引。l唯一索引(unique)指索引中没一索引值只对应唯一的数据记录。使用使用Create Index语句语句CREATE IND
19、EX UNIQUE/CLUSTER 索引名索引名 ON 表名表名 (属性列属性列.);Create cluster index stusname ON student(Sname)Create unique index snocno on SC(Sno ASC,Cno DESC)Drop index stusname3.3:查询查询l查询是数据库管理的核心操作。SQL语言提供了select语句进行数据库的查询。lSelect语句的一般格式:SELECT ALL|DISTINCT.FROM,.WHERE GROUP BY HAVING ORDER BY ASC|DESCSELECTSELECTS
20、ELECTSELECT语句可以实现语句可以实现语句可以实现语句可以实现:选择选择选择选择投影投影投影投影Table 1Table 1Table 2Table 2Table 1Table 1Table 1Table 1连接连接连接连接1.1.1.1.单表查询单表查询单表查询单表查询SELECTDISTINCT*,目标列表达式目标列表达式 别名别名,.FROM表名表名;lSELECT 指明输出什么列lFROM 指明从哪个表查询基本的SELECT 语句:选择全部列选择全部列选择全部列选择全部列 DEPTNO DNAME LOC-10 ACCOUNTING NEW YORK 20 RESEARCH D
21、ALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTONSQL SELECT*FROM dept;选择指定的列选择指定的列选择指定的列选择指定的列 DEPTNO LOC-10 NEW YORK 20 DALLAS 30 CHICAGO 40 BOSTONSQL SELECT deptno,locFROM dept;例例:EMP:EMP表表 使用算术运算符使用算术运算符使用算术运算符使用算术运算符 SQL SELECT ename,sal,sal+300 FROM emp;ENAME SAL SAL+300-KING 5000 5300BLAKE 2850 3150
22、CLARK 2450 2750JONES 2975 3275MARTIN 1250 1550ALLEN 1600 1900.14 rows selected.定义列的别名定义列的别名定义列的别名定义列的别名 SQL SELECT ename AS name,sal salary FROM emp;NAME SALARY-.SQL SELECT ename Name,sal*12 Annual Salary FROM emp;Name Annual Salary-.使用字符连接运算符使用字符连接运算符使用字符连接运算符使用字符连接运算符SQL SELECTename+job AS Employe
23、es FROM emp;Employees-KINGPRESIDENTBLAKEMANAGERCLARKMANAGERJONESMANAGERMARTINSALESMANALLENSALESMAN.14 rows selected.SQL Server2000使用+进行字符连接运算ORACLE使用|进行字符连接运算使用字符连接运算符使用字符连接运算符使用字符连接运算符使用字符连接运算符Employee Details-KING is a PRESIDENTBLAKE is a MANAGERCLARK is a MANAGERJONES is a MANAGERMARTIN is a SALE
24、SMAN.14 rows selected.SQL SELECT ename+is a +job AS Employee DetailsFROM emp;消除重复行消除重复行消除重复行消除重复行SQL SELECT deptno FROM emp;DEPTNO-10 30 10 20.14 rows selected.l默认情况下的选择操作产生了重复行 消除重复行消除重复行消除重复行消除重复行SQL SELECT DISTINCT deptno FROM emp;DEPTNO-10 20 30 l使用DISTINCT参数消除重复行练习练习:l如何对SQL Server2000的实例数据库Nor
25、thwind实现以下查询:1:查询所有订单的详细信息2:查询所有订单的订购日期Select from ordersSelect orderid,orderdate from orders练习练习:3:查询所有订单的订购日期及预计的交货日期(假定通常交货期为30天)Select orderid,orderdate,orderdate+30 from ordersSelect orderid,orderdate,预计的发货日期预计的发货日期,orderdate+30 from ordersSelect orderid,orderdate+30 as 预计的发货日期预计的发货日期 from orde
26、rs练习:l基于教材59页的关系表创建查询:l查询全体学生的详细信息l查询全体学生的姓名、学号、所在系l查询全体学生的姓名及其出生年份l查询全体学生的姓名及其出生年份,并以“出生年份”为列名显示l查询选修了课程的学生学号使用使用使用使用SELECTSELECT语句实现选择操作语句实现选择操作语句实现选择操作语句实现选择操作“选取出选取出选取出选取出DEPTNODEPTNO为为为为1010的的的的所有雇员所有雇员所有雇员所有雇员 EMPEMP EMPNO ENAME JOB.DEPTNO 7839 KINGPRESIDENT 10 7698 BLAKEMANAGER 30 7782 CLARKM
27、ANAGER 10 7566 JONESMANAGER 20 .EMPEMP EMPNO ENAME JOB.DEPTNO 7839 KINGPRESIDENT 10 7782 CLARKMANAGER 10 7934 MILLER CLERK 10使用使用使用使用WHEREWHERE短句来选取元组短句来选取元组短句来选取元组短句来选取元组SELECTDISTINCT*,目标列表达式目标列表达式别名别名,.FROM 表名表名WHERE条件表达式条件表达式;WHERE短句跟在FROM短句的后面WHERE短句中可以使用运算符,包括:关系运算符有、逻辑运算符、及一些特殊的运算符。使用使用使用使用WH
28、EREWHERE短句来选取元组短句来选取元组短句来选取元组短句来选取元组SQL SELECT ename,job,deptno FROM emp WHERE job=CLERK;ENAME JOB DEPTNO-JAMES CLERK 30SMITH CLERK 20ADAMS CLERK 20MILLER CLERK 10使用比较运算符使用比较运算符使用比较运算符使用比较运算符SQL SELECT ename,sal,comm FROM emp WHERE sal SELECTename,sal FROM emp WHEREsal BETWEEN 1000 AND 1500;Lowerlim
29、itHigherlimit使用使用使用使用 IN IN 运算符运算符运算符运算符SQL SELECTempno,ename,sal,mgr FROM emp WHEREmgr IN(7902,7566,7788);EMPNO ENAME SAL MGR-7902 FORD 3000 7566 7369 SMITH 800 7902 7788 SCOTT 3000 7566 7876 ADAMS 1100 7788使用使用使用使用 LIKE LIKE 运算符运算符运算符运算符使用使用使用使用 LIKE LIKE 运算符可以进行字符串的匹配运算符可以进行字符串的匹配运算符可以进行字符串的匹配运算符
30、可以进行字符串的匹配.%代表任意长度(或长度为代表任意长度(或长度为代表任意长度(或长度为代表任意长度(或长度为00)的字符串)的字符串)的字符串)的字符串 _ _ 代表任意单个字符代表任意单个字符代表任意单个字符代表任意单个字符SQL SELECTename FROM emp WHEREename LIKE S%;.l使用 ESCAPE 进行转义后,可以查找“%”或“_”。SQL SELECTename FROMemp WHEREename LIKE _A%;ENAME-JAMES WARD使用使用使用使用 LIKE LIKE 运算符运算符运算符运算符SQL SELECTename FROM
31、emp WHEREename LIKE _A%escape;使用使用使用使用 IS NULL IS NULL 运算符运算符运算符运算符ll检测是否为空(检测是否为空(NULLNULL)值)值SQL SELECT ename,mgr FROM emp WHERE mgr IS NULL;ENAME MGR-KING使用使用使用使用 AND AND 运算符运算符运算符运算符SQL SELECT empno,ename,job,sal FROM emp WHERE sal=1100 AND job=CLERK;EMPNO ENAME JOB SAL-7876 ADAMS CLERK 1100 793
32、4 MILLER CLERK 1300SQL SELECT empno,ename,job,sal FROM emp WHERE sal=1100 OR job=CLERK;EMPNO ENAME JOB SAL-7839 KING PRESIDENT 5000 7698 BLAKE MANAGER 2850 7782 CLARK MANAGER 2450 7566 JONES MANAGER 2975 7654 MARTIN SALESMAN 1250.14 rows selected.使用使用使用使用 OR OR 运算符运算符运算符运算符SQL SELECT ename,job FROM
33、emp WHERE job NOT IN(CLERK,MANAGER,ANALYST);ENAME JOB-KING PRESIDENTMARTIN SALESMANALLEN SALESMANTURNER SALESMANWARD SALESMAN使用使用使用使用 NOT NOT 运算符运算符运算符运算符在优先顺序上,比较运算符最优先,逻辑运算符中在优先顺序上,比较运算符最优先,逻辑运算符中在优先顺序上,比较运算符最优先,逻辑运算符中在优先顺序上,比较运算符最优先,逻辑运算符中NOTNOT优先级第一,优先级第一,优先级第一,优先级第一,ANDAND其次,其次,其次,其次,OROR最不优先。最
34、不优先。最不优先。最不优先。ENAME JOB SAL-KING PRESIDENT 5000MARTIN SALESMAN 1250ALLEN SALESMAN 1600TURNER SALESMAN 1500WARD SALESMAN 1250SQL SELECT ename,job,sal FROM emp WHERE job=SALESMAN OR job=PRESIDENT AND sal1500;可以使用括号来定义优先顺序。可以使用括号来定义优先顺序。可以使用括号来定义优先顺序。可以使用括号来定义优先顺序。ENAME JOB SAL-KING PRESIDENT 5000ALLEN
35、 SALESMAN 1600SQL SELECT ename,job,sal FROM emp WHERE (job=SALESMAN OR job=PRESIDENT)AND sal1500;练习:练习:l如何对SQL Server2000的实例数据库Northwind实现以下查询:6:查询所有订单中已经交货的订单的详细信息 7:查询所有国家为“UK”的客户的详细信息Select from orders where shippeddate SELECT ename,job,deptno,hiredate FROM emp ORDER BY hiredate;ENAME JOB DEPTNO
36、HIREDATE-SMITH CLERK 20 17-DEC-80ALLEN SALESMAN 30 20-FEB-81.14 rows selected.按降序排列结果按降序排列结果按降序排列结果按降序排列结果SQL SELECT ename,job,deptno,hiredate FROM emp ORDER BY hiredate DESC;ENAME JOB DEPTNO HIREDATE-ADAMS CLERK 20 12-JAN-83SCOTT ANALYST 20 09-DEC-82MILLER CLERK 10 23-JAN-82JAMES CLERK 30 03-DEC-81
37、FORD ANALYST 20 03-DEC-81KING PRESIDENT 10 17-NOV-81MARTIN SALESMAN 30 28-SEP-81.14 rows selected.按结果列的别名排序按结果列的别名排序按结果列的别名排序按结果列的别名排序SQL SELECT empno,ename,sal*12 annsal FROM emp ORDER BY annsal;EMPNO ENAME ANNSAL-7369 SMITH 9600 7900 JAMES 11400 7876 ADAMS 13200 7654 MARTIN 15000 7521 WARD 15000 7
38、934 MILLER 15600 7844 TURNER 18000.14 rows selected.按多列排序按多列排序按多列排序按多列排序SQL SELECT ename,deptno,sal FROM emp ORDER BY deptno,sal DESC;ENAME DEPTNO SAL-KING 10 5000CLARK 10 2450MILLER 10 1300FORD 20 3000.14 rows selected.使用集函数使用集函数使用集函数使用集函数l集函数作用在一组元组上EMPEMP“maximum maximum salary in salary in the E
39、MP table”the EMP table”DEPTNO SAL-10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 MAX(SAL)-5000AVG AVG 和和和和 SUMSUM适用于数值型数据适用于数值型数据适用于数值型数据适用于数值型数据 AVG(SAL)MAX(SAL)MIN(SAL)SUM(SAL)-1400 1600 1250 5600SQL SELECTAVG(sal),MAX(sal),MIN(sal),SU
40、M(sal)FROMemp WHEREjob LIKE SALES%;MIN MIN 和和和和 MAX MAX 适用于不同类型的数据适用于不同类型的数据适用于不同类型的数据适用于不同类型的数据SQL SELECTMIN(hiredate),MAX(hiredate)FROMemp;MIN(HIRED MAX(HIRED-17-DEC-80 12-JAN-83 COUNT COUNT 函数用于计数函数用于计数函数用于计数函数用于计数 COUNT(*)-6SQL SELECTCOUNT(*)FROMemp WHEREdeptno=30;SQL SELECTCOUNT(comm)FROMemp WH
41、EREdeptno=30;COUNT(COMM)-4忽略NULL值创建数据分组创建数据分组创建数据分组创建数据分组 EMPEMP“EMPEMP表中表中表中表中每一部门每一部门每一部门每一部门的平均工的平均工的平均工的平均工资资资资”2916.66672916.6667 21752175 1566.66671566.6667 DEPTNO SAL-10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 DEPTNO AVG(SAL)-
42、10 2916.6667 20 2175 30 1566.6667GROUP BY GROUP BY 短语短语短语短语SELECT目标列表达式目标列表达式,集函数集函数(列名列名)FROM表名表名WHERE条件表达式条件表达式GROUP BY分组条件表达式分组条件表达式ORDER BY列名列名;GROUP BY 短句将元组的集合分成了小组。使用使用使用使用 GROUP BY GROUP BY 短语短语短语短语 lGROUP BY 后的列不一定在SELECT中输出,SQL SELECT AVG(sal)FROM emp GROUP BY deptno;AVG(SAL)-2916.6667 217
43、51566.6667使用使用 GROUP BY 短语短语lSELECT后的列除非使用了集函数,否则必须包括在GROUP BY短语中SQL SELECT deptno,AVG(sal)FROM emp GROUP BY deptno;DEPTNO AVG(SAL)-10 2916.6667 20 2175 30 1566.6667SQL SELECT deptno,job,sum(sal)FROM emp GROUP BY deptno,job;DEPTNO JOB SUM(SAL)-10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALY
44、ST 6000 20 CLERK 1900.9 rows selected.按多列分组按多列分组按多列分组按多列分组按多列分组按多列分组按多列分组按多列分组EMPEMP“EMPEMP表中表中表中表中不同部门不不同部门不不同部门不不同部门不同职位的工同职位的工同职位的工同职位的工资总和资总和资总和资总和”DEPTNO JOB SAL-10 MANAGER 2450 10 PRESIDENT 5000 10 CLERK 1300 20 CLERK 800 20 CLERK 1100 20 ANALYST 3000 20 ANALYST 3000 20 MANAGER 2975 30 SALESMA
45、N 1600 30 MANAGER 2850 30 SALESMAN 1250 30 CLERK 950 30 SALESMAN 1500 30 SALESMAN 1250JOB SUM(SAL)-CLERK 1300MANAGER 2450PRESIDENT 5000ANALYST 6000CLERK 1900MANAGER 2975CLERK 950MANAGER 2850SALESMAN 5600DEPTNO-101010202020303030对分组的结果进行筛选对分组的结果进行筛选对分组的结果进行筛选对分组的结果进行筛选“每一部门最每一部门最每一部门最每一部门最高工资大于高工资大于高
46、工资大于高工资大于$2900”$2900”EMPEMP500050003000300028502850 DEPTNO SAL-10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 DEPTNO MAX(SAL)-10 5000 20 3000HAVING HAVING 短语短语短语短语l使用 HAVING 短语对分组结果进行筛选lHAVING短语专门作用于分组,选择满足条件的分组lWHERE短语作用于整个基本表,选择满足条件的元组
47、,不能用于选择分组。SELECT目标列表达式目标列表达式,集函数集函数FROM表名表名WHERE条件表达式条件表达式GROUP BY分组条件表达式分组条件表达式HAVING条件表达式条件表达式ORDER BY列名列名;使用使用使用使用HAVING HAVING 短语短语短语短语SQL SELECT deptno,max(sal)FROM emp GROUP BY deptno HAVING max(sal)2900;DEPTNO MAX(SAL)-10 5000 20 3000使用使用使用使用HAVING HAVING 短语短语短语短语SQL SELECT job,SUM(sal)PAYROL
48、L FROM emp WHERE job NOT LIKE SALES%GROUP BY job HAVING SUM(sal)5000 ORDER BY SUM(sal);JOB PAYROLL-ANALYST 6000MANAGER 8275嵌套的集函数嵌套的集函数嵌套的集函数嵌套的集函数SQL SELECT max(avg(sal)2 FROM emp 3 GROUP BY deptno;MAX(AVG(SAL)-2916.6667练习:练习:12:查询客户名以A开头的客户在1996年发出的所有订单,按订单号排序输出13:查询每个供应商供应的所有产品的平均价格Select*from or
49、ders where customerid like A%and year(orderdate)=1996 order by orderidSelect supplierid,avg(unitprice)from productsgroup by supllierid 练习:l基于教材59页的关系表创建查询:l查询学生总人数l查询已经选课的学生人数l计算1号课程的学生平均成绩l计算选修1号课程的学生的最高分数l查询每门课程的选课人数l查询选修了3门以上课程的学生学号 EMPNO DEPTNO LOC-7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YO
50、RK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO.14 rows selected.EMP EMP DEPT DEPT EMPNO ENAME.DEPTNO-.-7839 KING.10 7698 BLAKE.30 .7934 MILLER.10DEPTNO DNAME LOC -10 ACCOUNTING NEW YORK 20 RESEARCHDALLAS 30 SALESCHICAGO 40 OPERATIONS BOSTON2.2.连接查询连接查询(涉及多个表的查询涉及多个表的查询)用用用用SELECTSELECT语句实现连接操作语句实