MySQL必知必会 -- 子查询的使用

子查询

查询(query) 任何SQL语句都是查询。但此术语一般指SELECT语句。
SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询。

枚举类型

美剧类型限制了字段的值,字段的值只能从限制的字符中取一个,可以使用值,也可以使用数字代替,1为第一个值,例如:

MariaDB [test]> create table ss (state enum('good','bad','secret'),user varchar(20))
MariaDB [test]> insert into ss value('good','user1');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> insert into ss value('secret','user2');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> insert into ss value(3,'user3');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> insert into ss value(2,'user4');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> insert into ss value(1,'user5');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> insert into ss value(1,'user6');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> insert into ss value(2,'user7');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> select * from ss;
+--------+-------+
| state  | user  |
+--------+-------+
| good   | user1 |
| secret | user2 |
| secret | user3 |
| bad    | user4 |
| good   | user5 |
| good   | user6 |
| bad    | user7 |
+--------+-------+
7 rows in set (0.00 sec)

它和集合的区别在于:

在集合字段中可以制定做个值,比如,上面枚举的状态只能有一个(1或者2或者3),而集合类型可以有多个:(1或者1,2或者1,2,3)

使用子查询

MariaDB [test]> select user from linux where sex = 'girl';
+-------+
| user  |
+-------+
| user2 |	/找出 linux 表中女生的 user 名
| user7 |
| user6 |
+-------+
3 rows in set (0.00 sec)

MariaDB [test]> select  state from ss where user in ('user2','user6','user7');
+--------+
| state  |
+--------+
| secret |	/找出ss表中suer名为()内的状态
| good   |
| bad    |
+--------+
3 rows in set (0.00 sec)

MariaDB [test]> select  state from ss where user in (select user from linux where sex = 'girl');
+--------+
| state  |
+--------+
| secret |	/使用子查询
| good   |
| bad    |
+--------+
3 rows in set (0.00 sec)

在执行的时候会首先执行子查询。

嵌套子查询


MariaDB [test]> select * from hour;
+-------+-------+
| state | hours |
+-------+-------+
| good  |    12 |
| bad   |     8 |
| bad   |    10 |
+-------+-------+
3 rows in set (0.00 sec)

MariaDB [test]> select  hours from hour where state in (
    -> select state from ss where user in (
    -> select user from linux where sex = 'girl')
    -> );
+-------+
| hours |
+-------+
|    12 |
|     8 |
|    10 |
+-------+
3 rows in set (0.00 sec)

我们在使用子查询的时候,一定要注意该保证SELECT语句具有与WHERE子句中相同数目的列
子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于(<>)等。

作为计算字段使用子查询

  • 使用子查询的另一方法是创建计算字段。假如需要显示customers表中每个客户的订单总数。订单与相应的客户ID存储在orders表中。
    在这里插入图片描述
    这里的 orders 是作为一个计算字段使用的,而且使用了完全限定的列名,因为两张表里都有 cust_id 列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值