一、select查询语法
二、简单查询
三、分组和汇总
四、连接查询
五、子查询
六、其他查询
七、在数据操作中使用select子句
1、查询语法格式:
select { select_list [ into new_table_name ] }
from { table_list | view_list }
[ where { search_conditions } ]
[ group by { group_by_list } ]
[ having { search_conditions } ]
[ order by { order_list [ asc | desc ] } ]
2、语法格式中参数的含义
1、投影查询: 查询的是列
(1)、投影查询的格式
select [ all | distinct ] [ top n [ percent ] ]
{ * | { { column_name | expression | identitycol | powguidcol }
[ [ as ] column_alias ] | column+alias = expression } [ ,…n ] }
(2)、参数定义:
(3)、使用Teaching数据库的一些查询
use teaching
--从student表中查询姓名、性别、专业
select sname,ssex,specilalty from student
--从course表中查询所有记录
select * from course
--从student表中查询专业名称,滤掉重复行
select distinct specialty from student
--从course表中查询前50%行的信息
select top 50 percent * from course
(4)、改变查询结果中的显示标题
use teaching
select sno as 学号 , sname as 姓名 from student
select 学号=sno,姓名=sname from student
select 学号=sno,sname as 姓名 from student
(5)、计算列值: 计算的列并不在表中,仅仅展示一下,不进行存储
select sno,cno,score150=sccore*1.50 from sc
2、选择查询: 查询的是行,用where筛选满足条件的行
(1)、选择查询语法格式
select select_list from table_list where searcch_conditions
(2)常用的查询条件
查询条件 | 谓词 |
---|---|
比较运算符 | =、>、<、>=、<=、!=、<>、!>、!< |
确定范围 | between and、and、not between and |
确定集合 | in、not in |
字符匹配 | like、not like |
空值 | is null、is not null |
多重条件 | and、or、not |
<>等价于!=都是不等于
(3)、使用关系表达式: 使用比较运算符的表达式
(4)、使用逻辑表达式: 使用多重条件与(and)、或(or)、非(not)的表达式
(5)、使用between关键字
selec * from sc where score not between 80 and 90 --查询成绩不在80到90之间的所有信息
(6)、使用in关键字
语法格式:
表达式 [ not ] in (表达式1,表达式2 [ ,…,表达式n ] )
示例:
--从student表中查询专业为计算机和网络的姓名、学号、和专业
select sname,sno,specialty from student where specialty in ('计算机','网络')
(7)、使用like关键字(模糊查询): 配合通配符使用
通配符 | 含义 |
---|---|
% | 包含零个或者多个字符的任意字符串 |
_ | 任意单个字符 |
[ ] | 代表指定范围的单个字符,[ ]内可以是单个字符[abc],也可以是字符范围[a-f] |
[ ^ ] | 代表不在指定范围内的单个字符,[ ^] 可以是单个字符[ ^ a b c ],也可以是字符范围[ ^ a - f] |
使用示例:
(8)、is [ not ] null (是[否]为空)查询: 在where子句中不能使用比较运算符对空值进行判断,要使用空值表达式
语法格式:
表达式 is [ not ] null
示例:
select * from sc where score is null --查询成绩为空的学员信息
(9)、复合条件查询: 结合与或非使用
--查询专业为计算机或者通信的所有女生的信息
select * from student where sex='女' and (specialty='计算机' or specialty='通信')
3、聚合函数查询: 常用的聚合函数表
函数名 | 功能 |
---|---|
sum(列名) | 列的总和 |
avg(列名) | 对列求平均值 |
min(列名) | 列的最小值 |
max(列名) | 列的最大值 |
count(列名) | 列的数据项数 |
count(*) | 找到的行数 |
1、分组查询: 是聚合函数和group by子句相结合实现的查询
(1)、分组查询语法格式
[ group by { [ all ] group_by_expression [ , …n ] } [ with { cube | rollup } ] ]
(2)、参数说明:
(3)、简单分组: group by子句中没有使用cube和rollup关键字
--查询男生和女生数
select sex,count(sex) as 人数 from student group by sex
--查询修理2门及以上课程的学生和学号的学号和选课数
select sno,count(cno) as 选修课程 from sc group by sno having count(cno)>=2
(4)、having和where的区别:
(5)、cube的使用
select cno,avg(score) as '平均成绩' ,count(sno) as '选修人数' from sc group by with cube
(6)、rollup的使用
select specialty,se,count(*) as '人数' from student group by specialty,sex with rollup
2、数据汇总
(1)、在select语句中使用聚合函数,结果集全是聚合值,没有明细值
(2)、为了解决(1)的问题,使用compute子句
(3)、使用compute时,查询结果由两部分组成,前一部分是没有使用compute子句产生的结果集;后一部分只有一行,是由compute子句产生附加的汇总数据,出现在整个结果集的末尾
(4)、语法格式:
[ compute { 聚合函数名 ( expression ) } [ ,…n ] [ by expression [ ,…n ]] ]
注意:avg、count、max、min、sum这些函数均会忽略null值,且distinct选项不能在此使用
select sno,sname,sex from student where specialty = '计算机' compute count(sno)
1、内连接: 默认就是内连接
select select_list from 表1 inner join 表2 on 连接条件
2、自连接: 自己连自己
select * from student a inner join student b on a.sname=b.sname and a.sno<>b.sno
3、外连接
(1)、外连接分类:
select select_list from 表1 left [ outer ] join 表2 on 表1.列=表2.列
select select_list from 表1 right [ outer ] join 表2 on 表1.列=表2.列
select select_list from 表1 full [ outer ] join 表2 on 表1.列=表2.列
4、交叉连接:
select 列 from 表1 cross join 表2
1、子查询: 就是将增删改查嵌套在其他语句中,使用条件:当一个结果依赖于另一个查询的结果时,只执行一次
2、无关子查询: 执行不依赖与外部查询,先执行子查询得到结果提供给外部查询使用
3、相关子查询: 子查询依赖于外部查询。重复执行
(1)、比较子查询
(2)、exists(存在性测试)
1、集合运算查询:
(1)、union联合查询: 将多条select查询组合成一条
条件:所有查询中的列数和列的顺序必须相同;数据类型必须兼容
语法格式:
select select_list union [ all ] select_statement [ union [ all ] select_statement […n ] ]
select_statement:参与查询的select语句
(2)、except和intersect查询
语法格式:
select_statement { except | intersect } select_statement
2、对查询结果排序
语法格式:
[ order by { order_by_expression [ asc | desc ] } [ ,…n] ]
3、存储查询结果
语法格式:
select select_list into new_table from table_source [ where search_condition ]
1、在insert语句中使用select子句
insert [ into ] table_name [ (column_list) ] select select_list from table_name [ where search_condition ]
2、在update语句中使用select子句
update table_name set { column_name = { expression } } [,…n ] [ where { condition_expression } ]
3、delete语句中使用select子句
delete [ from ] table_name [ where { condition_expression } ]