MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

LEFT JOIN 语法用法与实例
MySQL LEFT JOIN 语法
SQL(MySQL) LEFT JOIN 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录。LEFT JOIN 基本语法如下:

... FROM table1 LEFT JOIN table2 ON condition ...

MySQL LEFT JOIN 用法实例
下面是两个原始数据表:
article 文章表:

user 用户表:

我们列出所有的文章及对应的所属用户,即使没有用户的文章也列出。
SELECT ... LEFT JOIN ... ON 语句如下:

SELECT article.aid,article.title,user.username FROM article LEFT JOIN user ON article.uid = user.uid

返回查询结果如下:

可以看出来,与 INNER JOIN 明显的区别是,左表记录被全部取出,即使右表无对应匹配记录。
提示
这里所谓记录被“全部”取出,是相对于 INNER JOIN 的限制来说的。其实可以在上面的 SQL 语句后面加个 WHERE 条件或者 LIMIT 等关键字以同一般 SQL 语句一样对结果集做一个范围限制。
IS NULL
在上面的例子中,对于右表中没有对应匹配的数据记录,其所有的列都被置为 NULL,因此要查询这部分记录(如在上面例子中体现为查找 aid=4 这类无对应用户的文章记录),可以附加 IS NULL 条件:

SELECT article.aid,article.title,user.username FROM article LEFT JOIN user
ON article.uid = user.uid WHERE user.uid IS NULL

RIGHT JOIN 语法用法与实例
MySQL RIGHT JOIN 语法
SQL(MySQL) RIGHT JOIN 会取得右表(table2)全部记录,即使左表(table2)并无对应匹配记录。RIGHT JOIN 基本语法如下:

... FROM table1 RIGHT JOIN table2 ON condition ...

MySQL RIGHT JOIN 用法实例
下面是两个原始数据表:
article 文章表:

user 用户表:

我们列出所有的用户,以及他们可能拥有的文章。
SELECT ... RIGHT JOIN ... ON 语句如下:

SELECT article.aid,article.title,user.username FROM article RIGHT JOIN user ON article.uid = user.uid

返回查询结果如下:

对比 LEFT JOIN 返回的查询结果,RIGHT JOIN 返回的结果与其刚好“相反”。
IS NULL
在上面的例子中,对于左表中没有对应匹配的数据记录,其所有的列都被置为 NULL,因此要查询这部分记录(如在上面例子中体现为查找 username=Jack 这类无对应文章的所有用户),可以附加 IS NULL 条件:

SELECT article.aid,article.title,user.username FROM article LEFT JOIN user
ON article.uid = user.uid WHERE article.aid IS NULL
(0)

相关推荐

  • MySQL的LEFT JOIN表连接的进阶学习教程

    LEFT JOIN的主表 这里所说的主表是指在连接查询里MySQL以哪个表为主进行查询.比如说在LEFT JOIN查询里,一般来说左表就是主表,但这只是经验之谈,很多时候经验主义是靠不住的,为了说明问题,先来个例子,建两个演示用的表categories和posts: CREATE TABLE IF NOT EXISTS `categories` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(15) NOT NULL

  • MSSQL内外连接(INNER JOIN)语句详解

    在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚.这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下.希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助.(发这么菜的教程,各位大大们别笑话偶了,呵:D ) 有两个表A和表B.表A结构如下:Aid:int:标识种子,主键,自增IDAname:varchar 数据情况,即用select * from A出来的记录情况如下图1所示: 图1:A表数据 表B结构如下:Bid:int:标识种子

  • SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍

    1. a. 并集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2 b. 交集JOIN SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name c. 差集NOT IN SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2) d. 笛卡尔积 SELECT

  • SQL JOIN 连接详细介绍及简单使用实例

    SQL JOIN 连接 SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN). SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行. 让我们看看选自 "Orders" 表的数据: OrderID CustomerID OrderDate 10308 2 1996-09-18 10309 37 1996-09-19 10310 77 1996-09-20 然后

  • sql 左连接和右连接的使用技巧(left join and right join)

    下面给一个例子进行说明: 例表a aid adate 1 a1 2 a2 3 a3 表b bid bdate 1 b1 2 b2 4 b4 left join: select * from a left join b on a.aid = b.bid 首先取出a表中所有数据,然后再加上与a,b匹配的的数据 此时的取出的是: 1 a1 b1 2 a2 b2 3 a3 空字符 同样的也有right join 指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据 此时的取出的是: 1 a1 b

  • MySQL查询优化:连接查询排序limit(join、order by、limit语句)介绍

    不知道有没有人碰到过这样恶心的问题:两张表连接查询并limit,SQL效率很高,但是加上order by以后,语句的执行时间变的巨长,效率巨低. 情况是这么一个情况:现在有两张表,team表和people表,每个people属于一个team,people中有个字段team_id. 下面给出建表语句: 复制代码 代码如下: create table t_team ( id int primary key, tname varchar(100) ); create table t_people (

  • MSSQL内连接inner join查询方法

    今天项目遇到一直不知道怎么解决,在经典网友以及无忧网友的热心帮助下,解决. 比如A表: sid    sname 1     kkkkkkd 2     ahuinan B表 id    smoney   sid 1        100      1 2        200      1    3        150      2 希望得到的结果: sid   sname   smoney 1    kkkkkkd  300(100+200) 2   ahuinan   150 参考: s

  • 在MySQL中使用JOIN语句进行连接操作的详细教程

    到目前,我们已经学习了从一个表中获取数据.这是简单的需要,但在大多数现实MySQL的使用,经常需要将数据从多个表中的一个单一的查询. 可以使用多个表中的单一SQL查询.在MySQL中联接(join)行为是指两个或多个表到一个表中可以使用连接在SELECT,UPDATE和DELETE语句中加入MySQL表.我们将看到一个例子LEFT JOIN简单的MySQL连接. 在命令提示符使用联接: 假设我们两个表的教程tcount_tbl和tutorials_tbl的完整列表如下: 例子: 试试下面的例子:

  • Mysql表数据比较大情况下修改添加字段的方法实例

    前言 如果一张表在后期的维护中,发现需要加字段以满足当下的需求,但是数据量很大有百万甚至千万级的数据,要如何修改表字段呢. 直接执行使用alter语句肯定是不现实的,这涉及到锁表重建表结构等操作,假设这时候还有其他线程在跑,等一天都改不过来. 这里整理一个比较简单的方法 1.对照要操作的表结构创建一张临时表 CREATE TABLE product_copy LIKE product; 2.将要修改的表结构改在临时表上面 3.导出表product数据,并导入到零时表product_copy 4.

  • 数据库 左连接 右连接 全连接用法小结

    连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来.所以,在Transact-SQL中推荐使用这种方法. SQL-92标准所定义的FROM子句的连接语法格式为: FROM join_table join_type join_table  [ON (join_condition)] 其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做

  • MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    LEFT JOIN 语法用法与实例 MySQL LEFT JOIN 语法 SQL(MySQL) LEFT JOIN 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录.LEFT JOIN 基本语法如下: ... FROM table1 LEFT JOIN table2 ON condition ... MySQL LEFT JOIN 用法实例 下面是两个原始数据表: article 文章表: user 用户表: 我们列出所有的文章及对应的所属用户,即使没有用户的文章也列

  • MYSQL 左连接右连接和内连接的详解及区别

    MYSQL 左连接右连接和内连接的区别,这里就对这些概念经过一个实例,讲解清楚. 代码如下: drop table table1; CREATE TABLE `andrew`.`table1` ( `name` VARCHAR(32) NOT NULL, `city` VARCHAR(32) NOT NULL ) ENGINE = MyISAM; insert into TABLE1(name, city) values ('Person A', 'BJ'); insert into TABLE

  • mysql连接查询(左连接,右连接,内连接)

    一.mysql常用连接 INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录. mysql> select * from name_address; +----------+------+----+ | address | name | id | +----------+------

  • mysql 左连接、右连接和内连接

    脚本如下: drop table table1; CREATE TABLE `andrew`.`table1` ( `name` VARCHAR(32) NOT NULL, `city` VARCHAR(32) NOT NULL ) ENGINE = MyISAM; insert into TABLE1(name, city) values ('Person A', 'BJ'); insert into TABLE1(name, city) values ('Person B', 'BJ');

  • MySQL多表连接的入门实例教程

    连接可用于查询,更新,建立事实外键(指人为建立的两张表的对应关系,相对的,FORGIEN KEY也称物理外键) 表的连接实质就是外键的逆向约束 连接条件 使用ON设定连接条件,也可以用WHERE代替. 一般情况下 ON:设定连接条件 WHERE:进行结果集记录的过滤 没有条件的JOIN内连接实质就是笛卡尔积 [INNER] JOIN 内连接 在MySQL中,JOIN, CROSS JOIN 和 INNER JOIN 是等价的. 内连接表示交集,仅显示A.B两表符合连接条件的记录.不符合连接条件的

  • Mysql表连接的执行流程详解

    目录 1. 前言 1.1 mysql连接的原理 1.2 show warnings命令 2. 准备工作 3. inner join内连接on.where的区别 4. left join左连接on.where的区别 4.1 where驱动表过滤条件 4.2 on驱动表过滤条件 4.3 on被驱动表过滤条件 4.4 where被驱动表过滤条件 5. 总结 1. 前言 对于连接操作,驱动表和被驱动表的关联条件我们放在on后面,如果额外增加对驱动表和被驱动表的过滤条件,放到on或者where后面都不会报

  • Mysql表连接的误区与原理详析

    目录 前言 连接过程简介 内连接与外连接 where 与 on 总结 前言 搞后端的肯定要经常接触到数据库,搞数据库一个避免不了的地方就是 join, join的语法很简单,但是在使用时常常陷入一下两种误区: 误区一: 业务至上,管他三七二十一,再复杂的查询一个连接语句搞定 误区二: 敬而远之,上次写的慢查询sql就是使用了join导致的,以后再也不敢用了 先来举个栗子: mysql> SELECT * FROM t1; +------+------+ | m1 | n1 | +------+-

  • 数据库中的左连接(left join)和右连接(right join)区别

    Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接 where只影向右表,右连接where只影响左表. Left Join select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID 左连接后的检索结果是显示tbl1的所有数据和tbl2 中满足where 条件的数据. 简言之 Left Join影响到的是右边的表 Right Join select * from tbl1 R

随机推荐