SQL连接标准 SQL92\SQL99

内容:

1. 了解常用的SQL标准. SQL存在不同的标准, 不同标准下的连接定义不同.

2. SQL92 标准

3. 跨表连接


常见的SQL标准

SQL92:

形式简单, 语句较长, 可读性较差. 

笛卡尔积

所有可能组合. 

假定 player 表的数据是集合X,  SELECT * FROM player

假定 team 表的数据是集合Y,  SELECT * FROM team

SELECT * FROM player, team

等值连接 

用两张表中都存在的列进行连接

SELECT player_id, player.team_id, player_name, height, team_name FROM player, team 

WHERE player.team_id = team.team_id;

非等值连接 

除等号的其他运算符连接就是非等值查询

SELECT p.player_name, p.height, h.height_level

FROM player AS p, height_grades AS h

WHERE p.height BETWEEN h.height_lowest AND h.height_highest;

外连接(左连接, 外连接) 

可以查询某一方不满足条件的记录. 如果是多张表的外连接, 那么第一张表是主表, 即显示全部的行, 剩下的表显示对应连接的信息. SQL92中采用(+)代表从表所在位置.

左连接就是指左边的表为主表

SELECT * FROM player, team WHERE player.team_id = team.team_id(+);

在SQL99中:

SELECT * FROM player LEFT JOIN team ON player.team_id = team.team_id;

右连接:

SELECT  *  FROM player, team WHERE player.team_id(+) = team.team_id;

在SQL99中:

SELECT * FROM player RIGHT JOIN team ON player.team_id = team.team_id;

自连接

可以对多个表进行操作, 也可以对同一个表进行操作. 

SELECT b.player_name, b.height FROM player a, player b 

WHERE a.player_name = '布雷克-格里芬' AND b.height > a.height;


SQL99: 

语法更为复杂, 可读性强

交叉连接  cross join

select * from player cross join team;

select * from t1 cross join t2 cross join t3;

自然连接 natural join

SELECT player_id, team_id, player_name, height, team_name 

FROM player NATURAL JOIN team;

ON 连接

SELECT player_id, team_id, player_name, height, team_name 

FROM player JOIN team ON player.team_id = team.team_id;  ## 等值连接

SELECT p.player_name, p.height, h.height_level 

FROM player as p  JOIN height_grades as h 

ON height BETWEEN h.height_lowest AND h.height_highest;  ## 非等值连接

USING 连接

制定数据表里同名字段进行等值连接, 指定了具体的相同的字段名称

SELECT player_id, team_id, player_name, height, team_name

FROM player JOIN team USING(team_id);

外连接

左外连接 left join

右外连接 right join

全外连接 full join



SQL99 和SQL92的区别

SQL92查询中, 把所有需要连接的表放在FROM后, 在WHERE中写明连接的条件.

SQL99更灵活, 不需要一次性把所有需要连接的表放在from后, 而是采用JOIN方式, 每次连接一张表, 可以多次使用join进行连接.

建议多表连接使用SQL99标准, 可读性强.

SELECT ...

FROM table1

    JOIN table2 ON table1 和 table2 的连接条件

            JOIN table3 ON table2 和 table3 的连接条件


连接的性能问题:

1. 控制连接表的数量

2. 在连接时不要忘记 WHERE 语句

3. 使用自连接而不是子查询

极客: SQL必知必会10,11整理

你可能感兴趣的:(SQL连接标准 SQL92\SQL99)