sql-92 标准: 仅支持内连接

sql-99 标准: 内连接+外连接(左外,右外,全外)+交叉连接

  • 内连接 A∩B
  • 左外连接 A∩B∪A A为主表
  • 右外连接 A∩B∪B B为主表
  • 全外连接 A∪B

内连接

等值连接

两张表意义一样的字段,以此建立等值连接

  • 两张表的交集
  • n表等值连接至少需要n-1个连接条件
  • n表顺序没有要求
  • 一般需要取别名
等值

简单使用

例: 查询用户对应的全部订单号 SELECT custom_name,buy_id FORM customs,buys WHERE customs.buy_id = buys.id

表取别名

  • 提高语句简洁度
  • 区分多个重名字段
  • 如果取别名则不可使用源表名

案例

例: 查询每个街道对应的区市省

SELECT p.name 省,ci.name 市,co.name 县,t.name 街道<br>FROM town t,country co,city ci,province p <br>WHERE t.country_id = co.country_id <br>AND co.city_id = ci.city_id <br>AND ci.province_id = p.province_id LIMIT 20;
image-20220915012218116
image-20220917173224113
image-20220917174310923
image-20220917174350065

非等值连接

和等值连接基本一致,条件非等而已,条件取一定关系

连接规则由等号以外的运算符组成。>,=,<,,>=,<=,<>,!=,between等

案例

image-20220917110058189
image-20220917110139950

自连接

类似等值连接,两表有同意字段可当一张表使用

案例

image-20220917110803764
image-20220917174956812
image-20220917110829339

外连接

用于查询主表中有 从表中没有的记录

select 查询列表 <br>from 表1 别名<br>[连接类型]<br>join 表2 别名<br>on 连接条件<br>[where筛选条件]<br>[group by. 分组]<br>[having筛选条件]<br>[order by排序列表]

左外连接

以左边的表为主,查询的数据包括左边表所有的数据以及左右表有交集的数据

还有左表不符合条件的记录,并在右表相应列中填NULL。

left [outer]可省

image-20220917235023941

右外连接

以右边的表为主,查询的数据包括右边表所有的数据以及左右表有交集的数据

还有右表不符合条件的记录,并在左表相应列中填NULL。

right [outer]可省

image-20220917235042346

全连接

AUB

查询出所有单身狗,单身女,和cp组

full [outer]可省

或者 union 左右 达到全外连接

(SELECT * FROM user1 t1) UNION (SELECT * FROM user1_copy t2); -- 注:union会对相同的结果进行去重<br>(SELECT * FROM user1 t1) UNION ALL (SELECT * FROM user1_copy t2); -- 注:union all则查询的是两边全部的数据,不会对数据进行去重

自连接

连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,成为表的自身连接,也就是所谓的自连接。

自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候,是自己和自己连接,分别给父表和子表取两个不同的别名,然后附上连接条件。

实例

image-20220917235628971

普通查询

SELECT a.*,b.name<br>FROM SUBJECT a , SUBJECT b<br>WHERE a.`pno`=b.`cno`;
image-20220917235859586

显然没有先行课的被忽略掉了,因此我们可以用左关联结合自连接来查询,便于观察。

自查询

SELECT a.*,b.name<br>FROM SUBJECT a LEFT JOIN SUBJECT b<br>ON a.`pno`=b.`cno`;
image-20220918000033802

交叉连接

就是用99标准的语法实现的笛卡尔乘积

cross

SELECT b.* ,bo.*
FROM beauty b
CROSS JOIN boys bo
ON bo.id=b.boyfriend_id;
© 版权声明
箴言区 抢沙发
头像
达瓦里希请发言...
提交
头像

昵称

取消
昵称表情代码图片