博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL必知必会 -- 子查询的使用
阅读量:4203 次
发布时间:2019-05-26

本文共 2380 字,大约阅读时间需要 7 分钟。

子查询

查询(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 列

转载地址:http://uyxli.baihongyu.com/

你可能感兴趣的文章
应用软件性能测试的艺术(翻译)——序
查看>>
高级性能测试(翻译)
查看>>
Web安全测试解决方案
查看>>
今天开始上班
查看>>
开源测试研究方案泡汤了
查看>>
晒一下我培训的课程——应用系统性能测试规划、实施与分析
查看>>
利用 STAF 实现程序更新包的自动部署测试
查看>>
周末参加“北京干部管理职业技术学院”关于高职课程改革的专家讨论会
查看>>
软件自动化测试框架的发展
查看>>
实现haproxy+LNMT负载均衡架构
查看>>
论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
查看>>
论文浅尝 | 融合多粒度信息和外部语言知识的中文关系抽取
查看>>
论文浅尝 | GMNN: Graph Markov Neural Networks
查看>>
廖雪峰Python教程 学习笔记3 hello.py
查看>>
从内核看epoll的实现(基于5.9.9)
查看>>
python与正则表达式
查看>>
安装.Net Framework 4.7.2时出现“不受信任提供程序信任的根证书中终止”的解决方法
查看>>
input type=“button“与input type=“submit“的区别
查看>>
解决Github代码下载慢问题!
查看>>
1.idea中Maven创建项目及2.对idea中生命周期的理解3.pom文件夹下groupId、artifactId含义
查看>>