SQL中,表之间的左联和右联是什么意思

简介: SQL中,表之间的左联和右联是什么意思

首先来看张图片:


定义:


左联:首先取出A表中所有数据,然后再加上A、B表通过关联字段key查询到的数据


右联:首先取出B表中所有数据,然后再加上A、B表通过关联字段key查询到的数据


内联:查询A、B表通过关联字段key查询到的数据


非关联字段key的数据:当A表为主表时,在B表中该关联字段key为空值的数据为非关联字段



表关联是在SQL中非常常用的东西


join全连接:查找左表(主表)和右表(子表)都存在的数据


left join左联接:查找左表(主表)为查找全集,右表(子表)存在的关联出来,不存在的为NULL。


right join右连接:刚好和left join相反


full join全集关联:相当于把left join 和right join 综合起来,即左表(主表)和右表(子表)关联,如果能关联到的显示,如果左有右表没有,则右表显示NULL,如果右表有左表没有 则左表显示NULL


举个例子,你现在有两张表,学生表和成绩表


学生表中有两列数据:学生ID和学生姓名,成绩表中有三列数据,成绩ID、学生ID和总分数


假设学生表中有三行数据,ID为1,2,3,姓名分别为张三,李四,赵五


假设成绩表中也有三行数据:成绩ID为1,2,3,学生ID为 2,3,5,成绩为60,85,90


如果你写 select * from 学生表 a join 成绩表 b on a.学生ID=b.学生ID


会出现学生ID为2,3的两条数据


如果你写 select * from 学生表 a left join 成绩表 b on a.学生ID=b.学生ID


会出现学生ID为1,2,3的三条数据,但学生ID为1的那条数据关联到的成绩表信息全为NULL


如果你写 select * from 学生表 a  right join 成绩表 b on a.学生ID=b.学生ID


会出现学生ID为2,3,5的三条数据,但学生ID为5的那条数据关联到的学生表信息全为NULL


如果你写 select * from 学生表 a  full join 成绩表 b on a.学生ID=b.学生ID


会出现学生ID为1,2,3,5的全部数据,但学生ID为5的那条数据关联到的学生表信息全为NULL,学生ID为1的那条数据关联到的成绩表信息全为NULL


左联就是左表作为主表,左连接where只影向右表,右联与之相反。


select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID

左连接后的检索结果是显示tbl1的所有数据和tbl2中满足where 条件的数据。

简言之 Left Join影响到的是右边的表



1 .WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接)WHERE 和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是!比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。


一般要使得数据库查询语句性能好点遵循一下原则:

在做表与表的连接查询时,大表在前,小表在

不使用表别名,通过字段前缀区分不同表中的字段

查询条件中的限制条件要写在表连接条件前

尽量使用索引的字段做为查询条件


目录
相关文章
|
3月前
|
SQL
幂等修改表增加一列的sql语句
这个 SQL 查询用于修改名为 `t1` 的表,通过添加一个名为 `b` 的新列,并指定数据类型。`IF NOT EXISTS` 子句确保只有在表中不存在该列的情况下才会添加。 在你的查询中,`<数据类型>` 应该被替换为你想要的具体数据类型(例如,INT,VARCHAR等)。以下是使用 INT 数据类型的示例: ```sql ALTER TABLE t1 ADD COLUMN IF NOT EXISTS b INT; ``` 请根据你的需求选择合适的数据类型。这个查询的作用是在表 `t1` 中添加一个名为 `b` 的新列,如果该列尚不存在的话。
|
4月前
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day20】华泰证券真题实战(二)表转置
每天一道大厂SQL题【Day20】华泰证券真题实战(二)表转置
30 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
101 1
|
4月前
|
SQL Go 数据库
SQL Server创建及修改表实验报告(下)
SQL Server创建及修改表实验报告(上)
38 0
|
4月前
|
SQL 数据库 Python
SQL Server创建及修改表实验报告(上)
SQL Server创建及修改表实验报告
66 1
|
6月前
|
SQL 存储 关系型数据库
【MYSQL高级】Mysql 表的七种连接方式【附带练习sql】
【MYSQL高级】Mysql 表的七种连接方式【附带练习sql】
94 0
|
1月前
|
SQL
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
41 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】——用SQL语句实现数据库和基本表的创建
【MySQL】——用SQL语句实现数据库和基本表的创建
66 3
【MySQL】——用SQL语句实现数据库和基本表的创建
|
3月前
|
SQL Oracle 关系型数据库
SQL 的 with as 临时中间表
SQL 的 with as 临时中间表
40 1
|
3月前
|
SQL 数据库
SQL-修改表操作
SQL-修改表操作