《AccessSQL语句》由会员分享,可在线阅读,更多相关《AccessSQL语句(11页珍藏版)》请在金锄头文库上搜索。
1、1、查询所有记录:S elect *通常用于快速查看表中的记录。当对表的结构无法确切记忆时,或要快速查看表中的记录时,使用Select *是很方便的。use 企业销售管理系统Select * from 职工2、投影查询:很多时候并不需要将所有列的数据都显示出来。投影查询就是允许用户显示所需要的列。假设显示职工表中职工号、姓名、工资信息,具体操作方法如下。Select 职工号,姓名,工资 from 职工在 Select 查询中,还可以按照实际的需要或自己的喜好安排显示列的顺序,如果要把姓名放到第一列,则代码如下:Select 姓名, 职工号,工资 f rom 职工3、条件查询:显示 wh1或 w
2、h2 仓库、性别不为女、工资在 13002100之间的职工信息。具体操作如下:Select * from 职工号 wh ere(仓库号=wh1 or 仓库号=wh2)And not 性别=女 and 工资=1300 and 工资工资=1300 And 工资=19 008、消除重复字段数据 Distinct 查询:在 SQL 投影查询中,可能会有许多重复的数据,使用关键字 Distinct就可以从结果集中除去重复的数据。下面以显示职工的工资信息为例具体讲解一下:显示有重复的数据Select 工资 from 职工显示无重复的数据Select Distinct 工资 from职工9、单表嵌套查询:就
3、是外层 Select 语句与内层 Select 语句都来源于同一张表。下面以显示仓库面积大于 wh1 仓库面积的仓库信息为例 来讲解一下。首先利用 Select 语句求出 wh1 仓库的仓库面积,然后再显示面积大于该值的仓库信息。Select * from 仓库 where 面积 (select 面积 from 仓库 w here 仓库号=wh1)嵌套查询中也可以带有逻辑运算符、谓词 In、Like、BetweenAnd 结构。假设显示wh1 或 wh2 仓库的工资不大于职工 zg16 工资的职 工信息,并要求职工姓名不含有“平”字。首先利用 Select语句求出职工 zg16的工资,然后再对
4、姓名进行模糊查询。Select * from 职工 w here 工资 1200 and仓库号 in(select 仓库号 f rom 仓库 where 城市=北京)and 订购日期 betwe en 2003-09-03 and 2006-01-0111、单级排序查询:排序的关键字是 Order by,默认状态下是升序,关键字是Asc。降序排列的关键字是 Desc。排序字段可以是数值型,也可以是字符型、日期时间型。下面以按工资从高到低显示职工信息为例来讲解一下。Select * from 职工 Order by 工资 desc在排序查询中还可以带有逻辑运算符、谓词 In、Like、Betwe
5、en、And 结构。假设显示wh1 或 wh2 仓库的,工资不大于职工 zg16 工资的 职工信息,并要求职工姓名不含有“平”字,按工资从低 到高显示。首先利用Select 语句求出职工 zg16 的工资,然后再对姓名进行模糊查询,最后再排序。Select * from 职工 where 工资 150014、带有统计函数的嵌套查询:还可以利用统计函数得到的数据作为 Select 查询语句的条件进行查询。下面以显示工资大于所有职工平均值的职工信息为例来讲解一下。Select * from 职工 where 工资 (select avg(工资) from 职工)在统计函数查询中可以带有比较运算符、
6、逻辑运算符、In、BetweenAnd 等。假设显示工资大于 wh1 或 wh2仓库中职工平均工资,并且职工姓名不含有“亮” 字的职工信息。Select * from 职工 where 工资(select avg(工资) from 职工 where 仓库号=wh1 or仓库号=wh2) and 姓名 not like %亮%15、统计函数字段显示在表字段中及运算字段:如果在职工表中添加一个职工平均工资值字段,这就对实际编程有很大的意义,即可以利用平均字段进行运算,大大提高编程速度。下面以在职工表中添加平均工资为例为讲解一下。Select 职工.*,(selec t avg(工资 ) from
7、职工) as 平均工资 from 职工在职工表中添加了一个平均工资字段,即在 SELECT查询字段中添加了一个SELECT 子查询。在 SELECT 查询中,还可以计算出每名职工的工资与所有职工平均工资之差,具体操作如下:Select 职工.*,(select avg(工 资) from 职工) as 平均工资,工资(s elect avg(工资) from 职工) as 平均工资 的差 fr om 职工16、分组查询:使用 GROUPBY 分组查询,要注意分组的标准一定要有意义,如显示不同仓库的平均工资,显示不同职工的最大订单金额等。如果显示不同职工的平均工资那就没有意义了。下面显示不同仓库
8、的平均工资、工资和、最大工资、最小工资、工资人数信息为例来讲解一下。Select 仓库号,max (工资) as 最大工资, min(工资) as 最小工资, s um(工资)as 工资总和, avg (工资)as 平均工资, coun t(*)as 职工人数 from 职工 group by 仓库号在分组查询中还可以带有逻辑运算符、谓词 In、Like、BetweenAnd 结构。假设显示工资大于 zg1职工工资的 不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息。首先利用 SELECT 语句求出职工 zg1 的工资,然后再分组显示统计信息。Select 仓库号,max (工资)
9、 as 最大工资, min(工资) as 最小工资, sum(工资)as 工资总和, avg (工资)a s 平均工资, co unt(*)as 职工人数 from 职工 where 工资( Select 工资 from 职工where 职工号= zg1) group by 仓库号17、带有 Having 的分组查询:分组 以前的条件,要用 Where 关键字,而分组之后的条件则要使用 Having关键字。下 面以显示不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息,但要求该仓库平均工资大于 1760 为例来讲解一下。Select 仓库号,max (工资) as 最大工资, min
10、(工资) as 最小工资, su m(工资)as 工资总和, avg (工资)as 平均工资, count (*)as 职工人数 from 职工 group by 仓库号having avg(工资)1760在分组查询的 Having 条件中 还可以带有逻辑运算符、谓词In、Like、BetweenAnd 结构。假设显示不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息,但要求该仓库的平均工资大于 1760,最大工资与最小工资之差在380800 之间。Select 仓库号,max (工资) as 最大工资, min(工资) as 最小工资, s um(工资)as 工资总和, avg (
11、工资)as 平均工资, coun t(*)as 职工人数 from 职工 group by 仓库号 having avg(工资) 1760 and max(工资)min(工资) between 380 and 80018、带有分组的嵌套查询:还可以利用分组得到的数据作为 SELECT查询语句的条件进行查询。下面以显示职工所在仓库的最大工资与最小工资之差在 380800 之间的职工所在仓库信息为例为讲解一下。先求出职工所在仓库的最大工资与最小工资之差在380800 之间的职工所在的仓库号,再利用这个仓库号显示仓库信息。Select * from 仓库,where 仓库 号 in( Select
12、仓库号 from职工 group by 仓库号 having d max(工资) min(工资) between 380 and 80019、内外层嵌套实现分组功能:利用 group by分组显示统计字段信息,有很多字段不能显示。如显示不同仓库的平均工资信息,在这个查询中只能显示仓库号,不能显示职工号及职工的工资。因为不同仓库的平均工资,有几个仓库就显示几条平均工资,而每个仓库中的职工则有很多。下面以显示不同职工经手订购单金额最大的订单信息为例来讲解一下。在这里应该边求出每名职工订购单金额的最大值,边显示该职工所对应的这条订购单信息。具体代码如下:Select a.* from 订购单 a w
13、here 金额=( select max(金额 ) from 订购单 where 职工号=a.职工号)注意:上面语句中的订购单 a 是给这个订购单起的一个别名,大家可以把它看成就其实就是订购单的一张复制的表,在这里运用它只是为了使内外层的嵌套更清晰、更容易理解。20、分组查询字段显示在表字段中及运算字段:如果在职工表中添加职工所在仓库的平均工资值字段,这就对实际编程有很大的意义,即可以利用平均字段进行运算,大大提高编程速度。下面以在职工表中添加职工所在的仓库的平均工资字段为例来讲解一下。Select a.* ,(Select avg(工资) from 职工 where 仓库号 =a.仓库号)
14、as 所在仓库的平均工资 from 职工 a在 Select查询中,还可以计算出每名职工的工资与职工所在仓库的平均工资之差,具体操作如下:Select a.* ,(Select avg(工资) from 职工 wher e 仓库号 =a.仓库号) as 所在仓库的平均工资,工资-(Selec t avg(工资) from 职工 where 仓库号=a. 仓库号) as 所在仓库的平均工资之差 from 职工 a21、Exists 谓词查询:其实 In 就是谓词查询,还有谓词 Exists 与 Exists,这两个谓词实现的功能是相同的,只是写法不同。In 多用于嵌套子查询语句中,而 Exist
15、s多用于判断 Select 语句是否返回查询结果。常用量词有 Any、All 和 Some 是同义词。在进行比较运算时,只要子查询中有一行能使结果为真,结果就为真。而 All则要求子查询中所有行都使结果为真时,结果才为真。下面以显示那些仓库中还没有职工的仓库信息为例,讲解一下 In 谓词与 Exists 谓词在代码上的不同。用Exists 谓词实现:Select * from 仓库 w here not Exists(Select * from 职工 where 仓库号= 仓库.仓库号)用In 谓词实 现:Select * from 仓库 where 仓库号 not in(Select 仓库号
16、from 职工)22、Any量词查询:Any 量词查询,在进行比较运算时,只要子查询中有一行能使结果为真,则结果即为真。下面就以显示工资大于等于 wh2仓库中任一名职工工资的职工信息为例,讲解一下 Any量词的应用。用 Any 量词实现:Select * from 职工 w here 工资 =any(Select 工资 from 职工 where仓库号= wh2)使用统计函数实现:Select * from 职工 wh ere 工 资=(S elect min(工资)from 职工 where仓库号=wh2)23、All 量词查询:All 量词查询,要求子查询中所有行都使结果为真时,结果才为真。下面就以显示工资大于等于 wh1 仓库中所有职 工工资的职工信息为例,讲解一下All 量词的应用。用 Any 量词实现:Select * from 职工 where 工资 =All(Select 工资 fr