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


风晓
风晓 2024-01-13 09:16:55 52634 赞同 0 反对 0
分类: 资源 标签: 国产数据库
GaussDB数据库SQL系列-表连接(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。左连接查询会返回左表中所有记录,且在右表中找到的关联数据列也会被一起返回。

图片

--SQL示例

SELECT  t1.column1

            ,…

            ,t2.column1

            ,…

FROM table1 t1

LEFT JOIN table2 t2

ON t1.id=t2.id ;

2、LEFT JOIN EXCLUDING INNER JOIN  

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

图片

--SQL示例

SELECT  t1.column1

            ,…

            ,t2.column1

            ,…

FROM table1 t1

LEFT JOIN table2 t2

ON t1.id=t2.id

WHERE t2.id IS NULL ;

3、RIGHT JOIN  

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

图片

--SQL示例

SELECT  t1.column1

            ,…

            ,t2.column1

            ,…

FROM table1 t1

RIGHT JOIN table2 t2

ON t1.id=t2.id

4、LEFT JOIN EXCLUDING INNER JOIN  

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

图片

--SQL示例

SELECT  t1.column1

            ,…

            ,t2.column1

            ,…

FROM table1 t1

RIGHT JOIN table2 t2

ON t1.id=t2.id

WHERE t1.id IS NULL ;

5、INNER JOIN  

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

图片

--SQL示例

SELECT  t1.column1

            ,…

            ,t2.column1

            ,…

FROM table1 t1

INNER JOIN table2 t2

ON t1.id=t2.id ;

6、FULL OUTER JOIN  

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

图片

--SQL示例

SELECT  t1.column1

            ,…

            ,t2.column1

            ,…

FROM table1 t1

FULL OUTER JOIN table2 t2

ON t1.id=t2.id ;

7、FULL OUTER JOIN EXCLUDING INNER JOIN  

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

图片

--SQL示例

SELECT  t1.column1

            ,…

            ,t2.column1

            ,…

FROM table1 t1

FULL OUTER JOIN table2 t2

ON t1.id=t2.id

WHERE t1.id IS NULL

OR t2.id IS NULL ;

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

三、GaussDB 实验示例  

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

1、初始化实验表  

1)Students(学生表):

--学生表,Students(SNO, SNAME)代表 (学号,姓名)

DROP TABLE students;

CREATE TABLE students(

    sno    INTEGER     NOT NULL,

    sname  varchar(32)

);

--插入数据

INSERT INTO students(sno,sname) VALUES (1001,'张三');

INSERT INTO students(sno,sname) VALUES (1002,'李四');

INSERT INTO students(sno,sname) VALUES (1003,'王五');

INSERT INTO students(sno,sname) VALUES (1004,'赵六');

INSERT INTO students(sno,sname) VALUES (1005,'韩梅');

INSERT INTO students(sno,sname) VALUES (1006,'李雷');

--查看表信息

SELECT * FROM students;

图片

2)Score(学生成绩表):

--学生成绩表,Score(SNO, SCGRADE) 代表(学号,成绩)

DROP TABLE score;

CREATE TABLE score(

    sno      INTEGER     NOT NULL,

    scgrade  DECIMAL(3,1)

);

--插入数据

INSERT INTO score(sno,scgrade)values(1001,98);

INSERT INTO score(sno,scgrade)values(1002,95);

INSERT INTO score(sno,scgrade)values(1003,97);       

INSERT INTO score(sno,scgrade)values(1004,99);

--查看表信息

SELECT * FROM score;

图片

2、LEFT JOIN(示例)   

--表students为主表

SELECT t1.sno

      ,t1.sname

      ,t2.sno

      ,t2.scgrade

 FROM students t1

LEFT JOIN score t2

ON t1.sno=t2.sno

图片

3、RIGTH JOIN(示例)  

--表score 为主表

SELECT t1.sno

      ,t1.sname

      ,t2.sno

      ,t2.scgrade

 FROM students t1

RIGHT JOIN score t2

ON t1.sno=t2.sno

图片

4、INNER JOIN(示例)  

--根据字段sno获取两个表中都有的数据

SELECT t1.sno

      ,t1.sname

      ,t2.sno

      ,t2.scgrade

 FROM students t1

INNER JOIN score t2

ON t1.sno=t2.sno

图片

5、FULL JOIN(示例)  

--获取左右表里的所有记录。

SELECT t1.sno

      ,t1.sname

      ,t2.sno

      ,t2.scgrade

 FROM students t1

FULL JOIN score t2

ON t1.sno=t2.sno

图片

四、小结  

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

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南  2073
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访?  2003
银河麒麟桌面操作系统【保留数据盘重装系统】  1812
麒麟系统各种原因开不了机解决(合集)  1610
桌面通用(全架构)【rpm包转成deb包】操作方法  932
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题  916
统信系统安装(合集)  854
统信桌面专业版【手动分区安装UOS系统】介绍  846
统启动异常几种类型(initramfs 模式)  691
银河麒麟桌面操作系统V10SP1(全架构)【更改屏保文字信息】操作方法  3
最近下载排行榜
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南 0
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访? 0
银河麒麟桌面操作系统【保留数据盘重装系统】 0
麒麟系统各种原因开不了机解决(合集) 0
桌面通用(全架构)【rpm包转成deb包】操作方法 0
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题 0
统信系统安装(合集) 0
统信桌面专业版【手动分区安装UOS系统】介绍 0
统启动异常几种类型(initramfs 模式) 0
银河麒麟桌面操作系统V10SP1(全架构)【更改屏保文字信息】操作方法 0
作者收入月榜
1

prtyaa 收益393.72元

2

zlj141319 收益221.42元

3

1843880570 收益214.2元

4

IT-feng 收益213.03元

5

风晓 收益208.24元

6

777 收益172.82元

7

Fhawking 收益106.6元

8

信创来了 收益105.89元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.65元

请使用微信扫码

加入交流群

请使用微信扫一扫!