第18章 SQL 连接(JOIN)教程

SQL 连接(JOIN)


SQL join 用于把来自两个或多个表的行结合起来。

展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。


SQL JOIN

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中return 满足 JOIN 条件的所有行。

语法:


    SELECT column1, column2, ...
    FROM table1
    JOIN table2 ON condition;

参数说明:

  • column1, column2, …:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • table1:要连接的第一个表。
  • table2:要连接的第二个表。
  • condition:连接条件,用于指定连接方式。

演示database

在本教程中,咱们将使用 liulianjiangcsdn 样本database。

下面是选自 “Websites” 表的数据:


    +----+--------------+---------------------------+-------+---------+
    | id | name         | url                       | alexa | country |
    +----+--------------+---------------------------+-------+---------+
    | 1  | Google       | https://www.google.cm/    | 1     | USA     |
    | 2  | 淘宝          | https://www.taobao.net/   | 13    | CN      |
    | 3  | liulianjiangcsdn教程      | http://blog.csdn.net/qq441540598/    | 4689  | CN      |
    | 4  | 微博          | http://weibo.net/         | 20    | CN      |
    | 5  | Facebook     | https://www.facebook.net/ | 3     | USA     |
    | 7  | stackoverflow | http://stackoverflow.net/ |   0 | IND     |
    +----+---------------+---------------------------+-------+---------+

下面是 “access_log” 网站访问记录表的数据:


    mysql> SELECT * FROM access_log;
    +-----+---------+-------+------------+
    | aid | site_id | count | date       |
    +-----+---------+-------+------------+
    |   1 |       1 |    45 | 2023-05-10 |
    |   2 |       3 |   100 | 2023-05-13 |
    |   3 |       1 |   230 | 2023-05-14 |
    |   4 |       2 |    10 | 2023-05-14 |
    |   5 |       5 |   205 | 2023-05-14 |
    |   6 |       4 |    13 | 2023-05-15 |
    |   7 |       3 |   220 | 2023-05-15 |
    |   8 |       5 |   545 | 2023-05-16 |
    |   9 |       3 |   201 | 2023-05-17 |
    +-----+---------+-------+------------+
    9 rows in set (0.00 sec)

请注意,“Websites” 表中的 “id” 列指向 “access_log” 表中的字段 “site_id”。上面这两个表是通过 “site_id” 列联系起来的。

然后,如果咱们运行下面的 SQL 语句(包含 INNER JOIN):


    实例
     
    	SELECT Websites.id, Websites.name, access_log.count, access_log.date  FROM  Websites INNER JOIN access_log   ON Websites.id=access_log.site_id;
    
     执行以上 SQL 输出结果请在输出结果查看
+----+------------------+-------+------------+
| id | name             | count | date       |
+----+------------------+-------+------------+
|  1 | Google           |    45 | 2023-05-10 |
|  3 | liulianjiang教程 |   100 | 2023-05-13 |
|  1 | Google           |   230 | 2023-05-14 |
|  2 | 淘宝             |    10 | 2023-05-14 |
|  5 | Facebook         |   205 | 2023-05-14 |
|  4 | 微博             |    13 | 2023-05-15 |
|  3 | liulianjiang教程 |   220 | 2023-05-15 |
|  5 | Facebook         |   545 | 2023-05-16 |
|  3 | liulianjiang教程 |   201 | 2023-05-17 |
+----+------------------+-------+------------+


不同的 SQL JOIN

在咱们继续讲解实例之前,咱们先列出陛下可以使用的不同的 SQL JOIN 类型:

  • INNER JOIN:如果表中有至少一个匹配,则return 行
  • LEFT JOIN:即使右表中没有匹配,也从左表return 所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表return 所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则return 行

本专栏所有文章

第1章 SQL 教程第2章 SQL 简介教程
第3章 SQL 语法教程第4章 SQL SELECT教程
第5章 SQL SELECT DISTINCT教程第6章 SQL WHERE教程
第7章 SQL AND & OR教程第8章 SQL ORDER BY教程
第9章 SQL INSERT INTO教程第10章 SQL UPDATE教程
第11章 SQL DELETE教程第12章 SQL SELECT TOP教程
第13章 SQL LIKE教程第14章 SQL 通配符教程
第15章 SQL IN教程第16章 SQL BETWEEN教程
第17章 SQL 别名教程第18章 SQL 连接(JOIN)教程
第19章 SQL INNER JOIN教程第20章 SQL LEFT JOIN教程
第21章 SQL RIGHT JOIN教程第22章 SQL FULL JOIN教程
第23章 SQL UNION教程第24章 SQL SELECT INTO教程
第25章 SQL INSERT INTO SELECT教程第26章 SQL CREATE DATABASE教程
第27章 SQL CREATE TABLE教程第28章 SQL 约束教程
第29章 SQL NOT NULL教程第30章 SQL UNIQUE教程
第31章 SQL PRIMARY KEY教程第32章 SQL FOREIGN KEY教程
第33章 SQL CHECK教程第34章 SQL DEFAULT教程
第35章 SQL CREATE INDEX教程第36章 SQL DROP教程
第37章 SQL ALTER教程第38章 SQL Auto Increment教程
第39章 SQL 视图教程第40章 SQL 日期教程
第41章 SQL NULL 值教程第42章 SQL NULL 函数教程
第43章 SQL 通用数据类型教程第44章 SQL DB 数据类型教程
第45章 SQL 函数教程第46章 SQL AVG()教程
第47章 SQL COUNT()教程第48章 SQL FIRST()教程
第49章 SQL LAST()教程第50章 SQL MAX()教程
第51章 SQL MIN()教程第52章 SQL SUM()教程
第53章 SQL GROUP BY教程第54章 SQL HAVING教程
第55章 SQL EXISTS教程第56章 SQL UCASE()教程
第57章 SQL LCASE()教程第58章 SQL MID()教程
第59章 SQL LEN()教程第60章 SQL ROUND()教程
第61章 SQL NOW()教程第62章 SQL FORMAT()教程
第63章 SQL 快速参考教程第64章 SQL 主机教程
第65章 SQL 总结教程

寄语

本文有榴莲酱CSDN原创,欢迎点赞、转载,博客地址:https://blog.csdn.net/qq441540598

  • 我们从未见过,可当我第一眼见你的时候,却觉得已经等了好久。
  • 原来青春是一本太仓促的书,还来不及给他画上一个完美的句号,就这么悄无声息的结束了。因为不完美,所以总是会遗憾,然后纠结,久久不能释怀。早安,新的一天。
  • 知识是一匹无私的骏马,谁能驾驭它,它就属于谁。这是最后的冲刺了。努力吧,胜利将由最有耐力的人获得。
  • 应当耐心听取他人的意见,认真考虑指责你的人是否有理。如果他有理,你就修正自己的错误,如果他理亏,只当没听见。若他是一个你所敬重的人,那么可以通过讨论,提出他不正确的地方。一达·芬奇
  • 爱一个人,也许有绵长的痛苦,但他给的快乐,也是世界上最大的快乐。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榴莲酱csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值