sql内连接、外连接和自连接查询

【七】【SQL自连接 数据库中的自连接是一种特殊类型的SQL查询,它允许表与自身进行连接,以便查询表中与其他行相关联的行。自连接通常用于处理那些存储在同一个表中的但彼此之间具有层级或关系的数据。为了实现自连接,通常需要给表使用别名,以便在查询中清楚地区分不同的实例。第一次尝试直接从salgrade表自连接时,出现了错误。这是因为在不使用别名的情况下,MySQL无法区分查询中涉及的两个相同表的实例。通过为salgrade表的每个实例指定别名(如t1t2。这个查询生成了一个笛卡尔积,展示了salgrade。 阅读详情

一. 前言:

通常在项目中对表的查询都是关联多张表,多表查询就涉及到sql的内连接、外连接和自连接查询。本篇文章将简单的介绍这些sql连接的使用,希望对大家有所帮助。


二. 数据准备:

先准备两张表:

1. 学生表:student

select * from student;


2. 教师表:teacher

select * from teacher;


三. 关联查询:

1. 内连接:在每个表中找出符合条件的共有记录。[x inner join y on...]

第一种写法:(只使用where)
select t.teacher_name, s.student_name from teacher t,student s where t.id = s.teacher_id;

第二种写法:(join .. on.. )
select t.teacher_name, s.student_name from teacher t join student s on t.id = s.teacher_id;

第三种写法:(inner join .. on.. 
select t.teacher_name, s.student_name from teacher t inner join student s on t.id = s.teacher_id;



2. 外连接

外连接有三种方式:左连接,右连接和全连接。

2.1 左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null表示。[x left [outer] join y on...

第一种写法:(left join .. on ..)

select t.teacher_name, s.student_name from teacher t left join student s on t.id = s.teacher_id;

第二种写法:(left outer join .. on ..)

select t.teacher_name, s.student_name from teacher t left outer join student s on t.id = s.teacher_id;

第三种写法:"(+)" 所在位置的另一侧为连接的方向

select t.teacher_name, s.student_name from teacher t, student s where t.id = s.teacher_id(+);



2.2 右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null填充。[x right [outer] join y on...]

第一种写法:()

select t.teacher_name, s.student_name from teacher t right join student s on t.id = s.teacher_id;

第二种写法:

select t.teacher_name, s.student_name from teacher t right outer join student s on t.id = s.teacher_id;

第三种写法:"(+)" 所在位置的另一侧为连接的方向

select t.teacher_name, s.student_name from teacher t, student s where t.id(+) = s.teacher_id;



2.3 全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)

第一种写法:(full join .. on ..)

select t.teacher_name, s.student_name from teacher t full join student s on t.id = s.teacher_id;

第二种写法:(full outer join .. on)

select t.teacher_name, s.student_name from teacher t full outer join student s on t.id = s.teacher_id;



3. 自连接

自连接,连接的两个表都是同一个表,同样可以由内连接,外连接各种组合方式,按实际应用去组合。

SELECT a.*, b.* FROM table_1 a,table_1 b WHERE a.[name] = b.[name]  


内连接sql 上述语句将 orders 表 customers 表基于 customer_id 列进行等值连接,返回订单号、客户名称订单日期。上述语句将 products 表 suppliers 表基于 supplier_id 列进行非等值连接,返回产品名称供应商名称。上述语句将 employees 表自连接,基于 manager_id 列进行等值连接,返回员工姓名经理姓名。其中,t1 t2 为同一张表的别名(起别名可以用as关键字,或者用空格隔开)。等值连接的语法格式为:(sql99语法) 阅读详情

相关推荐

Oracle数据库SQL语句(三)——多表查询(交叉连接、内连接<NATURAL JOIN、USING、INNER JOIN ...ON>外连接自连接)分组函数、HAVING子句、SELECT执行过程

Oracle数据库SQL语句 1、多表查询 创建两个表 --创建学生表 CREATE TABLE stu( ID NUMBER(4), NAME VARCHAR(50), sno NUMBER(8), CLASS VARCHAR(50) ); 添加表数据 --增添数据 INSERT INTO stu VALUES(1,'张三',2021001,'一班'); INSERT INTO stu VALUES(2,'李四',

好好学习,天天向上 1102

SQL数据查询——连接查询

等值连接、内连接外连接、自然连接、SQL JOINS等主要操作以及SQL92与SQL99语法比较、Oracle与MySQL语法比较。

z135733的博客 1万+

第26讲:多表查询自连接

思路:查询每个员工的姓名以及领导的名字,在人员信息表中,直属领导一列记录的是一个id号,这个id号其实就是人员信息表的主键ID,对应的每一个ID都是表中的一个人,我们的连接条件就是zsld_id=id,另外不需要显示出连接条件之外的其他数据,因此采用内连接就可以实现。例如:一张人员信息表,既有员工姓名的字段,也有员工直属领导的字段,但是直属领导的字段是一个ID,这个ID就与员工表中的ID字段有关联,此时就可以把人员信息表看做是多张表,通过关联查询得出结果。

江晓龙的博客 1824

SQL之连接查询

因为不同表之间的数据具有不同的用途字段,连接查询可以将我们需要用到的两个表的不同字段进行关联,从而找到我们有用的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。连接操作除了可以是两表连接,一个表于其自身连接外,还可以是两个以上的表进行连接,后者通常 称为多表连接。对于不同的DBMS,支持的集合运算不同,例如MySQL只支持并运算,但是集合运算大都可以使用关系运算符进行替换或者使用嵌套查询,因此不必担心集合运算连接查询

m0_62172219的博客 6071

SQL 内连接外连接自连接,联合查询,子查询

自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。外连接分为两种,分别是:左外连接 外连接。对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。而对于自连接查询,可以是内连接查询,也可以是外连接查询。项目开发中一般用左外连接,右外连接也可以转换成左外连接。标量子查询(子查询结果为单个值)语句,称为嵌套查询,又称子查询。的所有数据,当然也包含表。的所有数据,当然也包含表。子查询外部的语句可以是。...

m0_57667214的博客 377

【数据库】聚合查询、联合查询内连接外连接自连接、子查询,附sql语句及结果。

文章目录1.联合查询内连接外连接自连接 1.联合查询 实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积: 注意:关联查询可以对关联表使用别名。 内连接 语法: select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件; select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件; 案例: -- 成绩表对学生表是多对1关系,查询总成绩是根据成绩表的同学id来进行分组的 S

weixin_52290314的博客 2556

数据库之SQL(基本连接,内连接,左外连接,右外连接,全外连接,交叉连接,自连接

之前的博客内容我们分享了数据表的查询与管理,但那只是针对数据库中的一个表格进行的查询管理,现在如果我们想要同时看到两个数据表中的数据的话,那要怎么办呢?采用多连接查询的方式。 SQL中有哪几种多连接的方式? 有七种连接的方式: 基本连接,内连接,左外连接,右外连接,全外连接,交叉连接,自连接 如果对连接方式了解的人看到这里会感到很熟悉,但对于不了解的人...

Elsa~的博客 1万+

SQL查询--内连接外连接自连接查询

先创建2个表:学生表教师表 1.内连接: 在每个表中找出符合条件的共有记录。[x inner join y on...] 第一种写法:只用where SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t,student s WHERE t.ID=s.TEACHER_ID 第二种写法:使用 join..on.. ...

weixin_30284355的博客 132

SQL中的内连接查询外连接查询

在项目开发中,单表的查询肯定无法满足所有的业务,所以很多时候都是多表的连接查询。接下来总结一下SQL中的多表关联查询,以MySQL为例。 前期准备 在数据库中创建以下几张表并添加一些数据。 1、部门表(tb_dept),如下 2、员工表(tb_emp),如下。可以看到后勤中心是没有员工的,一会看区别。 3、工资表(tb_salary),如下 三张表的关系是,一个部门有多个员...

好记性不如烂笔头 2万+

SQL Server 数据库之连接查询

连接查询

程序员小白的博客 6719

Mysql多表查询

mysql 多表查询

铁马冰河入梦来 1045

sql语句———多表联查

连接查询 内连接: 相当于查询集合A与集合B的交集部分 外连接外连接查询左表所有数据,以及两张表交集部分数据 右外连接查询右表所有数据,以及两张表交集部分数据 自连接:当前表与自身的连接查询自连接必须使用表别名 -- 内连接 -- 内连接演示 -- 1、查询每一个员工的姓名,以及关联的部门的名称(隐式内连接实现) -- 表结构:emp,dept -- 连接条件:emp.dept_id = dept.id select emp.name, dept.name from emp, dept w

weixin_57821489的博客 2万+

Mysql的高级查询SQL关联查询内连接/外连接/自连接)/子查询

定义:返回右表(B)所有的数据(主表),以及左表(A)与右表(B)对应的数据,没有则返回null(红色部分)定义:返回左表(A)所有的数据(主表),以及右表(B)与左表(A)对应的数据,没有则返回null(红色部分)定义:子查询也叫嵌套查询,将一个查询结果当作另一个查询的条件或结果集。子查询最接近思考方式,最自然的查询。定义:组合两个表的记录,返回关联字段相符的记录,也就是返回表的交集(红色部分)分类:单行子查询(=),多行子查询(in)常见:内连接/外连接/自连接。定义:关联查询又叫连接查询

m0_53780713的博客 1139

MySQL学习总结(三)DQL语言之分组查询/连接查询/笛卡尔乘积现象/sql92标准/内连接/等值连接/非等值连接/自连接/sql99标准/外连接/左外连接/右外连接/全外连接/交叉连接

一、分组查询 格式: SELECT 分组函数,列(要求出现在GROUP BY的后面) FROM 表 【WHERE 筛选条件】 GROUP BY 分组的列表 【ORDER BY 子句】 别名

ZaynFox的博客 319
上一篇: web.xml中url-pattern匹配规则
下一篇: hadoop面试题整理(一)
zdp072
博客等级 码龄16年 689粉丝 519原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值