一、目标
1、掌握SQL多表连接查询
2、掌握SQL子查询操作
二、知识点
1、多表连接查询
种类:
1、内连接查询
关键字:inner join ... on 查询条件
作用:用于在数据库中将多个表通过主外键关联在一起,实现多个
表的数据查询.
原理:通过主键去关联外键数据,在外键表中所存在数据才能通过
内连接查询获取。
SELECT * FROM student;
SELECT * FROM score;
/*查询出参加考试的学员信息包括成绩*/
SELECT * FROM student INNER JOIN score ON student.`STU_ID`=score.`u_id`
/*数据库性能优化*/
SELECT * FROM student s,score sc WHERE s.stu_id=sc.`u_id`
2、外连接查询
种类:左外连接、右外连接查询
关键字: left join 、right join
作用:在查询中将查询的关系通过外链接实现主次的区分从而获得查询的
数据.
/*获取所有学员的所有信息*/
SELECT * FROM student LEFT JOIN score ON student.`STU_ID`=score.`u_id`
SELECT * FROM student RIGHT JOIN score ON student.`STU_ID`=score.`u_id`
SELECT s.stu_id,s.stu_name,s.stu_age,s.stu_sex,sc.`c_id`,sc.`c_score`
FROM student s LEFT JOIN score sc ON s.`STU_ID`=sc.`u_id`
/*获取市场部员工信息*/
SELECT * FROM emp e,dept d WHERE e.dept_no=d.dept_no AND d.dept_name='市场部'
3、子查询
作用:实现查询的嵌套,将查询条件以普通查询获取。
种类:
1、普通子查询
要求:
1、查询返回的字段不能操作一个
2、查询返回的记录不能操作一条
2、in子查询
在子查询可以返回多条记录,通过匹配的方式获取子查询结果
/*获取市场部员工信息 普通子查询*/
SELECT * FROM emp WHERE
emp.`dept_no`=(SELECT dept_no FROM dept WHERE dept.`dept_name`='市场部')
SELECT * FROM emp e,(SELECT dept_no FROM dept WHERE dept.`dept_name`='市场部') dp
WHERE dp.dept_no=e.dept_no;
SELECT * FROM emp e,(SELECT * FROM dept) dp
/*查询返回的字段不能操作一个*/
SELECT * FROM emp WHERE
emp.`dept_no`=(SELECT * FROM dept WHERE dept.`dept_name`='市场部')
/*查询返回的记录不能操作一条*/
SELECT * FROM emp WHERE
emp.`dept_no`=(SELECT dept_no FROM dept)
/*in子查询*/
SELECT * FROM emp e WHERE e.`dept_no` IN(SELECT dept_no FROM dept)
/*查询平均薪资最低的部门的员工信息*/
SELECT * FROM emp e,(
SELECT dept_no ,MIN(s) FROM (
SELECT dept_no,MIN(sal) s FROM
(SELECT dept_no,AVG(emp_sal) sal FROM emp GROUP BY dept_no) dp
GROUP BY sal
)depts
)d WHERE e.`dept_no`=d.dept_no;