一.交叉连接
select * from 表1,表2;
在实际运用中没有任何意义,只做了解即可
二.内链接
内连接使用比较运算符对两个表中的数据进行比较并列出与连接条件匹配的数据行,组合成新的 记录。也就是说在内连接查询中只有满足条件的记录才能出现在查询结果中。
语法格式:
select * from 表1,表2 where 表1.字段 = 表2.字段;
查询学生所在班级 MySQL命令格式:
select * from students,classes where students.classID = classes.classID;
三.外链接
在使用内连接查询时我们发现:返回的结果只包含符合查询条件和连接条件的数据。但是,有时还需要在返回查询结果中不仅包含符合条件的数据,而且还包括左表、右表或两个表中的所有数据,此时我们就需要使用外连接查询。外连接又分为左(外)连接和右(外)连接。
MySQL 语法格式:
select * from 表1 left join 表2 on 条件;
LEFT JOIN 左(外)连接:返回包括左表中的所有记录和右表中符合连接条件的记录。
RIGHT JOIN 右(外)连接:返回包括右表中的所有记录和左表中符合连接条件的记录。
关键字左边的表被称为左表,关键字右边的表被称为右表.
1.左(外)链接
左外连接的结果包括 left join 句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在则在右表中显示为null。
查看班级下所有学生的老师姓名 MySQL命令:
select * from students left join teachers on students.teacherid = teachers.tid;
2.右(外)链接
右外连接的结果包括 right join子句中指定的右表的所有记录,以及所有满足连接条件的记录。如果右表的某条记录在左表中没有匹配,则左表将返回null。
查看每个学生的姓名和班级名 MySQL命令:
select * from students right join classes on students.classid = classes.classid;
四、子查询
子查询是指一个查询语句嵌套在另一个查询语句内部的查询;该查询语句可以嵌套在一个 SELECT、SELECT…INTO、INSERT…INTO等语句中。在执行查询时,首先会执行子查询中的语句,再将返回的结果作为外层查询的过滤条件。
MySQL语法格式:
select 字段 from 表名 where 字段=(select classid from students where name = Sun dasheng)
查询所有年龄小于平均年龄的学生的语句:
select * from students where age<(select avg(age) from students);
执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,不推荐使用子查询。