SQL语法(2高级入门之表关联)

多表关联的话表之间必须得存在关系才行,需要建立 外键 约束:关系表中插入主表的主键做外键。

案列分析:

需求:有用户表SYS_User和角色表SYS_Role,则建一个把用户与角色关联起来的关系表我们称之为用户角色表SYS_UserRole

那么我们就可以用以下语句查询每个用户分别具备哪些角色了

select a.login_id_,a.user_name_,a.country_,b.role_id_,c.name_,c.description_
from [dbo].[SYS_User] a
left join [dbo].[SYS_UserRole] b 
on a.id_=b.user_id_
inner join [dbo].[SYS_Role] c
on b.role_id_=c.id_

表关联一些基础语法

  • INNER JOIN 关键字

--在表中存在至少一个匹配时返回行。

--INNER JOIN 与 JOIN 是相同的。
SELECT column_name(s)

FROM table1

INNER JOIN table2

ON table1.column_name=table2.column_name;

 SQL INNER JOIN

  • LEFT JOIN 关键字

从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

--在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。--
SELECT column_name(s)

FROM table1

LEFT JOIN table2

ON table1.column_name=table2.column_name;

SQL LEFT JOIN 

  • RIGHT JOIN 关键字

从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

-- 在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。

SELECT column_name(s)

FROM table1

RIGHT JOIN table2

ON table1.column_name=table2.column_name;

SQL RIGHT JOIN 

总结:

A inner join B 取交集。

A left join B 取 A 全部,B 没有对应的值为 null。

A right join B 取 B 全部, A 没有对应的值为 null。

A full outer join B 取并集,彼此没有对应的值为 null。

对应条件在 on 后面填写。

on 与  where区别

在使用 left jion 时,on 和 where 条件的区别如下:

  • 1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
  • 2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

由于left join、right join、full join 的特殊性,不管 on 上的条件是否为真都会返回 left 或 right 表中的记录,full 则具有 left 和 right 的特性的并集。

而 inner jion 没这个特殊性,则条件放在 on 中和 where 中,返回的结果集是相同的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值