郭德纲是第几代:查询数据库语句
来源:百度文库 编辑:偶看新闻 时间:2024/04/27 16:28:03
一、Select语句:67页
基本select语句:
select 语句的一般格式如下:
select
二、单表查询:指仅涉及一个表的查询)(P67:基本查询)
(一)查询指定的列
1.查询表中所有列:在select语句指定列的位置上使用*号时,表示查询表的所有列。
例1.在xs表中查询全体学生的信息。
use xsbook
select * from xs
2.查询表中指定的列。查询多列时,列名之间要用逗号隔开。
例2.在xsbook数据库的xs表中查询学生的姓名、专业名、借书数信息。
select 姓名,专业名,借书数
go
3.指定查询结果中的列标题
例3:给列加显示标题示例:
select 借书证号 as cardno,姓名 as name, 借书数 as cnt
go
select cardno=借书证号,name=姓名,cnt=借书数
go
4.查询经过计算的列(即表达式的值):
例4:查询所有书名、单价及8折之后的图书价格
select 书名,单价,八折=单价*0.8
go
(二)、选择行:选择表中的部分行或全部行作为查询的结果:(P72:筛选查询)
格式: select [all|distinct] [top n[percent]]<目标列表达式列表>
1. 消除查询结果中的重复行
例5:查询所有专业名
select distinct 专业名
go
注意:与使用Distinct关键字相反,当使用关键字All时,将保留结果集中的所有行(默认值为All)
例如:select all 姓名,性别
2. 限制查询结果中的返回行数
例6:查询xs表的前5个记录信息
select top 5 * from xs
再如:select top 50 percent * from xs
(三)查询满足条件的行: 用where子句实现条件查询:(P70:where条件查询)
运算符
比较运算符
范围运算符
列举运算符
模糊匹配运算符
空值运算符
逻辑运算符
1.使用比较运算符:P70
例7:查询xsbook数据库xs表中借书数在2本以上的学生情况(含2本)。
select *
2.指定范围:P72
其中:between关键字之后的是范围的下限(即低值),and关键字之后的是范围的上限(即高值)
例8:查询xs表中1980 至1985年出生的学生情况。
select *
再如:查询xs 表中非1980年出生的学生信息。
select *
3.使用列举:
例9:查询xs表中专业名为'计算机'、'信息工程'、'英语'或'自动化'的学生的借书证号,姓名,借书数,专业名。
select 借书证号,姓名,借书数,专业名
注意:与in相对的是 not in,用于查找表达式的值不属于指定集合的行。
例如:查询xs表中非'计算机'、'信息工程'、'英语'专业的学生情况:
select *
4.使用通配符进行模糊查询:P70
例10:查询xs表中姓“王”且姓名为两个字的学生情况
select *
再如:查询book表中书名含有“数据”字样的图书情况:
select *
注意:所有通配符都必须在like 子句中才有意义,否则将被当作普通字符处理;且like子句中的匹配串也可以是一个不含通配符的完整的字符串(如下例)。
例11:查询xs表中计算机专业的学生情况
select *
查询相反的情况:则使用以下语句:
select *
即:如果like后面的匹配串中不含通配符,那么可以用“=”(等号)运算符来替代like。即上例中的where子句等价于:where 专业名='计算机'。
5.使用null的查询
例12:查询xs表中专业名尚不确定的学生情况。
select *
再如:查询xs表中专业名已确定的学生的姓名,专业名。
select 姓名,专业名
6.多重条件查询:使用逻辑运算符(P70)
例13:查询xs表中借书数在3本以下的计算机专业学生的姓名和借书证号。
select 借书证号,姓名
再如:查询计算机和英语专业学生的基本情况:
select *
(四)对查询结果排序:P73
例14:查询xs表中的全体学生信息并按出生时间排序,要求晚出生的学生排在前面。
select *
思考:若本例改为以下格式的语句,其功能是什么?
select top 5 *
例15:请查询图书的书名、六折后的书价,并将结果按六折后的书价的降序排列。
select 书名,单价*0.6 as 书价六折
说明:本例中,order by子句也可写为: order by 2,这里2代表排序字段或表达式(即:单价*0.6)在select子句中出现的顺序号。
注意:排序表达式可有多个,例如:将xs表的学生按性别的降序排序,同性别的按出生时间的升序排序:
select *
(五)使用统计函数:又称集函数,聚合函数
函数名
AVG
count
max
min
sum
1. SUM和AVG
功能:求指定的数值型表达式的和或平均值。
例16:查询计算机专业学生所借图书的平均数、借书总数。
select avg(借书数) as 平均借书数,sum(借书数) as 借书总数
2. Max和Min
功能:求指定表达式的最大值或最小值。
例17:在xs表中查询学生最多和最少的借书数
select max(借书数) as 最多借书数,min(借书数) as 最少借书数
3. count:
(1).count(*):
功能:统计记录总数。
例18:查询学生总数
select count(*) as 学生总数
再如:查询已借阅了图书的学生人数。
select count(*) as 借阅了图书的学生数
思考:查询计算机专业的学生总数。
(2).count([all]|[distinct] 字段名)
功能:统计指定字段值不为空的记录个数,字段的数据类型可以是text、image、ntext、uniqueidentifier之外的任何类型。
例19:查询学生总数
select count(借书证号) as 总人数
说明:
例20:查询出版社数。
select
注意:若select 列表中使用了统计函数,则列表中不允许再指定任何字段名,用group by子句指定的字段除外。如:以下操作将会产生错误:
select 借书证号,count(*)
(六):对查询结果分组:P76
例21:统计男、女生各多少人。
select 性别,count(*) as 人数
再如:查询各专业人数及各专业的总借书数。
select 专业名,count(*) as 各专业人数,sum(借书数) as 各专业的借书总数
说明:在使用group by子句时应注意以下几点:P77
1.在使用group by子句后,select列表中只能包含:group by子句中所指定的分组字段及统计函数。
2.having子句的用法:
例22:查询学生人数在2人以上(含2人)的专业的专业名以及其学生人数
select 专业名,count(*) as 人数
3. 分组查询时:不含统计函数的条件,通常使用where子句;含有统计函数的条件,则只能用having子句。
例如:查询“体育”专业男、女生各有多少人。
select 性别,count(*) as 人数
再如:查询平均借书数在2本以上(含)的专业及其学生人数。
select 专业名,count(*) as 人数
(七)compute子句: P77
例23:查询计算机专业学生的借书证号,姓名,出生时间及学生人数。
select 借书证号,姓名,出生时间
再如:查询所有图书的书名,单价,出版社及均价。
select 书名,单价,出版社
说明:使用compute子句时应注意以下几点:
1.compute <统计函数名> 子句中所涉及到的字段是select 字段名列表中已列出的字段名。如:以下操作将产生错误,思考一下为什么?
select 书名,单价,出版社
2.同时使用compute...by子句和order by子句也可实现分组统计查询,但compute...by子句必须紧跟在order by 子句之后;compute ...by子句中的分组字段必须是order
例24:查询各专业学生的姓名,性别,专业名及各专业的学生人数。
select 姓名,性别,专业名
再如:查询各专业学生的姓名,性别,专业名,借书数及其总借书数。
select
总结:group by:可用于解决分组统计的问题。即只能显示分组字段值及统计函数值,且每组只有一行统计数据。
(八)、select语句的其它功能:(选学)
1、复制或创建表(into子句):P88
into子句功能:将select语句查询所得的结果保存到一个新建的表中。
注意:into 子句应放在select 字段名列表之后。into子句不能与compute子句一起使用。
例25:由xs表创建'计算机专业学生借书证'表,包括借书证号和姓名。
select 借书证号,姓名
再如:将xs表数据全部复制到表xs4中。
select *
又例: 只复制xs表的结构,不复制记录,即新表为空表。
select *
2、合并结果集(Union子句):可以将两个或多个select查询的结果合并成一个结果集,即合并两个或多个查询结果的记录。
例26:合并xsbook库中表xs1、xs2、xs3的全部记录(假设这三个表的结构相同)。
select *
union
union
3、显示变量或表达式的值(无数据源查询):
如:
又如:select 123.56,'中国','沈阳'
注意:这里也可以为要输出的值指定列显示标题,如: select '中国' as 国家,'沈阳' as 城市
4.用select 语句向表中插入多行记录。
格式:insert into 表名[(字段列表)]
注意:insert into表名[(字段列表)]和select查询结果集的列数、列序和对应列的数据类型必须一致。
例27:将表xs2中全体学生的记录数据追加到表xs1中。
insert into xs1
再如:将表xs3中女生的记录追加到表xs1中,要求只追加借书证号,姓名,性别,出生时间字段值。
insert into xs1(借书证号,姓名,性别,出生时间)
注意:一个select 语句中各子句的顺序如下:
select---[记录范围]---字段名列表---[into]---[from]---[where]---[group by]---[having]---[order by]---[compute---[by]]
练习一:以下所有操作均针对xsbook库中的表xs或表book进行。其中37-44为选做
1、查询xs表中学生的借书证号,姓名,借书数。
2、查询book表中所有图书信息。
3、查询book表中的所有出版社名称。
4、查询book表中书名、单价、库存量及各种库存图书的总价值(即总金额)。
5、查询xs表中前3名学生的姓名,性别,出生时间。
6、查询xs表中前30%学生的相关信息。
7、查询xs表中计算机专业学生的相关信息。
8、查询xs表中1979年后出生的学生的信息。
9、查询book表中图书单价在30-50之间的所有图书的书名、单价。
10、查询xs表中1980年出生的学生姓名,性别、出生时间。
11、查询book表中图书单价高于50元(不含50元)或低于30元(不含30元)的图书的书名、单价。
12、查询xs表中计算机、英语、体育、政治专业的学生的信息。
13、查询xs表中非计算机、英语、体育专业的学生姓名、性别。
14、查询book表中所有图书名称中包括了“政治”字样的图书的书名、单价。
15、查询xs表中所有“王”姓同学的姓名、性别、出生时间。
16、查询xs表中所有非计算机专业学生的信息。
17、查询xs表中专业已确定的学生的借书证号、姓名。
18、查询xs表中专业尚不确定的学生的信息。
19、查询xs表中英语专业全体女生的姓名,出生时间。
20、查询xs表中借书数在2本以上的全体男生的相关信息。
21、查询xs表中计算机专业或者英语专业的学生姓名和借书证号。
22.查询计算机专业的借书证号,姓名,性别,并按学生借书数的降序排列记录。
23.将xs表的所有记录排序:先按性别排序,同性别的同学再按出生日期的升序排列记录。
24.按库存图书的价值的升序排序查询所有图书的ISBN,书名及库存图书的价值(即单价*库存量)。
25.查询出生较早的三名同学的相关信息。
26.查询计算机专业的学生总数。
27.查询全体学生的总借书数、平均借书数、最多借书数和最少借书数。
28.查询book表中有几种图书。
29.查询xs表中有几个专业。
30.查询各专业的平均借书数。
31.查询计算机和英语专业分别有多少学生。
32.查询学生人数在2人以上(含)的专业及其学生人数。
33.查询计算机专业学生的借书证号,姓名,出生时间,借书数及平均借书数。
34.查询所有图书的书名,单价,库存量及库存总量。
35.查询各出版社所出版图书的书名,单价,出版社及平均价格。
36.查询各专业学生的借书证号,姓名,出生时间,专业名及其学生人数。
37.由xs表创建'英语专业学生'表,其中包括英语专业学生的全部信息。
38.复制xs表的结构保存在表xin中,表xin中含有借书证、姓名、性别、出生时间字段。
39.将表xs1,xs2,xs3中的记录合并到表women中,women中只包括女同学的借书证号,姓名,出生时间。注意:每个select语句都要加where子句。
40.用下列形式显示字符串:“中国”,“大连”,“170001”。
41.显示计算表达式123190*3/45-2321的值。
42.显示系统的当前日期和时间。注意:用函数getdate()获取系统当前日期日间。
43.将表xs2中80年之前出生的学生记录数据追加到表xs1中。
44.将表xs3中借书数不为0的记录追加到表xs1中,要求只追加借书证号,姓名,性别,出生时间字段值。