mysql数据库之内连接、左外连接、右外连接

52 篇文章 2 订阅
23 篇文章 0 订阅

一、内联接(Inner Join):匹配2张表中相关联的记录。

1、隐式内连接。

select 字段列表 from 表1,表2  where 条件......;

示例:查询每一个员工的姓名以及关联的部门名称。

梳理:表结构:emp,dept。连接条件:emp.dept_id=dept.id

select emp.name,dept.name from emp,dept where emp.dept_id=dept.id;

给表起别名

select e.name,d.name from emp e,dept d where e.dept_id=d.id;

2、显示内连接。

select 字段列表 from 表1 [INNER]JOIN  表2 ON 连接条件......;

示例:查询每一个员工的姓名以及关联的部门名称。

梳理:表结构:emp,dept。连接条件:emp.dept_id=dept.id

#显示内连接中inner关键字可省略
select e.name,d.name from emp e inner join dept d on e.dept_id=d.id;

二、左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。

select 字段名称 from 表1 LEFT [OUTER] JOIN 表2 ON 条件......;

示例:查询emp表中的所有数据,和对应的部门信息。

梳理:表结构:emp,dept。连接条件:emp.dept_id=dept.id

select e.*,d.name from emp e LEFT [OUTER] JOIN dept d ON emp.dept_id=dept.id;

三、右外联接(Right  Outer  Join):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示。

select 字段名称 from 表1 RIGHT  [OUTER] JOIN 表2 ON 条件......;

#右外连接
select e.*,d.*  from emp e RIGHT  [OUTER] JOIN dept d ON e.dept_id=d.id;
#改为左外连接
select e.*,d.*  from dept d LEFT  [OUTER] JOIN emp e ON e.dept_id=d.id;

四、自连接:可以是内连接查询,也可以使外连接查询。

select 字段列表 from 表A 别名A JOIN 表A 别名B  ON  条件......;

示例1:查询员工及其所属领导的名字。

 select a.name,b.name from emp a,emp.b  where a.managerid=b.id;

示例2:查询员工及其所属领导的名字,员工没有领导也要查出来。

 select a.name ‘员工’,b.name ‘领导’ from emp a left join emp.b on a.managerid=b.id;

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据库系统概论数据查询之连接查询 ⼤纲 1. 等值或其他⽐较连接 2. ⾃⾝连接 3. 外连接 4. 多表连接 SQL中"连接"是⽤"连接条件来表达的"。 连接条件⼀般格式: 表1.列名1<⽐较运算符>表2.列名2。 等值连接:连接运算符为"=" ⾃然连接:把⽬标列中重复的属性列去掉。 在SQL中没有⾃然连接,即⾃动把冗余部分删掉,故需要在SELECT中需显⽰的字段显⽰出来。 查询选修2课程并且分数⼤于80分的学⽣的学号和名字。 SELECT Student.Sno,Sname From Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno='2' AND SC.Grade>80 连接操作的执⾏过程: 1、嵌套循环法 2、排序合并法,排序之后使⽤指针移动 3、索引连接 ⾃⾝连接 ⼀个表与其⾃⼰进⾏连接,是⼀种特殊的连接。 需要给表起别名以⽰区别。 由于所有属性名都是同名属性,因此必须使⽤别名前缀 查询每⼀个每门课的先修课名称。 SELECT FIRST.Cname,SECOND.Cname From Course First,Course Second Where First.Cpno=Second.Cno 外连接 外连接⼀般格式: Select … From 表⼀ Right/Left outer JOIN 表⼆ ON (连接条件) 外连接与普通连接的区别: 普通连接操作只输出满⾜连接条件的元组。 外连接以指定表为连接主体,不满⾜连接条件的元组也输出 左外连接:以左边为主体,列出左边关系,Left outer JOIN 外连接:以边为主体,列出边关系,Right outer JOIN 如想列出每个学⽣的基本情况和选课情况,若有些学⽣没有选课,使⽤普通连接时这些学⽣的信息就被舍弃掉。⽽外连接则会保留这些 学⽣的信息,在选课的属性写Null。 列出每个学⽣的基本情况和选课情况 Select Student.Sno,Sname,Ssex,Sage,Sdept,cno,grade From Student Student Left outer JOIN SC ON (Student.Sno=SC.Sno) 多表连接 两个以上的表进⾏连接 查询每个学⽣的学号,姓名,选修课程名及成绩。
以下是Mysql数据库中左连接left join、连接right join和内连接inner join的介绍和演示: 1. 左连接left join 左连接left join会返回左表中所有的记录,以及表中符合条件的记录。如果表中没有符合条件的记录,则返回NULL。 语法: ``` SELECT * FROM a_table LEFT JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个表,一个是学生表students,一个是成绩表scores。学生表中有学生的ID和姓名,成绩表中有学生的ID和成绩。我们需要查询所有学生的姓名和成绩,如果学生没有成绩,则成绩为NULL。 ```sql SELECT students.name, scores.score FROM students LEFT JOIN scores ON students.id = scores.id; ``` 2. 连接right join 连接right join会返回表中所有的记录,以及左表中符合条件的记录。如果左表中没有符合条件的记录,则返回NULL。 语法: ``` SELECT * FROM a_table RIGHT JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个表,一个是学生表students,一个是成绩表scores。学生表中有学生的ID和姓名,成绩表中有学生的ID和成绩。我们需要查询所有成绩和对应的学生姓名,如果成绩表中没有对应的学生,则姓名为NULL。 ```sql SELECT students.name, scores.score FROM students RIGHT JOIN scores ON students.id = scores.id; ``` 3. 内连接inner join 内连接inner join会返回左表中都符合条件的记录。 语法: ``` SELECT * FROM a_table INNER JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个表,一个是学生表students,一个是成绩表scores。学生表中有学生的ID和姓名,成绩表中有学生的ID和成绩。我们需要查询所有有成绩的学生的姓名和成绩。 ```sql SELECT students.name, scores.score FROM students INNER JOIN scores ON students.id = scores.id; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小格子衬衫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值