(完整版)ACCESS数据库中常见的SQL语句汇总教程ACCESS数据库的SQL语句教学
1、查询所有记录:Select *通常⽤于快速查看表中的记录。当对表的结构⽆法确切记忆时,或要快速查看表中的记录时,使⽤Select *是很⽅便的。
use 企业销售管理系统
Select * from 职⼯
2、投影查询:很多时候并不需要将所有列的数据都显⽰出来。投影查询就是允许⽤户显⽰所需要的列。假设显⽰职⼯表中职⼯号、姓名、⼯资信息,具体操作⽅法如下。
Select 职⼯号,姓名,⼯资 from 职⼯
在Select查询中,还可以按照实际的需要或⾃⼰的喜好安排显⽰列的顺序,如果要把姓名放到第⼀列,则代码如下:
Select 姓名, 职⼯号,⼯资 from 职⼯
3、条件查询:显⽰wh1或wh2仓库、性别不为⼥、⼯资在1300~2100之间的职⼯信息。具体操作如下:
Select * from 职⼯号 where(仓库号='wh1' or 仓库号='wh2')
And not 性别='⼥' and ⼯资>=1300 and ⼯资<=2100
在这⾥⼀定要注意,(仓库号='wh1' or仓库号='wh2')⼀定要加括号,否则就不是原题的意思。
4、谓词In查询:在查特定条件的数据时,如果条件较多,就需要⽤到多个Or运算符,以查满⾜其中任⼀条的记录。但使⽤多个Or运算符,将使Where⼦句变得过于冗长,这时使⽤In就⾮常清楚。另外,在后⾯讲解的嵌套查询中,也必须使⽤In查询。下⾯以显⽰zg1、zg2、zg11、zg15的订购单信息为例具体讲解⼀下。
使⽤Or运算符
Select * from 订购单 where 职⼯号='zg1' or 职⼯号='zg2'
Or 职⼯号='zg11' or 职⼯号='zg15'
使⽤谓词In
Use 企业销售管理系统
Select * from 订购单 where 职⼯号 in('zg1', 'zg2', 'zg11', 'zg15')
在Select语句中,还⽀持In与Not结合使⽤。假设显⽰职⼯号不为zg1, zg2, zg11, zg15的订购单信息,具体代码如下:
使⽤Or运算符
Select * from 订购单 where 职⼯号!='zg1' or 职⼯号!='zg2'
Or 职⼯号!='zg11' or 职⼯号!='zg15'
使⽤谓词In
Use 企业销售管理系统
Select * from 订购单 where 职⼯号 not in('zg1', 'zg2', 'zg11', 'zg15')
5、模糊Like查询:有的时候,我们不清楚所要查询的信息,如显⽰职⼯信息,但不能确定该职⼯的姓名,只知道他姓名中含有“王”字,那该如何查呢?SQL中提供了Like关键字,使⽤Like进⾏了查询时,还要指定通配符。
通配符及其含义
在SQL语句中,还⽀持Like与Not结合使⽤。假设显⽰姓名中不含有“王”字的职⼯信息,具体代码如下:
Select * from 职⼯ where 姓名 not like'王%'
在该例中,如果你知道姓名中含有“王”字,并且姓名只有两个字,那么可以进⼀步缩⼩查范围,具体代码如下:
Select * from 职⼯ where 姓名 not like'王_'
这样就可以查到姓名中只有两个字,并且姓为“王”的职⼯信息。
6、空值NULL查询:在SQL语句中使⽤IS NULL来进⾏是否为空的判断。下⾯以显⽰性别为空的职⼯信息为例具体讲解⼀下。Select * from 职⼯ where 性别 is null
假设显⽰性别不为空的职⼯信息,具体代码如下:
Select * from 职⼯ where 性别 is not null
7、限制范围Between…And查询:在数据医疗队引擎查询中,限制范围也是经常使⽤的⼀个条件。当然可以使⽤⼤于等于号、⼩于等于号和And运算符三者来完成范围的限制,但使⽤Between…And结构,会使SQL更清楚。下⾯以显⽰⼯资在1300~1900之间的职⼯信息为例具体讲解⼀下。
Between…And语句
Select * from 职⼯ where ⼯资 Between 1300 And 1900
⼤于等于号、⼩于等于号与And运算符
Select * from 职⼯ where ⼯资>=1300 And ⼯资<=1900
在SQL语句中,还⽀持Between…And与Not结合使⽤。假设显⽰⼯资不在1300~1900之间的职⼯信息,具体代码如下:
Between…And语句
Select * from 职⼯ where ⼯资 not Between 1300 And 1900
⼤于等于号、⼩于等于号与And运算符
Select * from 职⼯ where ⼯资<=1300 And ⼯资>=1900
8、消除重复字段数据Distinct查询:在SQL投影查询中,可能会有许多重复的数据,使⽤关键字Distinct就可以从结果集中除去重复的数据。下⾯以显⽰职⼯的⼯资信息为例具体讲解⼀下:
显⽰有重复的数据
Select ⼯资 from 职⼯
显⽰⽆重复的数据
Select Distinct⼯资 from 职⼯
9、单表嵌套查询:就是外层Select语句与内层Select语句都来源于同⼀张表。下⾯以显⽰仓库⾯积⼤于wh1仓库⾯积的仓库信息为例来讲解⼀下。
⾸先利⽤Select语句求出wh1仓库的仓库⾯积,然后再显⽰⾯积⼤于该值的仓库信息。
Select * from 仓库 where ⾯积>(select ⾯积 from 仓库 where 仓库号='wh1')
嵌套查询中也可以带有逻辑运算符、谓词In、Like、Between…And结构。假设显⽰wh1或wh2仓库的⼯资不⼤于职⼯zg16⼯资的职⼯信息,并要求职⼯姓名不含有“平”字。
⾸先利⽤Select语句求出职⼯zg16的⼯资,然后再对姓名进⾏模糊查询。
Select * from 职⼯ where ⼯资<=(select ⼯资 from 职⼯ where 职⼯号='zg16') and 姓名 not like '%平%' and 仓库号 in('wh1', 'wh2')
10、多表嵌套查询:多表嵌套查询就是外层Select语句与内层Select语句来源于不同的表,但表之间要存在关系。这也是SQL 语句中最重要的查询。下⾯以显⽰北京地区的职⼯信息为例来讲解⼀下。
⾸先利⽤Select语句求出北京地区的仓库号,然后利⽤仓库号再显⽰职⼯信息。
use 企业销售管理系统
Select * from 职⼯ where 仓库号 in(select 仓库号 from where 城市='北京')
不仅可以实现两个表的嵌套,还可以实现多个表的嵌套,假设显⽰北京地区的职⼯的订购单信息。
⾸先利⽤Select语句得到北京地区的仓库号,然后利⽤得到的仓库号得到该仓库中的职⼯号,再利⽤得到的职⼯号得到职⼯的订购单信息。
Select * from 订购单 where 职⼯号 in(Select 职⼯号 from 职⼯ where 仓库号 in (select 仓库号 from 仓库 where 城市='北京'))
多表嵌套查询中也可以带有逻辑运算符、谓词In、Like、Between、And结构。假设显⽰北京地区的职⼯的订购单信息,并且职⼯的⼯资⼤于1200,订购⽇期为2003年9⽉3⽇~2006年1⽉1⽇。
Select * from 订购单 where 职⼯号 in(Select 职⼯号 from 职⼯ where ⼯资>1200 a nd 仓库号 in(select 仓库号 from 仓库where 城市='北京')) and 订购⽇期 between '200 3-09-03' and '2006-01-01'
11、单级排序查询:排序的关键字是Order by,默认状态下是升序,关键字是Asc。降序排列的关键字是Desc。排序字段可以是数值型,也可以是字符型、⽇期时间型。下⾯以按⼯资从⾼到低显⽰职⼯信息为例来讲解⼀下。
Select * from 职⼯Order by ⼯资 desc
在排序查询中还可以带有逻辑运算符、谓词In、Like、Between、And结构。假设显⽰wh1或wh2仓库的,⼯资不⼤于职⼯
zg16⼯资的职⼯信息,并要求职⼯姓名不含有“平”字,按⼯资从低到⾼显⽰。
⾸先利⽤Select语句求出职⼯zg16的⼯资,然后再对姓名进⾏模糊查询,最后再排序。
Select * from 职⼯ where ⼯资<=(Select ⼯资 from 职⼯ where 职⼯号='zg16') and 姓名 not like '%平%' and仓库号 in
('wh1','wh2') order by ⼯资
12、多级排序查询:按照⼀列进⾏排序后,如果该列有重复的记录值,则重复记录值这部分就没有进⾏有效的排序,这就需要再附加⼀个字段,作为第⼆次排序的标准,对没有排开的记录进⾏再排列。下⾯以按⼯资从⾼到低显⽰职⼯信息为例来讲解⼀下。单级排序,按⼯资降序。
Select * from 职⼯Order by ⼯资 desc
多级排序,先按⼯资降序,再按职⼯ID升序。
Select * from 职⼯Order by ⼯资 desc,职⼯ ID asc
13、与别名⼀起使⽤的统计函数:在实际编程中,有时候需要知道所有记录某项值的总和、平均值、最⼤值等,这时就要⽤到统计函数查询。常⽤的统计函数共有6个。
统计函数及其意义
在使⽤统计函数时,还要注意COUNT()、SUM()、AVG()可以使⽤DISTINCT关键字,以在计算机中不包含重复的⾏。⽽对于MAX()、MIN()、COUNT(*),由于不会改变其结果,因此没有必要使⽤DISTINCT。
利⽤Select语句显⽰统计值是没有列名的,下⾯以显⽰职⼯的最⼤值、最⼩值、⼯资总和、平均⼯资、职⼯⼈数为例来讲解⼀下。
Select max(⼯资),min(⼯资), SUM(⼯资),avg(⼯资),count(*) from 职⼯
这时会发现统计值没有列名,现在来给统计字段添加列名。
Select 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 ⼯资>1500
14、带有统计函数的嵌套查询:还可以利⽤统计函数得到的数据作为Select查询语句的条件进⾏查询。下⾯以显⽰⼯资⼤于所
有职⼯平均值的职⼯信息为例来讲解⼀下。
Select * from 职⼯where ⼯资>(select avg(⼯资) from 职⼯)
在统计函数查询中可以带有⽐较运算符、逻辑运算符、In、Between…And等。假设显⽰⼯资⼤于wh1或wh2仓库中职⼯平均⼯资,并且职⼯姓名不含有“亮”字的职⼯信息。
Select * from 职⼯where ⼯资>(select avg(⼯资) from 职⼯ where 仓库号='wh1' o r 仓库号='wh2') and 姓名 not like '%亮%' 15、统计函数字段显⽰在表字段中及运算字段:如果在职⼯表中添加⼀个职⼯平均⼯资值字段,这就对实际编程有很⼤的意义,即可以利⽤平均字段进⾏运算,⼤⼤提⾼编程速度。下⾯以在职⼯表中添加平均⼯资为例为讲解⼀下。
Select 职⼯.*,(select avg(⼯资) from 职⼯) as 平均⼯资 from 职⼯
在职⼯表中添加了⼀个平均⼯资字段,即在Select查询字段中添加了⼀个Select⼦查询。
在Select查询中,还可以计算出每名职⼯的⼯资与所有职⼯平均⼯资之差,具体操作如下:Select 职⼯.*,(select avg(⼯资) from 职⼯) as 平均⼯资,⼯资-(select avg(⼯资) from 职⼯) as 平均⼯资的差 from 职⼯
16、分组查询:使⽤GROUPBY分组查询,要注意分组的标准⼀定要有意义,如显⽰不同仓库的平均⼯资,显⽰不同职⼯的最⼤订单⾦额等。如果显⽰不同职⼯的平均⼯资那就没有意义了。下⾯显⽰不同仓库的平均⼯资、⼯资和、最⼤⼯资、最⼩⼯资、⼯资⼈数信息为例来讲解⼀下。
Select 仓库号,max(⼯资)as 最⼤⼯资, min(⼯资)as 最⼩⼯资, sum(⼯资)as ⼯资总和, avg(⼯资)as 平均⼯资, count(*)as 职⼯⼈数 from 职⼯ group by 仓库号
常用的sql查询语句有哪些在分组查询中还可以带有逻辑运算符、谓词In、Like、Between…And结构。假设显⽰⼯资⼤于zg1职⼯⼯资的不同仓库的平均⼯资、⼯资和、最⼤⼯资、最⼩⼯资、⼯资⼈数信息。
⾸先利⽤Select语句求出职⼯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 仓库号,max(⼯资)as 最⼤⼯资, min(⼯资)as 最⼩⼯资, sum(⼯资)as ⼯资总和, avg(⼯资)as 平均⼯资, count(*)as 职⼯⼈数 from 职⼯ group by 仓库号 ha ving avg(⼯资)>1760
在分组查询的Having条件中还可以带有逻辑运算符、谓词In、Like、Between…And结构。假设显⽰不同仓库的平均⼯资、⼯资和、最⼤⼯资、最⼩⼯资、⼯资⼈数信息,但要求该仓库的平均⼯资⼤于1760,最⼤⼯资与最⼩⼯资之差在380~800之间。
Select 仓库号,max(⼯资)as 最⼤⼯资, min(⼯资)as 最⼩⼯资, sum(⼯资)as ⼯资总和, avg(⼯资)as 平均⼯资, count(*)as 职⼯⼈数 from 职⼯ group by 仓库号 ha ving avg(⼯资)>1760 and max(⼯资)-min(⼯资) between 380 and 800 18、带有分组的嵌套查询:还可以利⽤分组得到的数据作为Select查询语句的条件进⾏查询。下⾯以显⽰职⼯所在仓库的最⼤⼯资与最⼩⼯资之差在380~800之间的职⼯所在仓库信息为例为讲解⼀下。
先求出职⼯所在仓库的最⼤⼯资与最⼩⼯资之差在380~800之间的职⼯所在的仓库号,再利⽤这个仓库号显⽰仓库信息。
Select * from 仓库,where 仓库号 in(Select 仓库号 from 职⼯ group by 仓库号 hav ing d max(⼯资)-min(⼯资) between 380 and 800
19、内外层嵌套实现分组功能:利⽤group by分组显⽰统计字段信息,有很多字段不能显⽰。如显⽰不同仓库的平均⼯资信息,在这个查询中只能显⽰仓库号,不能显⽰职⼯号及职⼯的⼯资。因为不同仓库的平均⼯资,有⼏个仓库就显⽰⼏条平均⼯资,⽽每个仓库中的职⼯则有很多。
下⾯以显⽰不同职⼯经⼿订购单⾦额最⼤的订单信息为例来讲解⼀下。
在这⾥应该边求出每名职⼯订购单⾦额的最⼤值,边显⽰该职⼯所对应的这条订购单信息。具体代码如下:
Select a.* from 订购单 a where ⾦额=( select max(⾦额) from 订购单 where 职⼯
号=a.职⼯号)
注意:上⾯语句中的订购单 a是给这个订购单起的⼀个别名,⼤家可以把它看成就其实就是订购单的⼀张复制的表,在这⾥运
⽤它只是为了使内外层的嵌套更清晰、更容易理解。
20、分组查询字段显⽰在表字段中及运算字段:如果在职⼯表中添加职⼯所在仓库的平均⼯资值字段,这就对实际编程有很⼤的意义,即可以利⽤平均字段进⾏运算,⼤⼤提⾼编程速度。下⾯以在职⼯表中添加职⼯所在的仓库的平均⼯资字段为例来讲解⼀下。
Select a.* ,(Select avg(⼯资) from 职⼯ where 仓库号=a.仓库号) as 所在仓库的平均⼯资 from 职⼯ a
在Select查询中,还可以计算出每名职⼯的⼯资与职⼯所在仓库的平均⼯资之差,具体操作如下:
Select a.* ,(Select avg(⼯资) from 职⼯ where 仓库号=a.仓库号) as 所在仓库的平均⼯资,⼯资-(Select avg(⼯资) from 职⼯where 仓库号=a.仓库号) as 所在仓库的平均⼯资之差 from 职⼯ a
21、Exists谓词查询:其实In就是谓词查询,还有谓词Exists与Exists,这两个谓词实现的功能是相同的,只是写法不同。In多⽤于嵌套⼦查询语句中,⽽Exists多⽤于判断Sele ct语句是否返回查询结果。常⽤量词有Any、All和Some是同义词。在进⾏⽐较运算时,只要⼦查询中有⼀⾏能使结果为真,结果就为真。⽽All则要求⼦查询中所有⾏都使结果为真时,结果才为真。下⾯以显⽰那些仓库中还没有职⼯的仓库信息为例,讲解⼀下In谓词与Exists 谓词在代码上的不同。
⽤Exists谓词实现:
Select * from 仓库 where not Exists(Select * from职⼯ where 仓库号=仓库.仓库号)
⽤In谓词实现:
Select * from 仓库 where 仓库号 not in(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量词查询:All量词查询,要求⼦查询中所有⾏都使结果为真时,结果才为真。下⾯就以显⽰⼯资⼤于等于wh1仓库中所有职⼯⼯资的职⼯信息为例,讲解⼀下All量词的应⽤。
⽤Any量词实现:
Select * from 职⼯ where ⼯资>=All(Select ⼯资 from 职⼯ where 仓库号='wh1')使⽤统计函数实现:
Select * from 职⼯ where ⼯资>=(Select MAX(⼯资)from 职⼯ where 仓库号='wh1')前⾯讲解的量词查询都可以⽤统计函数代替,但有些查询是不能⽤统计函数代替的。下⾯以显⽰⼯资⼤于所有不同仓库的平均⼯资的职⼯信息为例为讲解⼀下。Select * from 职⼯ where ⼯资>all(Select avg(⼯资)from 职⼯ group by 仓库号)该题⽤统计函数就⽆法解决。
24、显⽰部分记录的Top查询:在编程中,有时只需显⽰满⾜条件的前⼏条记录,这时就可以使⽤Top关键字。可以直接使⽤Top数字,显⽰指定条数记录;也可以使⽤Top数字Perc ent,显⽰所有满⾜条件记录的前百分之⼏条记录。
下⾯以显⽰⼯资最⾼的前三条职⼯信息为例来讲解⼀下。
Select top3 * from 职⼯ order by ⼯资 desc
25、保存查询:利⽤Into语句可以把查询的结果保存成⼀张新表。下⾯就以备份“职⼯”表为例讲解⼀下保存查询。
Use 企业销售管理系统
Select * into 职⼯备份 from 职⼯
这样就⽣成⼀张新表,表名为“职⼯备份”。
26、集合的并运算:SQL⽀持集合的并运算(Union),即可以将两个Selec语句的查询结果通过并运算合并成⼀个查询结果。为了进⾏并运算,要求这样的两个查询结果具有相同的字段个数,并且对应的字段的值要出⾃同⼀个值域,即具有相同的数据类型和取值范围。
Select * from 仓库 where 城市='北京'
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论