详解MySQL LEFT/RIGHT JOIN:外连接

MySQL的LEFT JOIN和RIGHT JOIN都是外连接(Outer Join)的一种形式,意味着即使没有匹配的行,也会返回从另一张表(左连接的情况是左表,右连接的情况是右表)中的所有行。

LEFT JOIN

左连接(LEFT JOIN)返回左表中的所有行,以及右表中的匹配行。如果右表中没有与左表中的行匹配的行,则返回NULL值。

语法:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

示例:

假设有两张表,一个是用户表(users),一个是评论表(comments),分别如下:

users表:

id name
1 John
2 Peter
3 Mary

comments表:

id comment user_id
1 Good 1
2 Great 1
3 Nice 3

查询用户表与评论表的LEFT JOIN结果:

SELECT users.name, comments.comment
FROM users
LEFT JOIN comments
ON users.id = comments.user_id;

输出结果:

name comment
John Good
John Great
Mary Nice
Peter NULL

输出结果中,左连接结果显示了users表的全部三行与comments表的匹配行,以及users表中Peter行没有comment匹配的NULL值。

RIGHT JOIN

右连接(RIGHT JOIN)返回右表中的所有行,以及左表中的匹配行。如果左表中没有与右表中的行匹配的行,则返回NULL值。

语法:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

示例:

与之前的例子类似,现在将查询语句中的LEFT JOIN换成RIGHT JOIN,来查询匹配用户表和评论表的右连接结果:

SELECT users.name, comments.comment
FROM users
RIGHT JOIN comments
ON users.id = comments.user_id;

输出结果:

name comment
John Good
John Great
Mary Nice
NULL Love

输出结果中,右连接结果显示了comments表的全部三行与users表的匹配行,以及comments表中Love行没有对应匹配的NULL值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解MySQL LEFT/RIGHT JOIN:外连接 - Python技术站

(0)
上一篇 2023年3月9日
下一篇 2023年3月9日

相关文章

  • Redis25:redis的其它模块:队列、位图、HyperLogLog、布隆过滤器、GeoHash

    延时队列 实现队列的一种简单的方式:用zset,其中的score就是剩余时间。 还有一种实现简单队列的方式就是用redis中的list,可以用阻塞读命令blpop、brpop,这样在读不到数据时就会立即进入休眠状态,然后一旦有数据就会醒过来,降低延迟。如果用普通的命令rpush、lpush、lpop、rpop,取不到数据时应该手动设置休眠。注意如果一个读线程…

    Redis 2023年4月11日
    00
  • 搭建自己的PHP MVC框架详解

    搭建自己的 PHP MVC 框架非常有意义,它不仅可以让我们更好地理解 MVC 设计模式,还可以帮助我们更好地学习和掌握 PHP 技术栈。下面,我将详细讲解如何搭建自己的 PHP MVC 框架,包括以下步骤。 一、搭建框架目录结构 首先,我们需要搭建一个合适的目录结构。建议按照 MVC 设计模式的要求,将代码分为 Model、View 和 Controlle…

    database 2023年5月21日
    00
  • Spring boot 使用Redis 消息队列

    package com.loan.msg.config; import com.loan.msg.service.MessageReceiver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configur…

    Redis 2023年4月12日
    00
  • Linux利用UDF库实现Mysql提权

    Linux利用UDF库实现MySQL提权攻略 背景 MySQL是一款常用的关系型数据库管理系统,为了提升服务器安全性能,往往会限制MySQL普通用户的权限。但是,如果攻击者能够获得了MySQL普通用户的访问权限,就可以利用MySQL UDF(User Defined Function)提权,获得root权限进行控制服务器。 实现步骤 1. 获取UDF库文件 …

    database 2023年5月22日
    00
  • MySQL数据库Event定时执行任务详解

    MySQL数据库Event定时执行任务详解 什么是MySQL Event? Event是MySQL数据库中一个重要的时间处理工具。我们可以通过使用Event,在MySQL数据库中设置定时任务以执行一系列的数据库操作。 如何创建MySQL Event? Event的创建需要用到MySQL的事件调度器,所以在创建一个Event之前,需要先确认MySQL开启了事件…

    database 2023年5月22日
    00
  • asp.net 预防SQL注入攻击之我见

    下面我将详细讲解 “ASP.NET 预防 SQL 注入攻击之我见” 的完整攻略。 什么是 SQL 注入攻击? SQL 注入攻击是指黑客通过在网站表单或 url 参数等输入处提交恶意 sql 代码,以达到绕过验证和授权机制,进一步进行数据库攻击甚至控制整个网站系统的攻击行为。 预防 SQL 注入攻击的措施 使用参数化查询 参数化查询是指在执行 SQL 语句时,…

    database 2023年5月21日
    00
  • 阿里云ubuntu16.04如何搭建pptpd服务

    下面是详细讲解阿里云 Ubuntu 16.04 如何搭建 pptpd 服务的完整攻略。 1. 安装 pptpd 首先需要安装 pptpd。通过以下命令安装: sudo apt-get update sudo apt-get install pptpd 2. 配置 pptpd 安装完成后,需要对 pptpd 进行配置。配置文件的路径为 /etc/ppp/ppt…

    database 2023年5月22日
    00
  • mysql Access denied for user ‘root’@’localhost’ (using password: YES)解决方法

    当使用mysql时,可能会出现下面的错误信息: Access denied for user ‘root’@’localhost’ (using password: YES) 这种情况一般是因为密码错误或权限不足造成的,下面给出一些可能的解决方法: 1. 检查用户名和密码 首先需要确认使用的用户名和密码是否正确,可以通过下面的命令进行检查: mysql -u…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部