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

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

时间:2024-11-27 15:12:15浏览次数:12  
标签:JOIN -- sno GaussDB t2 t1 SQL id

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

——结束

标签:JOIN,--,sno,GaussDB,t2,t1,SQL,id
From: https://www.cnblogs.com/xiaoxu0211/p/18572344

相关文章

  • GaussDB数据库SQL系列-UNION & UNION ALL
    一、前言SQL(结构化查询语言)是一种用于管理关系型数据库的标准语言。它允许用户通过使用SQL语言来操作数据库中的数据。而在SQL中,UNION是一个非常强大的功能,它可以将多个SELECT语句的结果合并成一个结果集。本文将以GaussDB数据库为例,介绍一下UNION操作符的使用。二、GaussDBUN......
  • GaussDB数据库SQL系列-SQL与ETL浅谈
    一、前言在SQL语言中,ETL(抽取、转换和加载)是一种用于将数据从源系统抽取到目标系统的过程。ETL过程通常包括三个阶段:抽取(Extract)、转换(Transform)和加载(Load)。但这些其实都脱离不了数据库系统,本节从GaussDB数据库生态出发,给大家简单讲一下SQL与ETL的过程与关系。二、SQL与ETL的......
  • GaussDB技术解读系列:运维自动驾驶探索
    ​随着企业数字化转型进入深水区,数据库系统越来越复杂,运维团队维护的数据库规模越来越大,传统工具化的运维已无法满足当前运维的要求,数据库运维逐渐向智能化发展。如何更好地感知和预测数据库故障,进而进行智能诊断、自适应恢复,是我们一直探索的内容。接下来本篇将分享GaussDB在运......
  • SQLSERVER——XML转数据表输出(E10的PickList转成数据表)
    --声明XML变量并加载XML数据DECLARE@XMLASXML;SET@XML=N'<PickListType><Name>UDF_COLLECTION_TJ</Name><DisplayName>收款条件</DisplayName><Items><PickListItem><Id>合同签订</Id>......
  • MySQL占用内存过高怎么办?【转】
    当GreatSQL数据库处于高并发高负载时,可能会发现 mysqld 进程的内存消耗远远超出设置的 innodb_buffer_pool_size 时,有时候甚至会高达甚至超过系统内存的90%,遇到这种问题时,心里经常会发慌,担心下一秒内存就会爆了发生OOM,或者数据库hang死不响应。本文和大家试着使用GreatSQ......
  • [免费]SpringBoot+Vue大学生就业(信息管理)服务平台【论文+源码+SQL脚本】
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue大学生就业(信息管理)服务平台,分享下哈。项目视频演示【免费】SpringBoot+Vue大学生就业(信息管理)服务平台Java毕业设计_哔哩哔哩_bilibili项目介绍如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发......
  • mysql入门之基础
    SHOWDATABASES;SHOWTABLESFROMmysql;SHOWDATABASES;#使用myemployees库,或者说切换到myemployees库USEmyemployees;DESCemployees;DESCRIBEemployees;SHOWCOLUMNSFROMemployees;SHOWCOLUMNSFROMtest.person;SELECT `employee_id`, `first_name`,......
  • Educator头歌MySQL数据库实验五:授权及回收权限
    在开始讲解以及分享答案之前如果粘贴答案失效,请点击头歌系统右上角的电源键,释放资源重载数据库,再次进入才能正确通过第1关:授予某数据库的所有权限100任务要求参考答案记录评论任务描述相关知识MySql系统库中的权限表访问控制的两个阶段:授予的权限等级:MySQL权限类型grant......
  • phpMyAdmin管理mysql
    记录时间:2024-11-27创建数据库 修改和删除数据库 创建数据表 修改数据表 删除数据表 翻译搜索复制......
  • GaussDB分区表查询性能异常分析
    问题现象使用分区表进行相关查询业务,SQL性能慢。原因分析导致分区表业务慢的常见原因有以下几种:分区索引失效,顺序扫描导致的SQL性能慢分区表无法进行分区剪枝导致的SQL性能慢SQL计划选择非最优导致的SQL性能慢处理方法判断是否存在索引异常的行为部分分区DDL如果不带UP......