上一篇博客主要讲的是select的单表查询,这边文章主要是讲select的多表查询,
在讲述多表查询之前,我将先展示MySQL表查询的加强。
一、MySQL表查询--加强
(1)、where子句,order by的使用
(2)、分页查询
基本语法:select.....(正常书写)limit start rows,表示从start+1行开始取,取出rows行,start从0开始计算。
推导公式:select*from emp
order by empno
limit 每页显示的记录数*(第几页-1),每页显示记录数
例题:按雇员的empno升序取出,,每页显示3条记录,分别显示
(3)、分组加强
(4)、应用案例
如果select语句同时包含有group by,having、limit,order by,那么他们的顺序是group by,having,order by,limit
统计各个部门 group by的平均工资avg。并且是大于1000的having,按照平均工资从高到低排序,order by,取出前两行记录limit
二、多表查询的引入
定义:多表查询是指基于两个和两个以上的表查询。在实际应用中,查询单个表可能无法满足我们的需求,需要使用多个表格。
默认的查找方式:select * from emp,dept;
在默认的情况下,当两个表查询时,规则
1.从第一张表中,取出一行和第二张表的每一行进行组合,返回结果。[含有两张表的所有列]
2.一共返回的记录数 第一张表行数*第二张表的行数
3.这样多表查询默认处理返回的结果,称为笛卡尔集。
4.解决这个多表的关键是要写出正确的过滤条件where,需要程序员自己分析。
5.多表查询的条件不能少于表的个数-1,否则就会出现笛卡尔集
三、自连接
概念:自连接是指在同一张表的连接查询
四、mysql表的子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。
子查询分为:单行子查询和多行子查询
(1)、单行子查询
单行子查询是指只返回一行数据的子查询语句
(2)、多行子查询
多行子查询是指返回多行数据的子查询,使用关键字in
下列 代码中:MySQL语句中等于用一个=表示,不等于用!=或者<>表示
(3)all和any的使用
例题:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
例题:显示工资比部门30的其中一个员工的工资高的员工的姓名、工资和部门
(4)多列子查询
多列子查询是指返回多个列数据的子查询语句