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

举报
Gauss松鼠会小助手2 发表于 2023/10/27 09:52:53 2023/10/27
【摘要】 SQL是用于数据分析和数据处理的最重要的编程语言之一,表连接(JOIN)是数据库中SQL的一种常见操作,在实际应用中,我们需要根据业务需求从两个或多个相关的表中获取信息。

前言

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

GaussDB JOIN

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

1LEFT 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、初始化实验表

1Students(学生表):

--学生表,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;

2Score(学生成绩表):

--学生成绩表,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云数据库为实验平台)

——结束

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。