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

目录

++一、前言++

++[二、GaussDB JOIN](#二、GaussDB JOIN)++

++[1、LEFT JOIN](#1、LEFT JOIN)++

++[2、LEFT JOIN EXCLUDING INNER JOIN](#2、LEFT JOIN EXCLUDING INNER JOIN)++

++[3、RIGHT JOIN](#3、RIGHT JOIN)++

++[4、LEFT JOIN EXCLUDING INNER JOIN](#4、LEFT JOIN EXCLUDING INNER JOIN)++

++[5、INNER JOIN](#5、INNER JOIN)++

++[6、FULL OUTER JOIN](#6、FULL OUTER JOIN)++

++[7、FULL OUTER JOIN EXCLUDING INNER JOIN](#7、FULL OUTER JOIN EXCLUDING INNER JOIN)++

++[三、GaussDB 实验示例](#三、GaussDB 实验示例)++

++1、初始化实验表++

++[2、LEFT JOIN(示例)](#2、LEFT JOIN(示例))++

++[3、RIGTH JOIN(示例)](#3、RIGTH JOIN(示例))++

++[4、INNER JOIN(示例)](#4、INNER JOIN(示例))++

++[5、FULL 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 复制代码
--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 复制代码
--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 复制代码
--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 复制代码
--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 复制代码
--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 复制代码
--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 复制代码
--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(学生表):

sql 复制代码
--学生表,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(学生成绩表):

sql 复制代码
--学生成绩表,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(示例)

sql 复制代码
--表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(示例)

sql 复制代码
--表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(示例)

sql 复制代码
--根据字段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(示例)

sql 复制代码
--获取左右表里的所有记录。
SELECT t1.sno
      ,t1.sname
      ,t2.sno
      ,t2.scgrade
 FROM students t1
FULL JOIN score t2
ON t1.sno=t2.sno

四、小结

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

------结束

相关推荐
SelectDB10 分钟前
信创适配速查手册:国产 CPU / OS 对照表、认证许可速查与部署检查项清单
大数据·数据库·数据分析
亚川楼宇自控系统数据中心厂家13 分钟前
机房 3D 可视化技术:从平面监控到立体化管理的升级
大数据·数据库·人工智能
SelectDB20 分钟前
部署形态与存算分离速查:形态对照、配置项清单与关键命令片段
大数据·数据结构·数据库
SelectDB22 分钟前
Workload Group 参数速查:排队与并发配置、CPU 软硬限切换与常见配置问题清单
大数据·数据库·数据分析
DBA_G1 小时前
南大通用GBase 8c数据库-两阶段提交事务状态保持讲解(下)
数据库
NineData1 小时前
MySQL 到 Doris 实时数据同步:订单、用户和日志数据入仓方案
数据库·mysql
小小AK1 小时前
采购订单同步策略实战:金蝶云星空到旺店通的字段映射与调度设计
大数据·数据库
前端 贾公子2 小时前
LangGraph == 图的状态(State)管理 (中)
开发语言·数据库·python
一条小小yu2 小时前
Text-to-SQL Agent
数据库·sql
Dovis(誓平步青云)2 小时前
现场问题先关闭还是先验收,建筑任务怎样处理依赖
前端·javascript·数据库·mysql·音视频