Mysql高级查询语句
Exists子查询
Exists的特点
1.在执行create或drop语句前,可以使用exists语句来判断数据库对象是否存在,返回值是true或false
drop table if exists student; 意思是如果存在表student则删除!否则不删除!
Create table if not exists student; 意思是如果不存在表student则创建,否则不创建!
2.exists还可以作为where条件的子查询
Select ..... from 表名 where exists (子查询);
意思是:
如果子查询有结果,则返回值为true,继续执行外层的查询语句;
如果子查询没有结果,则返回值是false,外层的查询语句不会执行。
查询语句
1.查询“数学” 课程 对应的编号
SELECT subjectNo FROM subject
WHERE SubjectName=‘数学’;
2.查询最近的考试成绩
SELECT MAX(ExamDate)
FROM result
WHERE SubjectNo=(SELECT subjectNo
FROM subject
WHERE SubjectName=‘数学’)
3. 在02的基础上 加条件 成绩大于80
SELECT * FROM result
WHERE ExamDate=(SELECT MAX(ExamDate)
FROM result
WHERE SubjectNo=(SELECT subjectNo FROM subject
WHERE SubjectName=‘数学’))
AND StudentResult>80)
查询语句中的聚合函数
#聚合函数:
/*
sum:求和
count:求总数
avg:平均值
max:最大值
min:最小值
*/
分组
#分组:group by having
#where:对于分组前的数据进行筛选 、
#having:对于分组以后的结果进行筛选
#查询各个年纪的男女生的人数
#分组语句的注意事项:查询内容仅限于分组的列和聚合函数
查询女生人数超过2的年纪编号
SELECT gradeid,COUNT(1) FROM student WHERE sex='女' GROUP BY gradeid HAVING COUNT(1)>2;
SQL语句中的日期函数
#日期函数
#获取年月日信息
SELECT CURDATE();
#获取时分秒信息
SELECT CURTIME();
#获取详细的时间和日期信息
SELECT NOW();
#获取某个时间是一年中的第几周
SELECT WEEK(NOW());
#计算两个时间之间间隔的天数
SELECT DATEDIFF(NOW(),‘1949-10-1’);
#推算日期
SELECT ADDDATE(NOW(),‘2019-6-17’);
#数学函数
#向上取整
SELECT CEIL(24.1);
#向下取整
SELECT FLOOR(24.1);
#随机小数:0-1
SELECT RAND();