MySQL连接查询
左连接
左连接以tb_students_info为基表,以tb_course为参考表,进行查询时可以查询到基表tb_students_info和参考表tb_course匹配的条件,如果基表tb_students_info在参考表tb_course中没有匹配的行,那么在返回中参考表tb_course的字段均为null
select s.name, c.course_name
from tb_students_info s
LEFT JOIN tb_course c on s.course_id = c.id
| name | course_name |
|---|---|
| 林杨 | Java |
| 赵峰凯 | MySQL |
| 杨浩宇 | Java |
| 李俊飞 | Python |
| 赵虎 | MySQL |
| 王途峰 | Go |
| 李明 | NULL |
右连接
右连接以tb_students_info为参考表,以tb_course为基表,进行查询时可以查询到参考tb_students_info和基表tb_course匹配的条件,如果参考表tb_students_info在基表tb_course中没有匹配的行,那么在返回中基表tb_course的字段均为null
select s.name, c.course_name
from tb_students_info s
right join tb_course c on s.course_id = c.id
| name | course_name |
|---|---|
| 林杨 | Java |
| 赵峰凯 | MySQL |
| 杨浩宇 | Java |
| 李俊飞 | Python |
| 赵虎 | MySQL |
| 王途峰 | Go |
| NULL | HTML |
子查询
子查询是最常用的查询方法,通过子查询可以实现多表查询,子查询将一个查询语句嵌套再另一个查询语句中。子查询可以在SELECT、UPDATE、DELETE语句中使用,而且可以进行多层嵌套。在实际开发中经常出现在WHERE语句中。
使用子查询查询在tb_students_info表和tb_course表中查询学习Java课程的学生姓名。
select name
from tb_students_info
where course_id in (select id from tb_course where course_name = 'Java');
外层的SELECT查询为父查询,圆括号内SELECT查询为子查询。执行流程为:先进行子查询再进行父查询。
| name |
|---|
| 林杨 |
| 杨浩宇 |
这个查询条件分为两步执行,首先进行单独的查询,查询出tb_course表中课程为Java的id。
select id
from tb_course
where course_name = 'Java';
| id |
|---|
| 1 |
然后执行外层查询,在tb_students_info表中查询course_id等于1的学生姓名。
select name
from tb_students_info
where course_id in (1);
使用子查询来进行查询没有学习Java的学生。
select name
from tb_students_info
where course_id not in (select id from tb_course where course_name = 'Java');
| name | course_name |
|---|---|
| 赵峰凯 | MySQL |
| 李俊飞 | Python |
| 赵虎 | MySQL |
| 王途峰 | Go |
| 李明 | NULL |
使用=运算符来进行查询学习Java的学生,=运算符与in等效
select name
from tb_students_info
where course_id = (select id from tb_course where course_name = 'Java');

浙公网安备 33010602011771号