一,select语句
select :要返回的列或表达式
from :从中检索数据的表
where :行级过滤
group by :分组说明
having :组级过滤
order by :输出排序顺序
limit :要检索的行数
(1)select 子句用于指定输出的字段
(2)from 子句用于指定数据的来源
(3)where 子句用于指定数据的选择条件
(4)group by 子句用于对检索到的记录进行分组
(5)having 子句用于指定组的选择条件
(6)order by 子句用于对查询的结果进行排序
select和from是必须的,其他的是可选的
二,列的选择和指定
选择一个或多个表中 的某个或某些列 作为select语句的查询列
(1)如果查询一个表中 所有列 ,则可在select语句指定列的位置上直接使用 * 通配符,
select * from 表名
(2)若查询列有多个,则各个列名之间需要用逗号进行分隔,查询结果返回时,结果集中各列的次序是依照select语句中指定列的次序给出的
(3)希望查询出来的列的名称显示为自定义的列名可以在select语句中添加 as 子句到指定的列名之后原来修改列名
(4)进行查询时若希望得到对某些列的查询分析结果,而不是原始数据,则可以在select语句中替换这些列,需要用到case表达式
(5)使用select语句对列进行查询时,在结果中可以输出对列值计算后的值
(6)在表中,可能会包含重复值。有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。
作用于单列
select DISTINCT StuName FROM student
作用于多列
select DISTINCT StuName,StuSex,Pwd,DeptNo FROM student
(7)删除表中的冗余数据
delete FROM student where StuNo not in(
select MIN(student.StuNo) FROM(select * from student) student GROUP BY
student.StuName,student.StuSex,student.Pwd,student.DeptNo)
三,from子句与多表连接查询
通过在 from 子句中指定多个表时,select 操作会使用 “连接” 运算将不同表中需要查询的数据组合到一个结果中,并同样以一个临时表的形式返回。
1.交叉连接
通过在 from 子句中使用关键字 “cross join” 来连接两张表,从而实现一张表的每一行与另一张表的每一行的笛卡尔乘积,并返回两张表的每一行相乘的所有可能搭配结果。
select * from 表1 cross join 表2
2.内连接
内连接就是利用条件判断表达式中的比较运算符来 组合两张表中的记录
select 列名
from 表名1
inner join
表名2
on 条件判断表达式
列名:用于指定需要检索的列的名称或者别名
表名:用于指定进行内连接的两张表的表名
on:on子句通过事先设定的连接条件来指定两张表按什么条件进行连接,且连接条件中可采用如何一种比较运算符。
3.外连接
外连接是首先将连接的两张表分为基表和参考表,然后再以基表为依据返回满足和不满足条件的记录
(1)左外连接
左外连接,也成左连接,它使用关键字 “left outer join” 或关键字 “left join” 来连接两张表
“left outer join”或“left join”左边表(也称为基表)的所有行,并用这些行与该关键字右边表(也称为参考表)中的行进行匹配,,即匹配左表中的每一行及右表中符合条件的行。
(2)右外连接
右外连接,也成右连接,它使用关键字 “right outer join” 或关键字 “right join” 来连接两张表
右外连接是以右表为基表,连接方法与左外连接完全一样
四,where子句与条件查询
select 语句中,可以使用 where 子句指定过滤条件(也称查询条件)
1.比较运算符
比较运算用于比较两个表达式的值。
2.判定范围
(1)between...and
当查询条件被限定在值的某个范围时,可以使用关键字 between
(2)in
使用关键字 in 可以指定一个值的枚举列表,该表中会列出所有可能的值
3.判定空值
当需要判定一个表达式的值是否为空时,可以使用关键字 is null
4.子查询
可以使用select语句创建子查询,即可嵌套在其他select查询中的select查询
5.and
设有:学生S(学号,姓名,性别,年龄)
课程C(课号,课名)
选课SC(学号,课号,成绩)
用SQL语句查询 选修课程名为BC的学生姓名和成绩。
select 姓名,成绩
from S,C,SC
where S.学号=SC.学号 and C.课号=SC.课号 and 课名=“BC”
五,group by子句与分组数据
GROUP BY 语句通常用于结合聚合函数(如COUNT()、MAX()等),根据一个或多个列对结果集进行分组。
从字面上来理解,GROUP 表示分组,BY 后接字段名,表示根据某个字段进行分组。
一般情况下,GROUP BY 必须要配合聚合函数一起使用,通过使用聚合函数,在分组之后可以对组内结果进行计数(COUNT)、求和(SUM),求平均数(AVG)操作等。
常用聚合函数包括:
count() —— 计数
sum() —— 求和
avg() —— 平均数
max() —— 最大值
min() —— 最小值
六,having子句
在select语句中,除了能使用 group by 子句分组数据之外,还可以使用 having 子句来过滤分组
select name
from xuesheng
group by name
having min(score)>80
having 与 where 的差别
where 子句主要用于过滤 数据行 ,而 having 子句主要用于过滤分组即 having 子句可基于分组的聚合值而不是特定行的值来过滤数据。
having 子句中的条件可以包含聚合函数,而where 子句中则不可以
where 子句会在数据分组前进行过滤,having子句则会在数据分组后进行过滤。因而。where子句排除的行不包含在分组中
七,order by
在select语句中,可以使用 order by子句将结果集中的数据行按一定的顺序进行排列
八,limit
limit子句用来限制select语句返回行数