MySQL(3)——数据库联表查询(易理解)

mysql的数据库联表查询

该部分内容是数据库的重点,尽量讲得通俗易懂

目录

mysql的数据库联表查询

一、自联结——表与自己联结

二、表联结——两个不同表联结

1.内部联结

2.外部联结

三、组合查询UNION

1.UNION

2.UNION ALL


一、自联结——表与自己联结

首先来看个例子:

假如你发现某物品(其ID为1)存在问题,因此想知道⽣产该物品的供应商⽣产的其他物品 是否也存在这些问题。此查询要求⾸先找到⽣产ID为1的物品的供应商,然后找出这个供应 商⽣产的其他物品。

使用子查询
select prod_id,prod_name
from products
where vend_id = (select vend_id from products where prod_id = 1);
使用联结查询:
select p1.prod_id,p1.prod_name
from products as p1,products as p2
where p1.vend_id = p2.vend_id and p2.prod_id = 1;

看似使用子查询很清晰,容易理解,为什么还要进行联表查询?因为子查询的的性能比联表查询的性能低。数据库追求的是越快越好,能最求高性能,绝不用低性能。后面还有专门讲数据库的索引,它也是为了提高数据库的查询速度而成为重点。

二、表联结——两个不同表联结

下面通过一个简单的例子讲解以下内容:

创建表t1
CREATE TABLE t1(
	sid VARCHAR(20),
	sname VARCHAR(20)
);

插入t1数据
INSERT INTO t1 VALUES
(1,'张三'),
(2,'李四');

创建表t2
CREATE TABLE t2(
	sid VARCHAR(20),
	class VARCHAR(20)
);

插入t2数据
INSERT INTO t2 VALUES
(2,'2班'),
(3,'3班');

1.内部联结

SELECT * FROM t1 JOIN t2 ON t1.sid = t2.sid;

等同于

select * from t1, t2 where t1.sid = t2.sid;

结果:

查询出来的结果是左表和右表都有的数据结果;

 

 为什么要用联结,理由同自联结阐述。

2.外部联结

2.1左联结

SELECT * FROM t1 LEFT JOIN t2 ON t1.sid = t2.sid;

结果:以左边的表查询出来行的结果为基准,右边表的结果如果有则显示,没有则为null;

 

2.2右联结

SELECT * FROM t1 RIGHT JOIN t2 ON t1.sid = t2.sid;

结果: 以右边的表查询出来行的结果为基准,左边表的结果如果有则显示,没有则为null;

三、组合查询UNION

条件:union查询两个sql语句的列数要相等,且同一列的数据类型要相似。

1.UNION

union的结果会自动去重:
SELECT * FROM t1 LEFT JOIN t2 ON t1.sid = t2.sid
UNION
SELECT * FROM t1 RIGHT JOIN t2 ON t1.sid = t2.sid;

结果:

2.UNION ALL

union all的结果不去重:
SELECT * FROM t1 LEFT JOIN t2 ON t1.sid = t2.sid
UNION ALL
SELECT * FROM t1 RIGHT JOIN t2 ON t1.sid = t2.sid;

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值