SQL语句查询.docx
- 文档编号:11409432
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:14
- 大小:21.34KB
SQL语句查询.docx
《SQL语句查询.docx》由会员分享,可在线阅读,更多相关《SQL语句查询.docx(14页珍藏版)》请在冰豆网上搜索。
SQL语句查询
SQL语句查询
查询是SQL语言的重要组成部分,但不是全部,SQL还包含数据定义、数据操纵和数据控制功能等部分。
一、SQL概述
1、SQL是一种一体化的语言,它包括了数据定义,数据查询、数据操纵数据操纵等方面的功能,可以完成数据库活动中的全部工作。
2、SQL语言是一种高度非过程化的语言,SQL语言将要求交给系统,自动完成全部工作。
3、SQL语言非常简洁,SQL语言功能很强。
4、SQL语言可以直接以命令方式交换使用,也可以嵌入到程序设计语言中一程序方式使用。
二、查询功能
SQL语言的核心是查询。
SQL语言的查询命令也称作SELECT命令,它的基本形式由SELECT—FROM—WHERE查询块组成,多个查询块可以嵌套执行。
SQL语句主要短语的含义如下:
SELECT说明要查询的数据;
FROM说明要查询的数据来自哪个表,可以基于单个表或多个表进行查询;
WHERE说明查询条件,即选择元祖的条件;
GROUPBY短语用于对查询结果进行分组,可以利用它进行分组汇总;
HAVING短语必须跟随GROUPBY使用,它用来限定分组必须满足的条件;
ORDERBY短语用来对查询的结果进行排序。
注:
以上短语是学习和理解SQLSELECT命令必须要
握的。
1、简单查询
单表查询查询由SELECT和FROM短语构成(无条件查询)或由SELECTFROM和WNERE短语构成(条件查询)。
实例:
创建四个表,《职工表》、《订购单表》、《仓库表》、《供应商表》
例1、从《职工表》关系中检索所有工资值
select工资from职工表
在检索结果中有重复值,如果要去掉重复值,只需要指定DISTINCT短语。
selectdist工资from职工表
例2、检索《仓库表》关系中的所有元祖
select*from仓库表
注:
“*”是通配符,表示所有属性(字段),这里的命令等同于select仓库号,城市,面积from仓库表
例3、检索《仓库表》关系中的仓库号,城市元祖
select仓库号,城市from仓库表
例4、检索《职工表》关系中的工资多余1230元的职工号
select职工号from职工表where工资>1230
注:
where短语指定了查询条件,查询条件可以是任何复杂的逻辑表达式。
例5、检索《职工表》关系中的哪些仓库号有工资多于1210元的职工
selectdistinct仓库号from职工表where工资>1210
注:
显示结果,只对惟一的仓库号显示出来。
(有两个WH2,只显示一个WH2)
例6、检索《职工表》关系中职工号为“WH1”或“WH2”工作并且工资少于1250元的职工号
select职工号from职工表where工资<1250and;(仓库号="WH1"or仓库号="WH2")
注:
分号是换行符号
2、简单的连接查询
连接是关系的基本操作之一,连接查询是一种基于多个关系的查询
例7、检索《职工表》、《仓库表》关系中找出工资多于1230元的职工号和他们所在的城市。
select职工号,城市from职工表,仓库表where;
(工资>1230)and(职工表.仓库号=仓库表.仓库号)
结果为:
E4上海
E7北京
所有检索的信息分别出自职工表(职工号属性)和仓库表(城市属性)两个关系,这样的检索是基于多个关系的,这样的查询一般用连接查询来实现。
注:
1、“职工表.仓库号=仓库表.仓库号”是连接条件。
2、检索命令的FROM之后有两个关系,这两个关系之间肯定有一种联系(否则无法构成检索表达式),仓库表关系和职工表关系之间存在着一个一对多的关系。
3、FROM之后有多个关系含有相同的属性名时,必须用关系前缀指明属性所属的关系,如职工表.仓库号,“.”,前面是关系名,后面是属性名。
例8、检索《仓库表》《职工表》关系中找出工作在面积大于400的仓库表的职工号以及这些职工工作的城市。
select职工号,城市from职工表,仓库表where(面积;>400)and(职工表.仓库号=仓库表.仓库号)
结果为:
E1上海
E4上海
3、嵌套查询
基于多个关系的查询,这类查询所要求的结果出自一个关系,但相的条件却涉及多个关系。
例9、哪些城市至少有一个仓库的职工的工资为1250元?
要求查询仓库表中的城市信息,而查询条件是职工表的工资字段值
select城市from仓库表where仓库号IN(select仓库号;from职工表where工资=1250)
结果为:
北京
上海
注:
在这个命令中含有两个SELECT—FROM—WHER查询块,即内层查询块和外层查询块,内层查询块检索到的仓库号值是WH1和WH2,则可以写出等价的命令:
例10、查询所有职工的工资多于1210元的仓库表的信息
select*from仓库表where仓库号notin(select仓库号from职工表where工资<=1210)
注:
1、这个检索要求也可以描述为:
没有一个职工的工资少于或等于1200元的仓库的信息。
结果为:
WH1上海500
WH3广州200
WH4武汉400
内层SELECT—FROM—WHER查询块指出《职工表》所有职工的工资少于或等于1210元的《仓库表》的仓库号值的集合,在这里该集合只有一个值“WH1”;然后再从《仓库表》关系中检索元组的仓库号属性值不在该集合中的每个元组。
该检索出现了错误,在“武汉”的“WH4”仓库表还没有职工。
但该仓库的信息也被检索出来了。
所以必须分析检索要求,写出正确的SQL命令。
如果要排除那些还没有职工的仓库号,检索要求可以叙述为:
检索所有职工的工资都多于1210元的仓库的信息,并且该仓库至少要有一名职工。
select*from仓库表where仓库号notin(select仓库号from职工表where工资<=1210)and仓库号in(select仓库号from职工表)
结果为:
WH2上海500
WH3广州200
例11、找出和《职工表》E4挣同样工资的所有职工。
Select职工号from职工表where工资=(SELECT工资from职工表where职工号="E4")
结果为:
E4
E7
4、几个特殊运算符
BETWEEN…AND和LIKE等
例12、检索出工资在1220元到1240元范围内的职工信息。
此查询的条件是值在什么范围之内,则使用BETWEEN…AND
Select*from职工表where工资between1220and1240
结果为:
WH2E11220
WH3E61230
BETWEEN…AND的意思是在…和…之间,这个查询的条件等价于:
(工资>=1220)AND(工资<=1240)
注:
使用BETWEEN…AND表达条件更清晰,更简洁。
例13、从《供应商表》关系中检索出全部公司的信息(不要工厂或其他供应商的信息)。
注:
这是一个字符串匹配的查询,则应该使用LIKE运算符
Select*from供应商表where供应商名like“%公司”
结果为:
S4华通电子公司北京
注:
1、这里的LIKE是字符串匹配运算符,通配符%表示0个或多个字符。
2、还有一个通配符“—”(下划线)表示一个字符。
例14、查询《供应商表》中,找出不在北京的全部供应商信息。
Select*from供应商表where地址!
=“北京”
结果为:
S3振华电子厂西安
S6607厂郑州
注:
在SQL中,“不等于”用“!
=”表示。
还可以用NOT写出等价的命令。
Select*from供应商表whereNOT(地址=“北京”)
结果为:
S3振华电子厂西安
S6607厂郑州
注:
not的应用范围很广,可以有NOTIN、NOTBETWEEN等。
假如提出相反的请求,在《工资表》中找出工资不在1220元和1240元之间的全部职工信息,可用命令
Select*from职工表where工资notbetween1220and1240
结果为:
WH1E31210
WH2E41250
WH1E71250
5、排序查询
使用SQLSELECT可以将查询结果排序,排序的短语是ORDERBY,可以按一列或多列排序。
注:
ASC升序(升序可以省略)
DESC降序
例15、按《职工表》的职工工资值升序检索出全部职工信息。
Select*from职工表orderby工资
结果为:
WH1E31210
WH2E11220
WH3E61230
WH2E41250
WH1E71250
注:
这里ORDERBY是排序子句,如果要将结果按降序排列,则加上DESC
Select*from职工表orderby工资desc
结果为:
WH2E41250
WH1E71250
WH3E61230
WH2E11220
WH1E31210
例16、按《职工表》的先按仓库号排序,再按工资排序输出全部职工信息。
Select*from职工表orderby仓库号,工资
结果为:
WH1E31210
WH1E71250
WH2E11220
WH2E41250
WH3E61230
注:
1、这是一个按多列排序的例子
orderby是对最终查询结果进行排序,不可以在子查询中使用该短语。
2、TOP子句格式
TOP数值表达式[PERCENT]
(1)、TOP子句的作用是指定查询结果所要显示的记录条数,或者要显示的记录条数占查询结果的百分比。
(2)、当指定要显示的记录条数时,数值表达式的取值范围是1~32767。
如果在TOP字句中又使用了PERCENT关键字,则数值表达式表示要显示的记录所占总记录的百分比,此时它的取值范围是0.01~99.99。
(3)、VFP首先将记录进行排序,然后按该子句所指定值,显示最前面的数值的数值表达式条记录或百分之数值表达式条记录予以显示。
(4)、PERCENT获得的要显示的记录条数是对查询结果总记录数按百分比计算后所得的最高整数。
(5)、SELECT字句中的查询对象仅出自一个表,则TOP短语放置在查询对象的前面为好,如放置在后面时常常会出错。
(6)、TOP短语要与ORDERBY短语同时使用才有效。
例17、将《jbqk》表中全体职工中基本工资最高的前三名职工的全部信息。
SELECT*TOP3FROMJBQKORDERBY基本工资DESC
例18将《职工表》全体职工中、显示工资最低的那30%职工的信息。
SELECT*TOP30PERCENTFROM职工表ORDERBY工资
结果为:
WH1E31210
WH2E11210
例19将《职工表》全体职工中、显示工资最高的3位职工的信息。
SELECT*TOP3FROM职工表ORDERBY工资DESC
结果为:
WH2E41250
WH1E71250
WH3E61230
6、内联接查询(超链接查询)
联接查询是涉及多个关系的另一类基本操作。
使用WHERE子句可以实现简单的条件查询,而使用JOIN子句则可以实现表间的各种连接。
例20、普通链接(即只有满足链接条件的记录才出现在查询结果中)
SELECT仓库表.仓库号,城市,面积,职工号,工资from仓库表join职工表on仓库表.仓库号=职工表.仓库号
注:
join连接了《仓库表》、《职工表》中的字段。
7、分组与计算查询(统计查询)
在VFP的SELECT-SQL中,提供了5个聚集函数,使用它们可以按需要进行某种统计输出的功能实现。
COUNT()计数函数,用来统计记录条数,,类似于VFP的COUNT命令。
SUM()求和函数,用于进行数值型表达式的求和,类似于VFP的SUM命令。
AVG()求平均值函数,用于进行数值型表达式的求算术平均值,类似于VFP的AVERAGE命令。
MAX()求最大值函数,用于选择表达式中的最大值,
类似于VFP的MAX()函数。
MIN()求最小值函数,用于选择表达式中的最小值,
类似于VFP的MIN()函数。
例21、求《职工表》中每个仓库的职工的平均工资。
SELECT仓库号,AVG(工资)FROM职工表GROUPBY仓库号
结果为:
WH11230
WH21235
WH31230
注:
1、在这个查询中,首先按仓库号属性进行分组,然后再计算每个仓库的平均工资
2、GROUPBY子句一般跟在WHERE子句之后,没有WHERE子句时,跟在FROM子句之后。
3、还可以根据多个属性进行分组。
4、在分组查询时,有时需要分组满足某个条件时才检索,可以用HAVING子句来限定分组。
例22、求至少有两个职工的每个仓库的平均工资。
Select仓库号,count(*),avg(工资)from职工表groupby仓库号havingcount(*)>=2
结果为:
WH121230
WH221235
例23、求《职工表》中每个仓库的职工的合计工资。
SELECT仓库号,SUM(工资)FROM职工表GROUPBY仓库号
结果为:
WH12460
WH22470
WH31230
例24、求《jbqk》表中每个部门的职工的合计基本工资。
SELECT部门,SUM(基本工资)FROMjbqkGROUPBY部门
结果为:
电路实验室3000.00
仿真实验室1760.70
培训中心720.78
软件中心2480.85
8、集合的并运算
SQL支持集合的并(UNION)运算,即可以将两个SELECT语句的查询结果通过并运算合并成一个查询结果。
为了进行并运算,要求两个查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域(相同的数据类型和取值范围)
例25、在《仓库表》中,显示结果为城市为北京和上海的仓库的信息。
Select*from仓库表where城市=”北京”unionselect*from仓库表where城市=”上海”
结果为:
WH1北京370
WH2上海500
9、操作功能:
SQL的的操作功能是指对数据库中数据的操作功能,主要包括数据的插入、更新和删除3个方面的内容。
(1)、插入数据:
有两种插入命令的格式,标准格式和特殊格式。
第一种格式:
insertinto表名values
例26、往《订购单表》关系中插入元组(”E7”,”S4”,”OR01”,2001/05/25)
insertinto订购单表values("E7","S4","OR01",{^2001-05-25})
例27、往《订购单表》关系中插入职工号和订购单号两个属性值(”E7”,”S4”,”OR01”,2001/05/25)
Insertinto订购单表(职工号,订购单号)values(“E7”,”or01”)
第二种格式:
insertinto表名fromarray|frommemvar
注:
1、insertinto说明向指定的表中插入记录
2当插入的不是完整的记录时,可指定部分字段
3、values给出具体的记录值
4、fromarray说明从指定的数组中插入记录值
5、frommemvar说明根据同名的内存变量来插入记录值,如果同名的变量不存在,那么相应的字段为默认值或空值。
例28、insertinto……fromarray的使用方法
Use订购单表
Scattertoarr1*将当前记录读到数组arr1
Copystructuretoord2*拷贝订购单表的结构到ord2
Insertintoord2formarrayarr1*从数组arr1插入一条记录到ord2(出错)
Selectord2*切换到ord2的工作区
Browse*用Browse命令验证插入的结果
Use
Deletefielord2.dbf*关闭并删除ord2.dbf文件
(2)、更新数据
一般使用WHERE子句指定条件,以更新满足条件的的一些记录的字段值,并且一次可以更新多个字段,如果不使用WHERE子句,则更新全部记录。
例29、给《职工表》仓库号为WH1仓库的职工提高10%的工资
Update职工表set工资=工资*1.10where仓库号=”WH1”
例30、给《学生情况表》所有学生的年龄增加1岁
Update学生情况表set年龄=年龄+1
(3)、删除数据
SQL从表中删除数据的命令格式如下:
Deletefrom表名[where条件]
注:
1、from从哪个表中删除数据
2、where指定被删除的记录所满足的条件,如果不使用where子句,则删除表中所有记录。
例31、删除《仓库表》中仓库号值是WH2的元组。
Deletefrom仓库表where仓库号=”WH2”
注:
Delete命令同样是逻辑删除记录,如果要物理删除记录,则需要使用PACK命令。
10、定义功能:
(1)、使用CREATETABLE命令建立表,可以完成表设计器所能完成的所有功能。
(2)、表的删除,DROPTABLE命令可删除表文件
(3)、表结构的修改,ALTERTABLE命令可修改文件。
11、视图的定义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语句 查询