1、完整版ACCESS数据库中常见的SQL语句汇总教程ACCES数据库的SQL语句教学1查询所有记录:Select *通常用于快速查看表中的记录。当对表的结构无法确切记忆时,或要快速查看表中的记录时,使用 Select *是很方便的。use企业销售管理系统Select * from 职工2、投影查询:很多时候并不需要将所有列的数据都显示出来。投影查询就是允许用户显示所需要的列。假设显示职工表中职工号、姓名、工资信息,具体操作方法如下。Select职工号,姓名,工资from 职工在Select查询中,还可以按照实际的需要或自己的喜好安排显示列的顺序,如果要把姓名放到第一列,则代码如下:3、条件查询:
2、显示wh1或wh2仓库、性别不为女、工资在13002100之间的职工信息。具体操作如下:Select * from职工号 where(仓库号=wh1 or 仓库号=wh2)And not 性别=女and 工资 =1300 and 工资 =1300 And 工资 (select 面积 from 仓库 where 仓库号=wh1)嵌套查询中也可以带有逻辑运算符、谓词 In、Like、BetweenAnd结构。假设显示wh1或 wh2仓库的工资不大于职工zg16工资的职工信息,并要求职工姓名不含有“平”字。首先利用Select语句求出职工zg16的工资,然后再对姓名进行模糊查询。Select * f
3、rom 职工 where 工资 v=(select 工资 from 职工 where 职工号-zg16) and姓名 not like % 平% and 仓库号 in(wh1, wh2)10、多表嵌套查询:多表嵌套查询就是外层Select语句与内层Select语句来源于不同的表,但表之间要存在关系。这也是 SQL语句中最重要的查询。下面以显示北京地区的职工信息为例来讲解一下。首先利用Select语句求出北京地区的仓库号,然后利用仓库号再显示职工信息。use企业销售管理系统Select * from 职工 where 仓库号 in (select 仓库号 from where 城市-北京)不仅可
4、以实现两个表的嵌套,还可以实现多个表的嵌套,假设显示北京地区的职工的订购 单信息。首先利用Select语句得到北京地区的仓库号,然后利用得到的仓库号得到该仓库中的职工 号,再利用得到的职工号得到职工的订购单信息。Select * from 订购单where职工号in(Select 职工号from 职工where仓库号in(select 仓库号from 仓库where 城市-北京)多表嵌套查询中也可以带有逻辑运算符、谓词 In、Like、Between And结构。假设显示北京地区的职工的订购单信息,并且职工的工资大于 1200,订购日期为2003年9月3日2006年1月1日。Select *
5、from 订购单 where 职工号 in(Select 职工号 from 职工 where 工资 1200 and仓库号in (select 仓库号from 仓库where 城市-北京)and 订购日期between 200 3-09-03 and 2006-01-0111、单级排序查询:排序的关键字是Order by ,默认状态下是升序,关键字是 Asc。降序排列的关键字是Desc。排序字段可以是数值型,也可以是字符型、日期时间型。下面以按工资 从高到低显示职工信息为例来讲解一下。Select * from 职工 Order by 工资 desc在排序查询中还可以带有逻辑运算符、谓词 In
6、、Like、Between And结构。假设显示 wh1或wh2仓库的,工资不大于职工zg16工资的职工信息,并要求职工姓名不含有“平”字,按工 资从低到咼显示。首先利用Select语句求出职工zg16的工资,然后再对姓名进行模糊查询,最后再排序。Select * from 职工 where 工资 v=(Select 工资 from 职工 where 职工号=zg16) and工资姓名 not like % 平% and 仓库号 in (wh1,wh2) order by12、多级排序查询:按照一列进行排序后,如果该列有重复的记录值,则重复记录值这部分就没有进行有效的排序,这就需要再附加一个字
7、段,作为第二次排序的标准,对没有排开的 记录进行再排列。下面以按工资从高到低显示职工信息为例来讲解一下。单级排序,按工资降 序。Select * from 职工 Order by 工资 desc多级排序,先按工资降序,再按职工ID升序。Select * from 职工 Order by 工资 desc,职工 ID asc13 、与别名一起使用的统计函数:在实际编程中,有时候需要知道所有记录某项值的总 和、平均值、最大值等,这时就要用到统计函数查询。常用的统计函数共有 6个。统计函数及其意义统计函数COUNT(*)统计选择的记录的个数COUNT)统计特定列中值的个数SUMO计算总和(必须是数值型
8、字段)AVG()计算平均值(必须是数值型字段)MAXO确定最大值NIN()确定最小值在使用统计函数时,还要注意 COUNT0 SUM() AVG()可以使用DISTINCT关键字,以在计算机中不包含重复的行。而对于 MAX()、MINO、COUNT(*,由于不会改变其结果,因此没有必要使用DISTINCT利用Select语句显示统计值是没有列名的,下面以显示职工的最大值、最小值、工资总和、平均工资、职工人数为例来讲解一下。Select max(工资),min(工资),SUM(工资),avg(工资),count(*) from职工这时会发现统计值没有列名,现在来给统计字段添加列名。Select
9、max(工资)as最大工资,min(工资)as最小工资,SUM(工资)as工资总和,avg(工资)as平均工资,count(*) as 职工人数from职工在统计函数中还可以加条件,假设显示工资大于1500的职工的最大值、最小值、工资总和、平均工资、职工人数信息。Select max(工资)as最大工资,min(工资)as最小工资,SUM(工资)as工资总和,avg(工资)as平均工资,count(*) as 职工人数from 职工where工资150014、带有统计函数的嵌套查询:还可以利用统计函数得到的数据作为 Select查询语句的条件进行查询。下面以显示工资大于所有职工平均值的职工信息
10、为例来讲解一下。Select * from 职工 where 工资 (select avg( 工资)from 职工)在统计函数查询中可以带有比较运算符、逻辑运算符、 In、BetweenAnd等。假设显示工资大于wh1或wh2仓库中职工平均工资,并且职工姓名不含有“亮”字的职工信息。Select * from 职工 where 工资 (select avg( 工资)from 职工 where 仓库号=wh1 o r 仓库号=wh2) and 姓名 not like % 亮%15、统计函数字段显示在表字段中及运算字段: 如果在职工表中添加一个职工平均工资值 字段,这就对实际编程有很大的意义,即可
11、以利用平均字段进行运算,大大提高编程速度。下 面以在职工表中添加平均工资为例为讲解一下。Select职工.*,(select avg( 工资)from 职工)as 平均工资from 职工在职工表中添加了一个平均工资字段, 即在Select查询字段中添加了一个Select子查询。在Select查询中,还可以计算出每名职工的工资与所有职工平均工资之差, 具体操作如下:Select 职工.*,(select avg( 工资)from 职工)as 平均工资,工资一(select avg( 工资)from职工)as 平均工资的差from职工16、分组查询:使用GROUPBY组查询,要注意分组的标准一定要
12、有意义,如显示不同仓库的平均工资,显示不同职工的最大订单金额等。如果显示不同职工的平均工资那就没有意义 了。下面显示不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息为例来讲解 一下。Select仓库号,max(工资)as最大工资,min (工资)as最小工资,sum (工资)as工 资总和,avg (工资)as平均工资,count ( *)as职工人数from 职工group by 仓库号在分组查询中还可以带有逻辑运算符、谓词 In、Like、BetweenAnd结构。假设显示工资大于zg1职工工资的不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息。首先利用Select
13、语句求出职工zg1的工资,然后再分组显示统计信息。Select仓库号,max (工资)as最大工资,min (工资)as最小工资,sum (工资)as 工 资总和,avg (工资)as平均工资,count ( *)as职工人数from 职工where工资(Select 工资from 职工 where 职工号-zg1) group by 仓库号17、带有Having的分组查询:分组以前的条件,要用 Where关键字,而分组之后的条件则要使用Having关键字。下面以显示不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息,但要求该仓库平均工资大于 1760为例来讲解一下。Select仓库
14、号,max(工资)as最大工资,min (工资)as最小工资,sum (工资)as工 资总和,avg (工资)as平均工资,count ( *)as职工人数from 职工group by 仓库号having avg(工资)1760在分组查询的Having条件中还可以带有逻辑运算符、谓词In、Like、BetweenAnd结构。假设显示不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息,但要求该仓库 的平均工资大于1760,最大工资与最小工资之差在 380800之间。Select仓库号,max (工资)as最大工资,min (工资)as最小工资,sum (工资)as 工 资总和,avg
15、 (工资)as平均工资,count (*) as职工人数from 职工group by 仓库号having avg(工资)1760 and max(工资)min(工资)between 380 and 80018、带有分组的嵌套查询:还可以利用分组得到的数据作为 Select查询语句的条件进行查询。下面以显示职工所在仓库的最大工资与最小工资之差在 380800之间的职工所在仓库信息为例为讲解一下。先求出职工所在仓库的最大工资与最小工资之差在 380800之间的职工所在的仓库号,再利用这个仓库号显示仓库信息。Select * from 仓库,where 仓库号 in(Select 仓库号 from
16、 职工 group by 仓库号 hav ing d max(工资)min(工资)between 380 and 80019、内外层嵌套实现分组功能:利用group by分组显示统计字段信息,有很多字段不能显示。如显示不同仓库的平均工资信息,在这个查询中只能显示仓库号,不能显示职工号及职工 的工资。因为不同仓库的平均工资,有几个仓库就显示几条平均工资,而每个仓库中的职工则 有很多。F面以显示不同职工经手订购单金额最大的订单信息为例来讲解一下。在这里应该边求出每名职工订购单金额的最大值,边显示该职工所对应的这条订购单信息。具体代码如下:Select a.* from 订购单 a where 金额
17、=(select max( 金额)from 订购单 where 职工 号=a.职工号)注意:上面语句中的订购单a是给这个订购单起的一个别名,大家可以把它看成就其实就是订购单的一张复制的表,在这里运用它只是为了使内外层的嵌套更清晰、更容易理解。20、分组查询字段显示在表字段中及运算字段:如果在职工表中添加职工所在仓库的平均工资值字段,这就对实际编程有很大的意义,即可以利用平均字段进行运算,大大提高编程速 度。下面以在职工表中添加职工所在的仓库的平均工资字段为例来讲解一下。Select a.* ,(Select avg( 工资)from 职工where仓库号=a.仓库号)as 所在仓库的平 均工资
18、from 职工 a在Select查询中,还可以计算出每名职工的工资与职工所在仓库的平均工资之差,具体操作如下:Select a.* ,(Select avg(均工资,工资-(Select avg(工资)from 职工where仓库号=a.仓库号)as所在仓库的平工资)from 职工where仓库号=a.仓库号)as所在仓库的平均工资之差from 职工a子查询中有一行能使结果为真,结果就为真。而 All则要求子查询中所有行都使结果为真时,结果才为真。下面以显示那些仓库中还没有职工的仓库信息为例,讲解一下 In谓词与Exists谓词在代码上的不同。用Exists谓词实现:用In谓词实现:Selec
19、t * from 仓库 where 仓库号 notin (Select 仓库号 from 职工)22、Any量词查询:Any量词查询,在进行比较运算时,只要子查询中有一行能使结果为真,则结果即为真。下面就以显示工资大于等于 wh2仓库中任一名职工工资的职工信息为例,讲解一下Any量词的应用。用Any量词实现:Select * from 职工 where 工资 =any(Select 工资 from 职工 where 仓库号=wh2)使用统计函数实现:Select * from 职工 where 工资 =(Select min(工资)from 职工 where 仓库号=wh2)23、All量词查
20、询:All量词查询,要求子查询中所有行都使结果为真时,结果才为真。下面就以显示工资大于等于 wh1仓库中所有职工工资的职工信息为例, 讲解一下All量词的应用。用Any量词实现:Select * from 职工 where 工资 =AII(Select 工资 from 职工 where 仓库号=wh1)使用统计函数实现:Select * from 职工 where 工资 =(Select MAX(工资)from 职工 where 仓库号=wh1)前面讲解的量词查询都可以用统计函数代替,但有些查询是不能用统计函数代替的。下面 以显示工资大于所有不同仓库的平均工资的职工信息为例为讲解一下。Sele
21、ct * from 职工 where 工资 all(Select avg( 工资)from 职工 group by 仓库号)该题用统计函数就无法解决。24、显示部分记录的Top查询:在编程中,有时只需显示满足条件的前几条记录,这时就可以使用Top关键字。可以直接使用Top数字,显示指定条数记录;也可以使用 Top数字Perc ent,显示所有满足条件记录的前百分之几条记录。F面以显示工资最高的前三条职工信息为例来讲解一下。Select top3 * from 职工 order by 工资 desc25、保存查询:利用Into语句可以把查询的结果保存成一张新表。下面就以备份“职工”表为例讲解一下
22、保存查询。Use企业销售管理系统Select * into 职工备份from 职工这样就生成一张新表,表名为“职工备份”。26、集合的并运算:SQL支持集合的并运算(Un ion),即可以将两个Selec语句的查询结果通过并运算合并成一个查询结果。为了进行并运算,要求这样的两个查询结果具有相同的字 段个数,并且对应的字段的值要出自同一个值域,即具有相同的数据类型和取值范围。Select * from 仓库where城市-北京UnionSelect * from 仓库where 城市-上海27、集合的交运算:SQL支持集合的交运算(In tersect ),即可以将两个Selec语句的查 询结果
23、通过交运算合并成一个查询结果。为了进行交运算,要求这样的两个查询结果具有相同 的字段个数,并且对应的字段的值要出自同一个值域,即具有相同的数据类型和取值范围。Select仓库号from 仓库In tersectSelect仓库号from 职工注意它们对集合的差运算不支持。28、多表连接查询:多表连接查询就是将多个表中的数据结合到一起的查询,即连接操作可以在一个Select语句中完成从我个表中查找和处理数据。 使用连接的列必须是可连接的,即 它们具有相同的数据类型、相同的意义。使用连接的列,列名可以相同,也可以不同。29、笛卡儿积:有的时候,如果连接条件没有设置好,或者没有设置连接条件,则结果将
24、包含太多的行,这就是由笛卡儿积造成的。从原理上来讲,连接首先将形成表的笛卡儿积,即 形成用于连接的表中所有的行的组合。下面以仓库表与职工表连接为例为讲解一下。Select * from 职工,仓库这是从两张表中显示所有字段,所以字段有重复,并且产生了 90条记录,原因是仓库表中有5条记录,职工表有18条记录,所以连接的结果是18X 5=9条记录。用于连接的表越多,则笛卡儿积的结果将越大。30、多表连接:在进行多表连接时,一定要注意连接条件,下面以仓库表与职工表连接为例来讲解一下多表连接。Select * from 职工,仓库where职工.仓库号二仓库.仓库号这时显示的记录就没有那么多了,只显
25、示18条记录,并且发现两张表的仓库号是相对应的。假设显示工资大于1500,面积大于600的城市与姓名信息。Select城市,姓名* from 职工,仓库where职工.仓库号二仓库.仓库号and工资1500and 面积 60031、超连接查询:超连接查询也是连接查询,所以必须有两张或两张以上的表。超连接查询共有4种:内连接查询、左连接查询、右连接查询、全连接查询。使用超连接查询不仅可以把满足条件的记录显示出来,还可以把一部分不满足条件的记录以 NULL显示出来。1)内连接查询:只有满足连接条件的记录才出现在查询结果集中。下面以显示面积大于 6 00的仓库号、职工号、城市、面积、工资信息为例为讲解一下内连接:超连接:Select仓库.仓库号,职工号,城市,面积,工资from 仓库inner join 职工on职工.仓 库号=仓库.仓库号and面积600普通连接:Select仓库.仓库号,职工号,城市,面积,工资from 职工,仓库where职工.仓库号二仓库.仓库号and面积6002)左连接查询:除满足连接条件的记录显示外,第一张表中不满足条件的记录也出现在查询结果集中。下面以显示面积大于 600的仓库号、职工号、城市、面积、工资信息为例为讲解一下左连接。Select仓库.仓库号,职工号,城市,面积,工资from
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1