SQL DQL数据查询语言(后续)
SQL DQL数据查询语言(后续)
1.子查询
- 在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句
- 在返回列中嵌套一个查询
where条件中嵌套
要求:查询课程为《高等数学-2》且分数不小于80分的学生的学号和姓名
select
a.StudentNo,a.StudentName
from student a
where a.StudentNo in
(
select b.SubjectNo
from `subject` b LEFT JOIN result c on
b.SubjectNo=c.StudentNo
where b.SubjectName = '高等数学-2' and c.StudentResult>80
);
先运行子查询,在运行外面的查询
分析:条件课程名与分数均不在student表中,也没有外键,表连接无法使用。
1.以学号为条件,使用in ,因为可能存在多名学生
2.课程表与成绩表存在外键,所以子查询使用表连接
3.写出课程表语成绩表中两个条件
4.返回满足的学生学号
列字段嵌套子查询
2.MYSQL函数
- 数学函数
- 字符串函数
- 日期和时间函数
- 系统信息函数
字符串函数
https://www.cnblogs.com/geaozhang/p/6739303.html
日期函数
https://www.cnblogs.com/ggjucheng/p/3352280.html
3.分组查询(group by)
语法:
SELECT 列名1,列名2 FROM 表名 [ WHERE 条件 ][ GROUP BY …]
;
注意 :
对所有的数据进行分组统计
分组的依据字段可以有多个,并依次分组
与HAVING结合使用,进行分组后的数据筛选
4.表合并(UNION与UNION ALL)
CREATE TABLE fzh
select * from fz1
UNION ALL
select * from fz2
UNION与UNION ALL的区别:
1、对重复结果的处理:UNION在进行表链接后会去重,UNION All不会。
2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
UNION ALL 要比UNION效率高,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。
SQL语句全语法
语法:
SELECT 列名 FROM 表名 [ WHERE 条件 ] [ GROUP BY …] [ HAVING …] [ ORDER BY… ][ LIMIT ];