您现在的位置是:首页 > 文章详情

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

日期:2023-08-18点击:354

目录

一、前言

二、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。左连接查询会返回左表中所有记录,且在右表中找到的关联数据列也会被一起返回。

--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云数据库为实验平台)

——结束

原文链接:https://my.oschina.net/gaussdb/blog/10098327
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章