Mysql入门技能树-连接查询

前言

Mysql入门技能树-连接查询

连接查询

INNER JOIN

以下关于INNER JOIN的说法错误的是:
在这里插入图片描述
错误的是C
不管是什么连接都是连接的其他表越少性能越好

LEFT JOIN

现有部门表

create table department(
id int primary key auto_increment,
name varchar(256)
)

和员工表

create table employee(
id int primary key auto_increment,
dept_id int,
name varchar(256),
post varchar(16)
)

Joe 想要列出所有的部门,如果这个部门有部门助理(post 为 assistant),则将 stuff 的名字也列出来,那么这个查询应该是:
在这里插入图片描述
在这里插入图片描述
答案是:C

B只会显示有部门助理的部门,如果部门内无部门助理,则相应部门不会显示,不满足题意列出所有的部门
AD和B一样的效果,因为是在where后限定的post 为 assistant
针对答案C我们换一种写法:

select d.id, d.name, e.name as assistant
from department as d
left join employee as e
on e.dept_id =d.id and e.post=‘assistant’

RIGHT JOIN

现有部门表和员工表
公司经过了一轮调整后,员工信息有些混乱,现在 Joe 要写一个查询,找出部门信息写 错的员工,这些员工所在的部门在 department 表中没有对应记录。
在这里插入图片描述
在这里插入图片描述

A限定了员工表的id是空,直接排除
C以部门表作为主表,限制部门表id为空,id又是主键自增,正常情况下是无结果的
D右链接返回右表部门表中所有的数据记录和左表中符合条件的数据记录,最后限制了部门表部门id是空的,正常情况下是无结果的
答案是:B
针对答案B我们可以用左连接实现:

select e.id, e.name, e.dept_id, d.name
from employee  as e
left join department  as d
on e.dept_id =d.id
where d.id is null 

CROSS JOIN

Joe 需要生成 goods 表

create table goods(
    id int primary key auto_increment,
    category varchar(64),
    name varchar(256),
    price decimal(12, 4),
    stock int,
    upper_time timestamp
)

中所有T恤(category为T-Shirt)的所有尺寸,尺寸信息在 size 表

create table size(
    id int primary key auto_increment,
    name varchar(16)
)

中,那么这个查询应该是:
在这里插入图片描述
在这里插入图片描述

ACD语法错误
答案是B
right join/outter join/full join 跟完表名后都要跟 on 条件
其次mysql 也不支持full join
CROSS JOIN语句又称为交叉连接,当没有使用连接条件时,使用CROSS JOIN语句连接的两张表,每张表中的每行数据都会与另一张表中的所有数据进行连接。当使用连接条件时,会输出符合连接条件的结果数据。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

空空star

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

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

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

打赏作者

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

抵扣说明:

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

余额充值