• GaussDB数据库SQL系列-表连接(JOIN)


    目录

    一、前言

    二、GaussDB JOIN

    1、LEFT JOIN

    2、LEFT JOIN EXCLUDING INNER JOIN

    3、RIGHT JOIN

    4、LEFT JOIN EXCLUDING INNER JOIN

    5、INNER JOIN

    6、FULL OUTER JOIN

    7、FULL OUTER JOIN EXCLUDING INNER JOIN

    三、GaussDB 实验示例

    1、初始化实验表

    2、LEFT JOIN(示例)

    3、RIGTH JOIN(示例)

    4、INNER JOIN(示例)

    5、FULL JOIN(示例)

    四、小结

    一、前言

    SQL是用于数据分析和数据处理的最重要的编程语言之一,表连接(JOIN)是数据库中SQL的一种常见操作,在实际应用中,我们需要根据业务需求从两个或多个相关的表中获取信息。

    二、GaussDB JOIN

    GaussDB是华为推出的企业级分布式关系型数据库。GaussDB JOIN 子句是基于两个或者多个表之间的共同字段把它们进行结合。在GaussDB数据库中,常用的JOIN有如下几种连接及用法:INNER JOIN、LEFT JOIN、RIGHT JOIN、 FULL JOIN、CROSS JOIN。

    1、LEFT JOIN

    LEFT JOIN 一般称左连接,也写作 LEFT [OUTER] JOIN。左连接查询会返回左表中所有记录,且在右表中找到的关联数据列也会被一起返回。

    1. --SQL示例
    2. SELECT t1.column1
    3. ,…
    4. ,t2.column1
    5. ,…
    6. FROM table1 t1
    7. LEFT JOIN table2 t2
    8. ON t1.id=t2.id ;

    2、LEFT JOIN EXCLUDING INNER JOIN

    返回左表有但右表没有关联数据的记录集。

    1. --SQL示例
    2. SELECT t1.column1
    3. ,…
    4. ,t2.column1
    5. ,…
    6. FROM table1 t1
    7. LEFT JOIN table2 t2
    8. ON t1.id=t2.id
    9. WHERE t2.id IS NULL ;

    3、RIGHT JOIN

    RIGHT JOIN 一般称右连接,也写作 RIGHT [OUTER] JOIN。右连接查询会返回右表中所有记录,且在左表中找到的关联数据列也会被一起返回。

    1. --SQL示例
    2. SELECT t1.column1
    3. ,…
    4. ,t2.column1
    5. ,…
    6. FROM table1 t1
    7. RIGHT JOIN table2 t2
    8. ON t1.id=t2.id

    4、LEFT JOIN EXCLUDING INNER JOIN

    返回右表有但左表没有关联数据的记录集。

    1. --SQL示例
    2. SELECT t1.column1
    3. ,…
    4. ,t2.column1
    5. ,…
    6. FROM table1 t1
    7. RIGHT JOIN table2 t2
    8. ON t1.id=t2.id
    9. WHERE t1.id IS NULL ;

    5、INNER JOIN

    INNER JOIN 一般被译作内连接。获取左表和右表中能关联起来的数据。

    1. --SQL示例
    2. SELECT t1.column1
    3. ,…
    4. ,t2.column1
    5. ,…
    6. FROM table1 t1
    7. INNER JOIN table2 t2
    8. ON t1.id=t2.id ;

    6、FULL OUTER JOIN

    FULL [OUTER] JOIN 一般称外连接、全连接,实际查询语句中可以写作FULL JOIN。外连接查询能返回左右表里的所有记录。

    1. --SQL示例
    2. SELECT t1.column1
    3. ,…
    4. ,t2.column1
    5. ,…
    6. FROM table1 t1
    7. FULL OUTER JOIN table2 t2
    8. ON t1.id=t2.id ;

    7、FULL OUTER JOIN EXCLUDING INNER JOIN

    返回左表和右表里没有相互关联的记录集。

     

    1. --SQL示例
    2. SELECT t1.column1
    3. ,…
    4. ,t2.column1
    5. ,…
    6. FROM table1 t1
    7. FULL OUTER JOIN table2 t2
    8. ON t1.id=t2.id
    9. WHERE t1.id IS NULL
    10. OR t2.id IS NULL ;

    除以上几种外,另有 CROSS JOIN(迪卡尔集),但此用法不常用,可做拓展研究。

    三、GaussDB 实验示例

    创建两张实验表:Students(学生表)和Score(学生成绩表)。

    1、初始化实验表

    1)Students(学生表):

    1. --学生表,Students(SNO, SNAME)代表 (学号,姓名)
    2. DROP TABLE students;
    3. CREATE TABLE students(
    4. sno INTEGER NOT NULL,
    5. sname varchar(32)
    6. );
    7. --插入数据
    8. INSERT INTO students(sno,sname) VALUES (1001,'张三');
    9. INSERT INTO students(sno,sname) VALUES (1002,'李四');
    10. INSERT INTO students(sno,sname) VALUES (1003,'王五');
    11. INSERT INTO students(sno,sname) VALUES (1004,'赵六');
    12. INSERT INTO students(sno,sname) VALUES (1005,'韩梅');
    13. INSERT INTO students(sno,sname) VALUES (1006,'李雷');
    14. --查看表信息
    15. SELECT * FROM students;

     2)Score(学生成绩表):

    1. --学生成绩表,Score(SNO, SCGRADE) 代表(学号,成绩)
    2. DROP TABLE score;
    3. CREATE TABLE score(
    4. sno INTEGER NOT NULL,
    5. scgrade DECIMAL(3,1)
    6. );
    7. --插入数据
    8. INSERT INTO score(sno,scgrade)values(1001,98);
    9. INSERT INTO score(sno,scgrade)values(1002,95);
    10. INSERT INTO score(sno,scgrade)values(1003,97);
    11. INSERT INTO score(sno,scgrade)values(1004,99);
    12. --查看表信息
    13. SELECT * FROM score;

    2、LEFT JOIN(示例)

    1. --表students为主表
    2. SELECT t1.sno
    3. ,t1.sname
    4. ,t2.sno
    5. ,t2.scgrade
    6. FROM students t1
    7. LEFT JOIN score t2
    8. ON t1.sno=t2.sno

    3、RIGTH JOIN(示例)

    1. --表score 为主表
    2. SELECT t1.sno
    3. ,t1.sname
    4. ,t2.sno
    5. ,t2.scgrade
    6. FROM students t1
    7. RIGHT JOIN score t2
    8. ON t1.sno=t2.sno

    4、INNER JOIN(示例)

    1. --根据字段sno获取两个表中都有的数据
    2. SELECT t1.sno
    3. ,t1.sname
    4. ,t2.sno
    5. ,t2.scgrade
    6. FROM students t1
    7. INNER JOIN score t2
    8. ON t1.sno=t2.sno

    5、FULL JOIN(示例)

    1. --获取左右表里的所有记录。
    2. SELECT t1.sno
    3. ,t1.sname
    4. ,t2.sno
    5. ,t2.scgrade
    6. FROM students t1
    7. FULL JOIN score t2
    8. ON t1.sno=t2.sno

     

    四、小结

    数据库表连接(Join)是将两个或多个表中的数据根据一定的条件进行组合,在实际应用中,数据库表连接可以帮助我们快速地获取所需的数据信息,提高数据处理效率。需要注意的是,不同的数据库系统对表连接的支持程度可能存在差异,需要根据具体的数据库类型选择合适的连接方式。(本文是以GaussDB云数据库为实验平台)

    ——结束

  • 相关阅读:
    APP分发-CDN加速原理
    SpringBoot 开放HTTPS HTTP ,并且强制HTTP转HTTPS端口
    实例036:算素数
    一文2600字教你接口测试基本知识点(超全)
    5个顶级的Blender生成式AI插件
    未来十年将是Web3.0发展的黄金十年
    Golang Map:高效的键值对容器
    “前端工程化”到底是何方神圣?
    EdgeX Foundry 架构介绍
    PerfView专题 (第十五篇): 如何洞察 C# 中的慢速方法
  • 原文地址:https://blog.csdn.net/GaussDB/article/details/132180351