首页 > 数据库 > SQL JOIN的用法,你会了吗?

SQL JOIN的用法,你会了吗?

时间:2023-08-10 19:02:34浏览次数:34  
标签:customer customers JOIN 用法 SQL id orders

 SQL JOIN的用法,你会了吗?_关系型数据库

SQL JOIN 是在关系型数据库中常用的操作,用于将两个或多个表中的数据合并起来,以满足查询需求。本文将介绍 SQL JOIN 的基本概念、不同类型的 JOIN,以及使用示例。

SQL JOIN 的概念

在关系型数据库中,数据通常分布在多个表中,并且这些表之间存在关联。SQL JOIN 允许我们基于关联条件将这些表合并在一起,从而获取更有价值的信息。

JOIN 操作的结果是一个新的虚拟表,其中包含满足 JOIN 条件的行。通过 JOIN,我们可以根据关联条件将两个或多个表的列连接在一起,从而创建一个更完整的结果集。

基本语法

SQL JOIN基本语法如下:

SELECT 列名
FROM 表1
JOIN 表2 ON 关联条件

SQL JOIN的类型

SQL 支持不同类型的 JOIN 操作,包括:

  • INNER JOIN(内连接):返回两个表中满足 JOIN 条件的匹配行。
  • LEFT JOIN(左连接):返回左表中的所有行,以及右表中满足 JOIN 条件的匹配行。如果右表中没有匹配的行,则返回 NULL 值。
  • RIGHT JOIN(右连接):返回右表中的所有行,以及左表中满足 JOIN 条件的匹配行。如果左表中没有匹配的行,则返回 NULL 值。
  • FULL JOIN(全连接):返回左表和右表中的所有行,并将满足 JOIN 条件的行进行匹配。如果任意一边没有匹配的行,则返回 NULL 值。

使用示例

下面是一个不同类型JOIN使用的示例代码

-- 创建示例表
CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(50)
);

CREATE TABLE orders (
    id INT PRIMARY KEY,
    customer_id INT,
    product VARCHAR(50),
    FOREIGN KEY (customer_id) REFERENCES customers(id)
);

-- 插入示例数据
INSERT INTO customers (id, name, email) VALUES (1, 'John', '[email protected]');
INSERT INTO customers (id, name, email) VALUES (2, 'Alice', '[email protected]');

INSERT INTO orders (id, customer_id, product) VALUES (1, 1, 'Product A');
INSERT INTO orders (id, customer_id, product) VALUES (2, 1, 'Product B');
INSERT INTO orders (id, customer_id, product) VALUES (3, 2, 'Product C');

-- 使用 INNER JOIN 获取顾客和订单信息
SELECT customers.name, orders.product
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;

-- 使用 LEFT JOIN 获取所有顾客和他们的订单信息
SELECT customers.name, orders.product
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id;

-- 使用 RIGHT JOIN 获取所有订单和他们对应的顾客信息
SELECT customers.name, orders.product
FROM customers
RIGHT JOIN orders ON customers.id = orders.customer_id;

-- 使用 FULL JOIN 获取所有顾客和订单信息(包括没有匹配的行)
SELECT customers.name, orders.product
FROM customers
FULL JOIN orders ON customers.id = orders.customer_id;

上述示例中,首先创建了两个表:customersorderscustomers 表存储顾客信息,orders 表存储订单信息,并通过外键将两个表关联起来。

然后,通过不同类型的 JOIN,获取了不同的结果。INNER JOIN 返回了顾客和订单的匹配行,LEFT JOIN 返回了所有顾客和他们的订单信息,RIGHT JOIN 返回了所有订单和对应的顾客信息,FULL JOIN 返回了所有顾客和订单信息,包括没有匹配的行。

总结

SQL JOIN 是在关系型数据库中常用的操作,用于合并多个表中的数据。JOIN 操作允许我们根据关联条件将表的列连接在一起,以获得更完整的结果集。

SQL 支持不同类型的 JOIN,包括 INNER JOINLEFT JOINRIGHT JOIN FULL JOIN。每种类型的 JOIN 都有其特定的用途和行为。

通过合理使用 JOIN 操作,我们可以利用数据库中的关联信息,实现更复杂的数据查询和分析。熟练掌握 SQL JOIN 是进行高效数据库操作的重要技能。


标签:customer,customers,JOIN,用法,SQL,id,orders
From: https://blog.51cto.com/u_15640304/7038748

相关文章

  • Golang - 原生go-sql-driver:出现invalid connection报错
    在使用go-sql-driver/msqyl驱动过程中,偶现invalidconnection错误,字面上看就是无效连接的意思。开始以为是数据库压力问题或是网络不好,后来发现服务器和数据库是走内网的,网络出现问题几率非常小;只是在测试服务器上跑,没多少连接,不存在压力问题。golang数据库驱动维护一个连接池,如......
  • python操作MySQL
    #macOS操作MySQL服务#启动MySQLmysql.serverstart#停止MySQLmysql.serverstop#重启MySQLmysql.serverrestart#查看当前MySQL服务状态mysql.serverstatus#配置MySQL服务器#我们需要运行以下脚本配置MySQL服务器的安全性:mysql_secure_install......
  • odoo 查看执行时间较长的sql
    还可以查看哪些sql是重复执行的,这对速度优化很有帮助安装模块:https://apps.odoo.com/loempia/verify-download其实可以将代码里边的_loger.debug改为log.info,查看日志的时候会清楚点......
  • docker-compose 安装MySQL(单实例)
    需求场景:在开发和测试环境中,或者研究型的环境,对于数据库的安全和稳定性可以稍低一些,那么我们可以通过docker快速部署MySQL服务,降低部署的时间成本。 vimdocker-compose.ymlversion:'3'services:mysql:restart:alwaysprivileged:trueimage:mysql:8.0......
  • MySQL主从复制修改复制用户及密码【转】
    在生产环境中有时候需要修改复制用户账户的密码,比如密码遗失,或者由于多个不同的复制用户想统一为单独一个复制账户。对于这些操作应尽可能慎重以避免操作不同导致主从不一致而需要进行修复。本文描述了修改复制账户密码以及变更复制账户。1、更改复制账户密码--演示环境,同一......
  • postgresql权限
    ostgresql权限详解角色前言PostgreSQL使用角色的概念管理数据库访问权限。根据角色的设置方式,可以将角色视为数据库用户或数据库用户组。角色可以拥有数据库对象(例如,表和函数),并可以将对这些对象的权限分配给其他角色,以控制谁有权访问哪些对象。此外,还可以将角色的成员资格授予......
  • 解决mysqladmin flush-hosts
    1、提高允许的max_connect_errors数量(治标不治本)a.命令行修改 修改max_connection_errors的数量为1000 mysql-h123.57.78.101-P3306-uroot-p123456 setglobalmax_connect_errors=1000; showvariableslike‘%max_connect_errors%’;b.配置文件修改 登陆进入M......
  • 错误使用LEFT JOIN 导致错误数据释疑
      昨天,公司的某位熟悉业务和SQL的人员,着急忙慌的找我,说必须要解决一个线上的SQL的问题,发现数据对不上了,搞不定挨批事小,但数据错误事关重大。责无旁贷的赶紧和他一起分析这个SQL。 其实就是两个表,一个表中有另一个表的关联键,你可以认为是主外键关系(这里仅仅是关系,我没有说是......
  • mysql双主机热备
    1,主库配置cp-f~/files/my.cnf.master/opt/my.cnfservicemysqlrestartmysql-uroot-pcreateuser'repl'@'%'identifiedwithmysql_native_passwordby'repl';GRANTREPLICATIONSLAVEON*.*TO'repl'@'%';FLUSHPR......
  • mysql与pg的主键索引说明
    mysql与pg的主键说明mysql插入顺序与插入随机测试案例B+Tree原理id顺序的方式插入id随机的方式插入Postgresql堆组织表CTIDPg的元组及索引原理Pg与mysql与oracel问题mysql插入顺序与插入随机测试案例  创建了两张表一张表是按顺序来插入的一张表......