SQL从入门到放弃系列——SQL连接[九]

2019年7月3日17:35:54 发表评论 28
摘要

SQL标准主要有SQL92和SQL99两个。
SQL连接。

笛卡尔积

也叫交叉连接。CROSS JOIN。

等值连接

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

可以使用表的别名使SQL语句更简洁,但需要注意,一旦用别名,在查询中就只能使用别名代替,否则会报错。错误示范:

SELECT player_id, player.team_id, player_name, height, team_name FROM player AS a, team AS b  a, team as b WHERE a.team_id = b.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

外连接

左外连接

指左边的表是主表,需要显示左表的全部行,右表是从表,用(+)表示从表。

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 as a , player as b WHERE a.player_name = '布雷克 - 格里芬' and a.height < b.height

当然,不用自连接也可以,但是需要查询两次。

SELECT height FROM player WHERE player_name = '布雷克 - 格里芬'
SELECT player_name, height FROM player WHERE height > 2.08

合并起来SQL不简洁。

 

思考

三支球队的可能比赛组合。

就是笛卡尔积,去掉球队名相同的记录。

SELECT t1.team_name,t2.team_name FROM team as t1 LEFT JOIN team as t2 ON t1.team_id != t2.team_id

SELECT t1.team_name , t2.team_name FROM team as t1 ,team as t2 where t1.team_id<t2.team_id;

上面的为分主客场的SQL,下面的不分主客场。

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
  • A+
所属分类:SQL

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: