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

——结束


更多详情参考:云数据库GaussDB

<think>嗯,我现在需要回答用户关于GaussDBSQL查询语言语法的问题。首先,我得确认自己是否了解GaussDB的基本信息。GaussDB是华为公司开发的一款关系型数据库,支持分布式架构,适用于大规模数据处理。它兼容标准的SQL语法,但可能有一些特有的扩展或优化。 用户要求结构清晰的回答,逐步介绍,所以应该分点说明。首先,可能需要从基础查询结构开始,比如SELECT语句的基本用法。然后是数据操作语言(DML)、数据定义语言(DDL)、数据控制语言(DCL)等方面。此外,GaussDB可能有自己的特性,比如分布式执行计划、特定的函数或优化器提示,这些也应该涵盖进去。 需要注意用户提到的格式要求,所有行内数学达式要用$...$,独立公式用$$...$$,但这个问题可能涉及较少的数学公式,更多的是代码示例。不过如果有需要举例的地方,比如函数的使用,可能需要用行内代码或代码块来展示。 另外,用户希望语法正确,所以需要确保提供的SQL示例是正确的,符合GaussDB的规范。可能需要查阅GaussDB的官方文档,确认某些语法细节,比如是否支持特定的JOIN语法、窗口函数、CTE(公共达式)等。 还需要考虑用户可能的实际应用场景,比如他们可能在进行数据分析、事务处理或数据库管理,因此回答中应涵盖不同方面的SQL语法,如聚合函数、事务控制语句、索引创建等。 可能的结构如下: 1. 基本查询结构(SELECT、FROM、WHERE) 2. DML(INSERT、UPDATE、DELETE) 3. DDL(CREATE、ALTER、DROP) 4. 高级特性(分布式查询、窗口函数、索引优化) 5. 事务控制(BEGIN、COMMIT、ROLLBACK) 6. 特有功能或扩展(如华为提到的某些分布式优化) 需要注意避免过于技术化的术语,但又要准确。同时,确保每个部分都有示例,比如展示一个SELECT语句的示例,并说明各个子句的作用。 可能还需要提到GaussDBSQL标准的兼容性,以及与其他数据库(如PostgreSQL、MySQL)的差异,但用户没有特别问比较,所以可能不需要深入,除非相关。 最后,检查是否符合用户的所有要求:中文回答、结构清晰、分步骤、语法正确,正确使用LaTeX格式(如果有数学达式的话,但这个问题可能较少涉及,可能需要用代码块展示SQL语句)。</think>GaussDB(华为开源关系型数据库)的SQL查询语言语法兼容ANSI SQL标准,并针对分布式场景进行了优化。以下从基础到高级逐步介绍其核心语法: --- ### 一、基础查询结构 **语法模板**: ```sql SELECT [DISTINCT] 列名1, 列名2, 聚合函数(...) FROM 名 [WHERE 条件] [GROUP BY 分组列] [HAVING 分组过滤条件] [ORDER BY 排序列 [ASC|DESC]] [LIMIT 行数]; ``` **示例**: ```sql SELECT name, age, AVG(salary) FROM employees WHERE department = 'IT' GROUP BY name, age HAVING AVG(salary) > 10000 ORDER BY age DESC LIMIT 10; ``` --- ### 二、数据操作语言(DML) 1. **插入数据** ```sql INSERT INTO (列1, 列2) VALUES (值1, 值2), (值3, 值4); ``` 2. **更新数据** ```sql UPDATE 名 SET 列1 = 新值 WHERE 条件; ``` 3. **删除数据** ```sql DELETE FROM 名 WHERE 条件; ``` --- ### 三、数据定义语言(DDL) 1. **创建** ```sql CREATE TABLE ( 列1 数据类型 [PRIMARY KEY], 列2 数据类型 [NOT NULL], 列3 数据类型 DEFAULT 默认值 ) DISTRIBUTE BY HASH(列1); -- 分布式场景下指定分布键 ``` 2. **修改结构** ```sql ALTER TABLE 名 ADD COLUMN 新列名 数据类型; ``` 3. **删除** ```sql DROP TABLE 名; ``` --- ### 四、高级特性 1. **分布式JOIN优化** 通过`/*+ hashjoin(...) */`等Hint指定连接策略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值