MySQL JOIN 多表连接
除了常用的两个表连接之外,SQL(MySQL) JOIN 语法还支持多表连接。多表连接基本语法如下:
1 |
... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition INNER|LEFT|RIGHTJOIN table3 ON condition ... |
JOIN 多表连接实现了从多个表中获取相关数据,下面是三个原始数据表:
| aid | title | content | uid | tid |
|---|---|---|---|---|
| 1 | 文章1 | 文章1正文内容… | 1 | 1 |
| 2 | 文章2 | 文章2正文内容… | 1 | 2 |
| 3 | 文章3 | 文章3正文内容… | 2 | 1 |
| 5 | 文章5 | 文章5正文内容… | 4 | 1 |
| uid | username | |
|---|---|---|
| 1 | admin | admin@5idev.com |
| 2 | 小明 | xiao@163.com |
| 3 | Jack | jack@gmail.com |
| tid | typename |
|---|---|
| 1 | 普通文章 |
| 2 | 精华文章 |
| 3 | 草稿 |
MySQL INNER JOIN 多表
我们使用 INNER JOIN 列出三个表中都具有关联关系的数据:
1 |
SELECT article.aid,article.title,user.username,type.typename FROM articleINNER JOIN user |
2 |
ON article.uid=user.uid INNER JOIN type ON article.tid=type.tid |
返回查询结果如下:
| aid | title | username | typename |
|---|---|---|---|
| 1 | 文章1 | admin | 普通文章 |
| 2 | 文章2 | admin | 精华文章 |
| 3 | 文章3 | 小明 | 普通文章 |
MySQL LEFT JOIN 多表
使用 LEFT JOIN 三个表查询:
1 |
SELECT article.aid,article.title,user.username,type.typename FROM articleLEFT JOIN user |
2 |
ON article.uid=user.uid LEFT JOIN type ON article.tid=type.tid |
返回查询结果如下:
| aid | title | username | typename |
|---|---|---|---|
| 1 | 文章1 | admin | 普通文章 |
| 2 | 文章2 | admin | 精华文章 |
| 3 | 文章3 | 小明 | 普通文章 |
| 4 | 文章4 | NULL | 普通文章 |
MySQL RIGHT JOIN 多表
使用 RIGHT JOIN 三个表查询:
1 |
SELECT article.aid,article.title,user.username,type.typename FROM articleRIGHT JOIN user |
2 |
ON article.uid=user.uid RIGHT JOIN type ON article.tid=type.tid |
返回查询结果如下:
| aid | title | username | typename |
|---|---|---|---|
| 1 | 文章1 | admin | 普通文章 |
| 2 | 文章2 | admin | 精华文章 |
| 3 | 文章3 | 小明 | 普通文章 |
| NULL | NULL | NULL | 草稿 |
可见,在 RIGHT JOIN 右连接中,只是列出最后一个右连接表的所有数据。
说明
对于 MySQL 多表 JOIN,还可以 INNER、LEFT 和 RIGHT 混用,其返回结果与各关键字顺序有关,感兴趣可自行测试。
MySQL JOIN 多表连接的更多相关文章
- join多表连接和group by分组
join多表连接和group by分组 上一篇里面我们实现了单表查询和top N查询,这一篇我们来讲述如何实现多表连接和group by分组. 一.多表连接 多表连接的时间是数据库一个非常耗时的操作, ...
- MySql left join 多表连接查询优化语句
先过滤条件然后再根据表连接 同时在表中建立相关查询字段的索引这样在大数据多表联合查询的情况下速度相当快 创建索引: create index ix_register_year ON dbo.selec ...
- python实现简易数据库之三——join多表连接和group by分组
上一篇里面我们实现了单表查询和top N查询,这一篇我们来讲述如何实现多表连接和group by分组. 一.多表连接 多表连接的时间是数据库一个非常耗时的操作,因为连接的时间复杂度是M*N(M,N是要 ...
- MySQL 约束、表连接、表关联、索引
一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性. 外键:是另一表的唯一性 ...
- mysql 三个表连接查询
权限表(permission)10 字段名称 类型 约束 描述 authorityid integer Pk not null 权限流水号id PK userNameId int not nul ...
- c# DataTable join 两表连接
转:https://www.cnblogs.com/xuxiaona/p/4000344.html JlrInfodt和dtsource是两个datatable,通过[姓名]和[lqry]进行关联 v ...
- 表连接sql执行计划学习
循环嵌套连接(Nested Loop Join) 合并连接(Merge Join) 哈西匹配(Hash Join) 文章:浅谈SQL Server中的三种物理连接操作 循环嵌套,如果内循环列上有索引, ...
- mysql join表连接
1.表连接,就是将两个表合并起来,被合并的表的记录要通过中间字段,一一匹配起来左边的表的记录,形成一张临时的合并的表,并且每条记录的值都是两张表一一准确对应的 实例 尝试以下实例: root@host ...
- Mysql 多表连接查询 inner join 和 outer join 的使用
JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. 首先先列举本篇用到的分类(内连接,外连接,交 ...
随机推荐
- linux 软连接的使用
软连接是linux中一个常用命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接. 具体用法是:ln -s 源文件 目标文件. 当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需 ...
- python 正则表达式 re.split
内置函数split与re库中的split,有很多相似处 #!use/bin/python #coding:utf-8 import re str= "https://i.cnb1logs.c ...
- 工具 - VNC
安装 ubuntu下vnc客户端的安装命令sudo apt-get install xtightvncviewer 重置密码 cd /root/.vnc/ rm -rf passwd vncserve ...
- 一些基础的ES6 语法
<script> window.onload = function () { //---------------------------let----------------------- ...
- python+selenium下拉列表option对象操作方法一
参考官方文档:https://selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.select ...
- JAVA的学习
怎么说呢,我已经接触JAVA已经两周了,个人感觉还是不懂,哈哈,JAVA是一门编程语言,是大多数开发者较为习惯的编程模式,我感觉相对比C语言来说可能简单学点,可能是我先接触C语言把,或许因人而异把,在 ...
- Vue 基础 day06 webpack 3.x 结合vue
在普通页面使用 render 函数渲染组件 var login = { template: '<h3>login</h3>' } var vm = new Vue({ // c ...
- 20171110面试笔记 服务器端程序员+C/C++开发
socket 模型: https://www.cnblogs.com/nsnow/archive/2011/05/03/2036017.html http://blog.csdn.net/normal ...
- Log4j指定输出日志的文件
在Log4j的配置文件中,有一个log4j.rootLogger用于指定将何种等级的信息输出到哪些文件中, 这一项的配置情况如下: log4j.rootLogger=日志等级,输出目的地1,输出目的地 ...
- e.target与e.currentTarget的区别,事件冒泡与事件捕获 ,事件委托
e.target与e.currentTarget的区别:https://www.jianshu.com/p/1dd668ccc97a 事件冒泡与事件捕获 :https://www.jianshu.co ...