首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关联查询

概述

我们首先回顾一下外键的概念:

在表中使用一个列保存关联表的唯一约束列(主键)的值,一方面减少数据冗余,另一方面让数据库更好维护。

外键表示的是数据之间的关系,而关联查询就是把这种关系作为条件,同时查询多个表,然后返回多个表中有“关系”的数据。

基础关联

这种方式就是把关联字段作为条件放在 where 子句里面,即:

select * from 表1 a, 表2 b where a.xx = b.xx

以用户表和角色表为例,在查询出用户信息的同时,也需要查询每个用户的角色,就可以这样写:

select

a.id 编号,

a.username 用户名,

a.password 密码,

a.create_time 创建时间,

a.role_id 用户角色编号,

b.role_name 用户角色

from t_user a, t_role b where

a.role_id = b.id

order by a.create_time

只有用户表的 字段和角色表的id字段相等的数据才可以被查询出来,以下两点:

1) 当某个用户的 字段为 时,这样的数据不会出现

2) 当某个角色没有被用户表使用时,这样的数据不会出现

所以在查询出的结果集里面没有出现用户名为 “admin21”、“admin30” 和角色名为 “角色管理员” 的数据。

但是有时候我们还是需要把用户名为 “admin21”、“admin30” 的数据也查找出来。在介绍 时会解决这个问题。

inner join

即内连接,其中 关键字可以省略

这种关联语法与上面的“基础关联”效果一样,即只有在关联字段的值存在且可以关联出数据时,数据才会出现在结果集中

select * from t_user a join t_role b on a.role_id = b.id;

/* 或者使用下面的方式

select * from t_user a inner join t_role b on a.role_id = b.id;

*/

如上图,还是没有出现用户名为 “admin21”、“admin30” 和角色名为 “角色管理员” 的数据。

outer join

即外连接,分为左外连接( 或 )和右外连接( 或 )。

左外连接查询出来的数据会包含“左表”的全部数据,不论关联字段是否有值、是否能够关联出“右表”的数据。

右外连接同理。

以上面的例子,有时候我们还需要把用户名为 “admin21”、“admin30” 的数据也查找出来,这样的需求使用前面两种方式就不好实现了。

此时我们可以使用左外连接( )来查询。即用户表的数据会全部查询出来,当关联字段的值为 时,角色表的全部字段会使用 来填充。

select * from t_user a left join t_role b on a.role_id = b.id;

/* 或者使用下面的方式

select * from t_user a left outer join t_role b on a.role_id = b.id;

*/

如上图,查询出了 “admin21”、“admin30” 的数据。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180407G0IE2A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券