MySQL 知识点复习- 6. inner/right/left join

JOIN按照功能大致分为三类:

INNER JOIN(内连接):获取两个表中字段匹配关系的记录。

LEFT JOIN (左连接): 获取左表所有记录,即使右表没有匹配的记录。

RIGHT JOIN(右连接):用于 获取右表的所有记录,即使左表没有对应匹配的记录。

1. INNER JOIN:

语法:

SELECT column1, column2,....

FROM table1

INNER JOIN table2 on table1.column_name = table2.column_name;

1.简单的 INNER JOIN:

sql 复制代码
SELECT orders.order_id, customers.customer_name

FROM orders

INNER JOIN customers ON orders.customer_id = customers.customer_id;

  1. 使用表别名:
sql 复制代码
SELECT o.order_id, c.customer_name
FROM orders AS o
INNER JOIN customers AS c ON o.customer_id = c.customer_id;
  1. 多表 INNER JOIN:
sql 复制代码
SELECT orders.order_id, customers.customer_name, products.product_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id
INNER JOIN order_items ON orders.order_id = order_items.order_id
INNER JOIN products ON order_items.product_id = products.product_id;

以上 SQL 语句涉及了 orders、customers、order_items 和 products 四个表的连接。它选择了订单 ID、客户名称和产品名称,连接了这些表的关联列。

  1. 使用 WHERE 子句进行过滤:
sql 复制代码
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id
WHERE orders.order_date >= '2023-01-01';

以上 SQL 语句在 INNER JOIN 后使用 WHERE 子句,过滤了订单日期在 '2023-01-01' 及以后的订单。

2. LEFT JOIN

LEFT JOIN 返回左表的所有行,并包括右表中匹配的行,如果右表中没有匹配的行,将返回 NULL 值,以下是 LEFT JOIN 语句的基本语法:

sql 复制代码
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
  1. 简单的 LEFT JOIN:
sql 复制代码
SELECT customers.customer_id, customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;

以上 SQL 语句将选择客户表中的客户 ID 和客户名称,并包括左表 customers 中的所有行。

3. RIGHT JOIN

RIGHT JOIN 返回右表的所有行,并包括左表中匹配的行,如果左表中没有匹配的行,将返回 NULL 值,以下是 RIGHT JOIN 语句的基本语法::

sql 复制代码
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;

以下是一个简单的 RIGHT JOIN 实例:

sql 复制代码
SELECT customers.customer_id, orders.order_id
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

以上 SQL 语句将选择右表 orders 中的所有订单 ID,并包括左表 customers 中匹配的客户 ID。如果在 customers 表中没有匹配的客户 ID,相关列将显示为 NULL。

在开发过程中中,RIGHT JOIN 并不经常使用,因为它可以用 LEFT JOIN 和表的顺序交换来实现相同的效果。例如,上面的查询可以通过使用 LEFT JOIN 改写为:

sql 复制代码
SELECT customers.customer_id, orders.order_id
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;

以上 SQL 语句返回相同的结果,因为 LEFT JOIN 与 RIGHT JOIN 是对称的。在实际使用中,你可以根据个人偏好或组织规范选择使用哪种形式。

相关推荐
时间售卖铺1 小时前
MySQL 库表设计:数据库范式详解
运维·数据库·mysql·云原生
小小AK1 小时前
生产入库单同步实战:MySQL 到金蝶云星空的带料委外场景拆解
数据库·mysql
凤凰院凶涛QAQ1 小时前
《MySQL内核拆解:从SQL到InnoDB》(一) : 数据库基础&库操作&数据类型
数据库·sql·mysql
paopaokaka_luck2 小时前
美食推荐系统(协同过滤算法推荐、AI助手、HanLP中文分词、 ECharts可视化分析、菜谱学习与话题交流)
java·spring boot·mysql·tomcat·echarts
sunburn-3 小时前
数据库操作完整教程:从基础到实战
java·数据库·mysql
bksczm3 小时前
MySQL之读写分离与分库分表
数据库·mysql
梅孔立3 小时前
.mdb Access_MDB历史数据文件迁移MySQL实战教程-可直接投喂给ai参考这个帮你完成迁移
数据库·mysql·adb
时间售卖铺4 小时前
MySQL 数据库账户及授权
运维·数据库·mysql·云原生
2301_322414280411 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
库库的数据库笔记14 小时前
国产信创数据库的MySQL兼容性深度对比解析
大数据·数据库·mysql·oceanbase·政务