介绍一下mysql中查询的重中之重,连接查询
创建student和teacher表,表中数据如下:
student | |
teacher | |
交叉连接查询
查询结果是连接的几个表中满足条件的相关联的数据的交集
sql | SELECT s.id sid, s.name sname , t.id tid ,t.name tname FROM student s ,(或者将逗号去掉使用CROSS JOIN) teacher t WHERE s.name = t.name |
结果 | |
内连接查询
将连接的几个表中满足条件的数据的交集查询出来,同上
sql | SELECT s.id sid, s.name sname , t.id tid ,t.name tname FROM student s INNER JOIN teacher t ON s.name = t.name |
结果 | |
左外连接查询
将连接的左表中满足条件(where后边的数据)的全部数据和右表中满足连接条件(on后边的条件)的数据查询出来,如果在右表中没有满足连接条件的数据则以NULL值代替,右连接同理
sql | SELECT s.id sid, s.name sname , t.id tid ,t.name tname FROM student s LEFT JOIN teacher t ON s.name = t.name |
结果 | |
右外连接查询
sql | SELECT s.id sid, s.name sname , t.id tid ,t.name tname FROM student s RIGHT JOIN teacher t ON s.name = t.name |
结果 | |
分析
由于未进行任何优化处理,使用explain来分析以上sql时,结果如下:
使用连接查询时,一定要注意连接条件一定要添加,不然容易造成大量冗余数据出现