MySQL的多表查询分两种:
- 连表查询
- 内连接查询
- 左连接查询
- 右连接查询
- 全连接查询
- 子查询
子查询就是把一个表查询出来的数据当做另外一个查询条件
例子:
现在创建两个表,员工表和部门表
CREATE TABLE emp(id int PRIMARY KEY AUTO_INCREMENT, name VARCHAR(16) NOT NULL, dep_id int)ENGINE = INNODB DEFAULT CHARSET='UTF8'; CREATE TABLE dep(id INT PRIMARY KEY AUTO_INCREMENT , name VARCHAR(32))ENGINE = INNODB DEFAULT CHARSET ='UTF8';
插入数据:
insert into emp(name,dep_id) values('张三',300),('李四’,301); insert into dep(id,name) values(300,'人力部’),(301,'技术部');
题目:查询平均年龄在30岁以上的部门名称
按照连表查询:
SELECT dep.name from emp inner join dep on dep.id =emp.dep_id group by dep.name having avg)>30;
按照子查询:
1.先查询部门名称 SELECT dep.name from dep ; 2.再查询员工的平均年龄的dep_id; select emp.dep_id from emp group by dep_id having avg)>30; 3.再筛选部门名称中的id与员工的dep_id一致 SELECT dep.name from dep where id in (select emp.dep_id from emp group by dep_id having avg)>30);