美文网首页
MySQL必知必会 15-16 创建联结(连接查询)

MySQL必知必会 15-16 创建联结(连接查询)

作者: 废柴社 | 来源:发表于2018-01-20 20:17 被阅读31次

这部分内容给的比较基础,以下总结参考部分网络内容。

  • SQL 最强大的功能之一就是在数据检索查询的执行中联结(JOIN),在使用联结前,需要简单了解下关系表概念。

1 关系型数据库

简单来说,为了避免数据冗余,一个表中只会去放同一个“性质”的数据,不同性质的数据由二者之间的关系来维护——比如说货品供应相关的数据,会有产品信息、供应商信息,这两部分信息是可以放在一起的,但就会出现重复的情况:一家供应商会供应多个产品,于是供应商信息在表里就会有多个位置出现,对于存储、维护(供应商信息更新等)会带来压力。

在这个案例中,可以将供应商ID作为供应商表的主键,同时将供应商ID作为产品信息表中的一列(称之为外键),该ID定义了两个表之间的关系。

2 使用联结

联结查询可以替代子查询。
需要指定联结条件,否则可能返回按所查询表的行数*行数对应的笛卡尔积。

sql Joins.jpg

以上联结中,内、左、右、全联结是四种最常见用法。

2.1 内联接 Inner Join

一般多表查询时使用where达成内联结的效果(输出:在两边表中均出现的):

select a.TradeNick,a.rank,b.Age_Guess_DOWN,b.Age_Guess_UP
from table_a as a,table_b as b
where a.TradeNick = b.TradeNick

标准的内联结写法:

select a.TradeNick,a.rank,b.Age_Guess_DOWN,b.Age_Guess_UP
from table_a as a INNER JOIN table_b as b
on a.TradeNick = b.TradeNick

此处需要用On,与where子句语法相同。

2.2 左联接 Left Join

select distinct(a.TradeNick) as a_nick, a.rank,b.Age_Guess_DOWN,b.Age_Guess_UP
from table_a as a LEFT JOIN table_b as b
on a.TradeNick = b.TradeNick

2.3 右联接 right Join

语法上都是一致的,重点是所期望获得的结果,参见文氏图。
另外测试,right join 与 right outer join 是同样效果。

select distinct(a.TradeNick) as a_nick, a.rank,b.Age_Guess_DOWN,b.Age_Guess_UP
from table_a as a RIGHT JOIN table_b as b
on a.TradeNick = b.TradeNick

2.4 全联接 Full outer Join

MySQL 好像不支持全联接,需要用替代方案(测试用的不支持)

替代方案:
先创建所有连接条件的并集,然后其他表都和这个并集进行左连接,即可得出全连接。

  • left join + union(可去除重复数据)+ right join
  • 两张表时:
    select * from A left join B on A.id = B.id (where 条件)
    union
    select *from A right join B on A.id = B.id (where条件);

参考资料

相关文章

  • MySQL必知必会 15-16 创建联结(连接查询)

    这部分内容给的比较基础,以下总结参考部分网络内容。 SQL 最强大的功能之一就是在数据检索查询的执行中联结(JOI...

  • 03随风而逝

    写写今天学到的知识, 简单,少。 《mysql必知必会》:有 子查询,联结表,高级联结,组合查询,插入数据,更新和...

  • MySQL必知必会系列二

    读完MySQL必知必会系列一,我们可以进一步了解MySQL中的数据处理函数,分组查询,联结表,以及组合查询的相关内...

  • MySql 创建和操纵表

    创建表 更新表 参考书籍: MySQL必知必会

  • 高性能 SQL 计划 Day 3

    今天继续来学 SQL,主要是《MySQL必知必会》15-18章的内容。 Ch 15.联结表 1.联结 SQL 最强...

  • MySQL练手小计

    Mysql 必知必会 查询 检索多个列SELECT prod_id, prod_name, prod_pri...

  • SQL 学习笔记

    SQL基础 参考书籍: 《SQL必知必会》 检索数据 过滤数据 函数 分组数据 子查询 简单联结 法一: 法二: ...

  • 【MySQL必知必会】学习笔记Day8

    【MySQL必知必会】学习笔记Day8&1.31&D17章&P113-118页 15、组合查询 (1)组合查询 有...

  • 数据库学习笔记——17创建和操纵表

    从这节课开始,主要结合《MySQL必知必会》学习 1 创建表 1.1 表创建基础 为利用 CREATE TABLE...

  • SQL必知必会学习笔记3

    SQL必知必会学习笔记3 十三、创建高级联结 1.使用表别名 警告: Oracle中没有AS,直接指定Custom...

网友评论

      本文标题:MySQL必知必会 15-16 创建联结(连接查询)

      本文链接:https://www.haomeiwen.com/subject/dkitaxtx.html