目录
一、前言
二、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云数据库为实验平台)
——结束