Mysql 第三章 高级查询

时间:2024-04-14 15:20:22

EXISTS子查询的语法

问题:如何用sql语句检测temp表是否已经创建?
      方法一:这句话的意思是如果这个表存在,就删除
       DROP TABLE IF EXISTS temp;    
       方法二:子查询的语法  
       语法:SELECT …… FROM 表名 WHERE EXISTS(子查询);
       子查询有返回结果:exists 子查询结果为True
       子查询无返回结果:exists 子查询结果为FALSE,外层查询不执行

 

题目:检查“Logic Java”课程最近一次考试成绩
如果有 80分以上的成绩,显示分数排在前5名的学员学号和分数

分析:采用EXISTS检测是否有人考试成绩达到80分以上  
如果有,使用SELECT语句按成绩从高到低排序,显示前5名学员学号和成绩

Mysql 第三章 高级查询

 

题目:检查“Logic Java”课程最近一次考试成绩
如果全部未通过考试(60分及格),认为本次考试偏难,计算的该次考试平均分加5分

Mysql 第三章 高级查询

 

子查询的注意事项:
任何允许使用表达式的地方都可以使用子查询
嵌套在父查询SELECT语句的子查询可包括
SELECT子句
FROM子句
WHERE子句
GROUP BY子句
HAVING子句
只出现在子查询中而没有出现在父查询中的列不能包含在输出列中

题目:为每个学生制作在校期间每门课程的成绩单,
    要求每个学生参加每门课程的最后一次考试成绩作为该生本课程的最终成绩
    成绩单的数据项   学生姓名   课程所属的年级名称   课程名称   考试日期   考试成绩

Mysql 第三章 高级查询

 

分组查询用法


语法:SELECT …… FROM  <表名>  WHERE  ……  GROUP BY ……

题目:

统计每门课程平均分各是多少?
学号    课程编号    成绩
10000    1    71
10001    1    60
10004    1    93
10000    2    46
10002    2    60
10007    2    95
10001    3    83
10003    3    95
Mysql 第三章 高级查询

多列分组

分别统计每个年级男、女生人数

Mysql 第三章 高级查询

 

分组筛选

语法:SELECT …… FROM  <表名> WHERE …… GROUP BY …… HAVING……

示例:

Mysql 第三章 高级查询

WHERE与HAVING对比

WHERE子句 用来筛选 FROM 子句中指定的操作所产生的行

GROUP BY子句 用来分组 WHERE 子句的输出

HAVING子句 用来从分组的结果中筛选行

Mysql 第三章 高级查询

 

如何同时从这两个表中取得数据?

学号

姓名

年级

001

张青裁

1

 

002

陈刚

1

 

003

苏三东

1

 

学号

科目

分数

001

2

60

002

2

70

003

4

80

 

常用的多表连接查询

内连接(INNER JOIN)

外连接

左外连接   (LEFT JOIN)

右外连接   (RIGHT JOIN)

 

内连接(INNER JOIN)

内连接使用比较运算符根据每个表的通用列中的值匹配两个表中的行 

示例:

Mysql 第三章 高级查询Mysql 第三章 高级查询

结果是:

Mysql 第三章 高级查询内联的写法Mysql 第三章 高级查询直联的写法Mysql 第三章 高级查询三表联查

 

左外连接:

Mysql 第三章 高级查询

以左边的表为主,当右边表没数值时,会返回none

Mysql 第三章 高级查询

题目:

查询张三发布的所有出租房屋信息,并显示房屋分布的街道和区县

Mysql 第三章 高级查询连接查询​​Mysql 第三章 高级查询子查询

 

题目:根据户型和房屋所在区县和街道,为至少有两个街道有出租房屋的区县制作出租房屋清单

Mysql 第三章 高级查询

题目:按季度统计出本年各区县各街道各种户型房屋出租数量 输出2016年从1月1日起至今的全部出租房屋数量、各区县出租房屋数量及各街道、户型出租房屋数量

Mysql 第三章 高级查询

临时表  

注意:临时表只在当前连接可见,连接关闭自动删除,修改临时表数据不影响原表数据
语法:
CREATE TEMPORARY TABLE 表名(查询语句);