MySql的复杂查询
一、连接查询
1.1、CROSS JOIN(交叉连接)
交叉连接也叫笛卡尔乘积。wikipedia 对笛卡尔乘积的定义如下:
在数学中,两个集合 X 和 Y 的笛卡儿积(英语:Cartesian product),又称直积,在集合论中表示为 X x Y ,是所有可能的有序对组成的集合,其中有序对的第一个对象是 X 的成员,第二个对象是 Y 的成员。
SELECT * FROM player; # 见图一
SELECT * FROM team; # 见图二
SELECT * FROM player CROSS JOIN team; # 见图三
1.2、等值连接
等值连接就是对多张表中相同的字段进行等值判断。
1.2.1、NATURAL JOIN(自然连接)
会自动帮你查询两张连接表中所有相同的字段(比如两张表中相同的数据项) ,然后进行等值连接。
SELECT * FROM player NATURAL JOIN team;
1.2.2、USING 连接
当然我们还可以用 USING 来指定用哪些同名字段进行等值连接。
SELECT * FROM player JOIN team USING(team_id);
1.2.3、ON 连接
ON 表示我们想要连接的条件,我们也可以用 ON 来实现等值连接。
SELECT player_id, player.team_id, player_name, height, team_name
FROM player JOIN team ON player.team_id = team.team_id;
1.3、非等值连接
连接两张表的条件如果是相等判断,那就是等值连接,否则就是非等值连接。
-- 我们想查询每个球员的身高级别。
SELECT player_name,height,height_level
from player JOI