MYSQL-多表查询

24.多表查询_子查询

结果是单行单列的

标准语法:

SELECT 列名 FROM 表名 WHERE 列名=(SELECT 列名 FROM 表名 [WHERE 条件]);
-- 查询年龄最高的用户姓名
SELECT MAX(age) FROM USER;

SELECT NAME,age FROM USER WHERE age=(SELECT MAX(age) FROM USER);

结果是多行单列的

标准语法:
SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 [WHERE 条件]); 
-- 查询张三和李四的订单信息
SELECT * FROM orderlist WHERE uid IN (1,2);

SELECT id FROM USER WHERE NAME IN ('张三','李四');

SELECT * FROM orderlist WHERE uid IN (SELECT id FROM USER WHERE NAME IN ('张三','李四'));

结果是多行多列的

标准语法:

SELECT 列名 FROM 表名 [别名],(SELECT 列名 FROM 表名 [WHERE 条件]) [别名] [WHERE 条件];
-- 查询订单表中id大于4的订单信息和所属用户信息
SELECT * FROM orderlist WHERE id > 4;

SELECT

​	u.name,

​	o.number

FROMUSER u,(SELECT * FROM orderlist WHERE id > 4) o

WHERE

​	o.uid=u.id;

25.多表查询_自关联查询

-- 创建员工表
CREATE TABLE employee(

​	id INT PRIMARY KEY AUTO_INCREMENT,	-- 员工编号

​	NAME VARCHAR(20),			-- 员工姓名

​	mgr INT,				-- 上级编号

​	salary DOUBLE				-- 员工工资

);
-- 添加数据
INSERT INTO employee VALUES (1001,'孙悟空',1005,9000.00),

(1002,'猪八戒',1005,8000.00),

(1003,'沙和尚',1005,8500.00),

(1004,'小白龙',1005,7900.00),

(1005,'唐僧',NULL,15000.00),

(1006,'武松',1009,7600.00),

(1007,'李逵',1009,7400.00),

(1008,'林冲',1009,8100.00),

(1009,'宋江',NULL,16000.00);
-- 查询所有员工的姓名及其直接上级的姓名,没有上级的员工也需要查询

分析

​ 员工信息 employee表

​ 条件:employee.mgr = employee.id

​ 查询左表的全部数据,和左右两张表有交集部分数据,左外连接

SELECT

​	e1.id,

​	e1.name,

​	e1.mgr,

​	e2.id,

​	e2.name

FROM

​	employee e1

LEFT OUTER JOIN

​	employee e2

ON

​	e1.mgr = e2.id;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zxy_spure

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

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

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

打赏作者

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

抵扣说明:

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

余额充值