MySQL之子查询练习题

子查询的结果是一个值的时候

子查询结果只要是单个值,肯定在WHERE后面作为条件
SELECT 查询字段 FROM 表 WHERE 字段[= > < <>](子查询);

子查询结果是单列多行的时候

子查询结果只要是单列,肯定在WHERE后面作为条件
子查询结果是单列多行,结果集类似于一个数组,父查询使用IN运算符
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);

子查询的结果是多行多列

子查询结果只要是多行多列,肯定在FROM后面作为
SELECT ... FROM (子查询) 表别名 WHERE 条件;
子查询作为表需要取别名,否则这张表没用名称无法访问表中的字段
– 用户表(user)

   create table `user` (                                  
       `id` int auto_increment primary key,                
       `username` varchar(50)  -- 用户姓名                                                
  );

– 订单表(orders)

   create table `orders` (                                                  
          `id` int  auto_increment primary key,                                  
          `price` double,                                           
          `user_id` int                                       
        );

– 给订单表添加外键约束

– 向user表中添加数据

		insert into user values(3,'张三');
		insert into user values(4,'李四');
		insert into user values(5,'王五');
		insert into user values(6,'赵六');

– 向orders 表中插入数据

		insert into orders values(1,1314,3);
		insert into orders values(2,1314,3);
		insert into orders values(3,15,4);
		insert into orders values(4,315,5);
		insert into orders values(5,1014,null);
select * from user;

在这里插入图片描述

select * from orders;

在这里插入图片描述

– 练习:
– 查询用户的订单,没有订单的用户不显示

select * from user u,orders o where u.id = o.user_id;

在这里插入图片描述

– 查询所有用户的订单详情

select * from user u left join orders o on u.id = o.user_id;

在这里插入图片描述

– 查询所有订单的用户详情

select * from user u right join orders o on u.id = o.user_id;

在这里插入图片描述

– 练习:
– 查看用户为张三的订单详情

select id from user where username = '张三';

select * from orders o join (select id from user where username = '张三') u on o.user_id = u.id;

在这里插入图片描述

– 查询出订单的价格大于300的所有用户信息。

select user_id from orders where price > 300;

select * from user where id in (select user_id from orders where price > 300);

在这里插入图片描述

– 查询订单价格大于300的订单信息及相关用户的信息。

select * from user u  join (select * from orders where price > 300) o on u.id = o.user_id;

在这里插入图片描述

  1. 子查询的结果是单行单列(一个值情况), 一般放在where后面作为条件**, 通过=,>,<,<>**
select ... from ... where 列 [=><<>...] (子查询) 
  1. 子查询的结果是单列多行, 一般放在where后面作为条件**, 通过in**
select ... from ... where 列 in (子查询) 
  1. 子查询的结果是多行多列, 一般放在from后面作为虚拟表, 需要给虚拟表取别名
select ... from (子查询) as 别名   where 条件

参考:黑马彭智林

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值