第四章关系数据库标准语言SQL主讲人:目录上一页下一页退出本节导学回顾前面所学内容:数据库相关操作本节任务SQL概述查询功能:简单查询,简单联接查询,嵌套查询计算查询,空值查询,别名与自联接查询,超链接查询,特殊选项等本节小结作业实践目录上一页下一页退出SQL概述SQL是结构化查询语言StructuredQueryLanguage的缩写,是一种高度非过程化的语言。SQL功能包括数据定义、数据查询、数据操作、数据控制,可以完成数据库活动中的全部工作,已成为关系数据库的标准语言。SQL语句语言精练,其数据查询、数据定义、数据操作、数据控制等命令只用了9个动词,它们是:数据定义:CREATE,DROP,ALTER数据查询:SELECT数据操作:INSERT,UPDATE,DELETE数据控制:GRANT,REVOKE目录上一页下一页退出查询功能数据查询是数据库的重要操作,SQL语言提供了SELECT语句用于数据库的查询,该语句具有灵活的使用方法和丰富的功能。命令格式:SELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]…FROM表名或视图名[,表名或视图名]…[WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[ASC|DESC]];目录上一页下一页退出SELECT命令说明:SELECT:说明要查询的数据(执行查询操作);目标列表达式:指查询结果表中包含的列名;DISTINCT:说明要去掉重复的记录;FROM:说明要查询的数据来自哪些表,可以对一个或多个基本表或视图进行查询。WHERE:说明查询的条件,即选择元组(记录)的条件;GROUPBY:用于对查询结果进行分组,可以利用它进行分组汇总;HAVING:必须跟随GROUPBY使用,用来限定分组必须满足的条件;ORDERBY:用来对查询结果进行排序;注意:WHERE短语和HAVING短语区别。WHERE短语的作用对象是基本表等数据源,而HAVING短语的作用对象是组;各个短语之间的位置不能随意更改。目录上一页下一页退出有四个表:职工表,仓库表,订购单表,供应商表仓库表:职工表:仓库号城市面积仓库号职工号工资WH1北京370WH2E11220WH2上海500WH1E31210WH3广州200WH2E41250WH4武汉400WH3E61230WH1E71250目录上一页下一页退出订购单表:职工号供应商号订购单号订购日期E3S7OR672001/06/23E1S4OR732001/07/28E7S4OR762001/05/25E6NULLOR77NULLE3S4OR792001/06/13E1NULLOR80NULLE3NULLOR90NULLE3S3OR912001/07/13供应商表:供应商号供应商名地址S3振华电子厂西安S4华通电子公司北京S6607场郑州S7爱华电子北京目录上一页下一页退出SELECT-SQL查询示例1、简单查询:查询基于一个关系例1.查询供应商表中地址在北京且供应商号为S7的供应商名。SELECT供应商名FROM供应商表WHERE地址=“北京”AND供应商号=“S7”例2.查询仓库表中面积大于350的仓库信息。SELECT*FROM仓库WHERE面积350目录上一页下一页退出例3.查询职工表中工资大于1200的职工,显示时无重复仓库号的职工的信息。SELECTdist仓库号FROM职工WHERE工资1200例4.查询职工表中在仓库“wh1”或“wh2”工作,并且工资少于1250元的职工号SELECT职工号FROM职工;WHERE工资1250and(仓库号=“wh1”or;仓库号=“wh2”)目录上一页下一页退出小结:前面几个例子在From之后只指定了一个关系(表),即单表查询。如何查询?如有where子句,首先根据条件依次检索表中的每一条记录,如果没有,不进行此检索,然后选出满足条件的元组(选择运算),并显示Select子句中指定属性的值(投影运算)。目录上一页下一页退出2、简单联接查询:基于多个关系的查询例1.找出工资多于1230元的职工号和他们所在的城市。SELECT职工号,城市FROM职工,仓库;WHERE工资1230and(职工.仓库号=仓库.仓库号)结果是:E4上海E7北京注:当From之后的多个关系中含有相同属性名时,必须用关系前缀直接指明属性所属的关系,如职工.仓库号,“.”前面是关系名,后面是属性名。联接条件目录上一页下一页退出练习:要求:检索出向供应商s3发过订购单的职工号和仓库号。答案:sele职工.职工号,仓库号from职工,订购单where订购单.供应商号=s3and订购单.职工号=职工.职工号目录上一页下一页退出例1:哪些城市至少有一个仓库的职工工资为1250元?select城市from仓库where仓库号in;(select仓库号from职工where工资=1250)结果是:北京上海例2:查询所有职工的工资都多于是1210元的仓库的信息?select*from仓库where仓库号notin;(select仓库号from职工where工资=1210)结果是:wh2上海500wh3广东200wh4武汉400In:相当于集合运算符∈3.嵌套查询:结果出自一个关系,相关条件涉及多个关系错误:此仓库里没有职工目录上一页下一页退出例2改正:去掉没有职工的记录,必须再加限制条件。正确答案如下:select*from仓库where仓库号notin;(select仓库号from职工where工资=1210);and仓库号in(select仓库号from职工)练习:找出和职工E4挣同样工资的所有职工。select职工号from职工where工资=;(select工资from职工where职工号=“E4”)目录上一页下一页退出4.几个特殊运算符◎BETWEEN………AND………意思:在“……和……之间”例:检索出工资在1220元到1240元范围内的职工信息。SELE*FROM职工WHERE工资;BETWEEN1220AND1240结果:WH2E11220WH3E61230等价于:工资=1220AND工资=1240目录上一页下一页退出◎运算符LIKE:字符串匹配运算符。例:从供应商关系中检索出全部公司的信息,不要工厂或其他供应商的信息。SELE*FROM供应商WHERE供应商名LIKE“%公司”结果:S4华通公司北京◎思考:此题还可以怎么解?◎“不等于”:!=◎否定运算符:NOT“%”表示若干任意字符,用于查询字段值“*”用于查询字段名例:找出不在北京的全部供应商信息。SELE*FROM供应商WHERE地址!=‘北京’目录上一页下一页退出5.排序:将查询结果排序。◎短语格式:ORDERBY字段名1[ASC|DESC];[,字段名2[ASC|DESC]…]注解:可以按升序(ASC)或降序(DESC)排列,允许按一列或多列排序。◎例1按职工的工资值升序检索出全部职工信息。select*from职工orderby工资降序:select*from职工orderby工资desc目录上一页下一页退出例2先按仓库号排序,再按工资排序并输出全部职工信息。select*from职工orderby仓库号,工资注意:orderby是对最终的查询结果进行排序,不可以在子查询中使用该短语。目录上一页下一页退出6.简单计算查询常用计算检索的函数COUNT:统计表中满足条件的记录个数SUM:对表中选中记录的全部或指定的数值字段或由指定字段组成的数值表达式累加求和。AVG:对表中选中记录的全部或部分数值型字段及其组成的表达式求平均值并显示。MAX:对表中选中记录的全部或部分字段及其组成的表达式求最大值并显示。MIN:对表中选中记录的全部或部分字段及其组成的表达式求最小值并显示。注:以上函数用在SELECT短语中对查询结果进行计算目录上一页下一页退出实例讲解:例1:求支付的工资总数selectsum(工资)from职工例2:求所有职工的工资都多于1210元的仓库的平均面积。selectavg(面积)from仓库where仓库号notin;(select仓库号from职工where工资=1210);and仓库号in(select仓库号from职工)例3:找出供应商所在地的数目selectcount(distinct地址)from供应商例4:求在WH2仓库工作的职工的最高工资值selectMAX(工资)from职工where仓库号=“WH2”