≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > MySQL

MySQL笔记之子查询使用介绍

人气:326 时间:2020-07-09

这篇文章主要为大家详细介绍了MySQL笔记之子查询使用介绍,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编小韵来看看吧!

子查询是将一个查询语句嵌套在另一个查询语句中

内层查询语句的查询结果,可以为外层查询语句提供查询条件

因为在特定情况下,一个查询语句的条件需要另一个查询语句来获取

参考表:employee

 

参考表:department

带IN关键字的子查询

代码如下:


mysql> SELECT * FROM employee
    -> WHERE d_id IN
    -> (SELECT d_id FROM department);
+------+------+--------+------+------+--------------------+
| num  | d_id | name   | age  | sex  | homeaddr           |
+------+------+--------+------+------+--------------------+
|    1 | 1001 | 张三   |   26 | 男   | 北京市海淀区         |
|    2 | 1001 | 李四   |   24 | 女   | 北京市昌平区         |
|    3 | 1002 | 王五   |   25 | 男   | 湖南长沙市           |
+------+------+--------+------+------+--------------------+
 rows in set (0.00 sec)

此处首先查询出department表中所有d_id字段的信息,并将结果作为条件

接着查询employee表中以d_id为条件的所有字段信息

NOT IN的效果与上面刚好相反

带比较运算符的子查询

代码如下:


mysql> SELECT d_id, d_name FROM department
    -> WHERE d_id!=
    -> (SELECT d_id FROM employee WHERE age=24);
+------+-----------+
| d_id | d_name    |
+------+-----------+
| 1002 | 生产部    |
| 1003 | 销售部    |
+------+-----------+
 rows in set (0.00 sec)

这里查询出了哪些部门没有年龄为24岁的员工,看起来有点复杂

 

此外,运算符还有很多,这里不再赘述


带EXISTS关键字的子查询

EXISTS关键字表示存在。使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值,如果内层查询语句查询到满足条件的记录,就返回true,否则返回false

当返回的值为true时,外层查询语句将进行查询,否则不进行查询

代码如下:


mysql> SELECT * FROM employee
    -> WHERE EXISTS
    -> (SELECT d_name FROM department WHERE d_id=1004);
Empty set (0.00 sec)

此处内层循环并没有查询到满足条件的结果,因此返回false,外层查询不执行

 

NOT EXISTS刚好与之相反

当然,EXISTS关键字可以与其他的查询条件一起使用

条件表达式与EXISTS关键字之间用AND或者OR来连接

代码如下:


mysql> SELECT * FROM employee
    -> WHERE age>24 AND EXISTS
    -> (SELECT d_name FROM department WHERE d_id=1003);
+------+------+--------+------+------+--------------------+
| num  | d_id | name   | age  | sex  | homeaddr           |
+------+------+--------+------+------+--------------------+
|    1 | 1001 | 张三   |   26 | 男   | 北京市海淀区         |
|    3 | 1002 | 王五   |   25 | 男   | 湖南长沙市           |
+------+------+--------+------+------+--------------------+
 rows in set (0.00 sec)

 

带ANY关键字的子查询

ANY关键字表示满足其中任一条件

代码如下:


mysql> SELECT * FROM employee
    -> WHERE d_id!=ANY
    -> (SELECT d_id FROM department);
+------+------+--------+------+------+--------------------+
| num  | d_id | name   | age  | sex  | homeaddr           |
+------+------+--------+------+------+--------------------+
|    1 | 1001 | 张三   |   26 | 男   | 北京市海淀区         |
|    2 | 1001 | 李四   |   24 | 女   | 北京市昌平区         |
|    3 | 1002 | 王五   |   25 | 男   | 湖南长沙市           |
|    4 | 1004 | Aric   |   15 | 男   | England            |
+------+------+--------+------+------+--------------------+
 rows in set (0.00 sec)

 

带ALL关键字的子查询

ALL关键字表示满足其中所有条件

代码如下:


mysql> SELECT * FROM employee
    -> WHERE d_id>=ALL
    -> (SELECT d_id FROM department);
+------+------+------+------+------+----------+
| num  | d_id | name | age  | sex  | homeaddr |
+------+------+------+------+------+----------+
|    4 | 1004 | Aric |   15 | 男   | England  |
+------+------+------+------+------+----------+
 row in set (0.00 sec)

暂时不明白这两条语句是什么意思,到时候再补上

 


UNION合并查询结果

代码如下:


mysql> SELECT d_id FROM employee
    -> UNION
    -> SELECT d_id FROM department;
+------+
| d_id |
+------+
| 1001 |
| 1002 |
| 1004 |
| 1003 |
+------+
 rows in set (0.00 sec)

合并比较好理解,也就是将多个查询的结果合并在一起,然后去除其中的重复记录

 

如果想保存重复记录可以使用UNION ALL语句

本文来自:http://www.q1010.com/177/9992-0.html

注:关于MySQL笔记之子查询使用介绍的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:MYSQL

您可能感兴趣的文章

  • DBA应该知道的一些关于SQL Server跟踪标记的使用
  • 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
  • 使用java处理字符串公式运算的方法
  • MySQL的重装问题解决方法
  • MySQL使用source 命令乱码问题解决方法
  • 深入char、varchar、text和nchar、nvarchar、ntext的区别分析
  • 深入数据库通用的连接方式分析
  • MySQL笔记之数据类型分析
  • MySQL笔记之视图的使用分析
  • MySQL 主主同步配置步骤
上一篇:PHP MySQLi扩展库 预处理技术的使用分析
下一篇:利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
热门文章
  • mysql 修改character_set_server为utf-8的简单示例
  • 解决MySQL丢失文件localhost.localdomain.pid、mysql.sock的示例
  • MySQL 数据类型binary和varbinary的简单示例
  • MySQL:reading initial communication packet问题解决方法
  • MySql 表类型MYISAM、InnoDB区别
  • bash: mysql: command not found 的解决方法
  • MYSQL默认用户名ROOT修改方法
  • MySQL 常用命令菜鸟教程
  • MySQL 使用命令行新建用户并授予权限
  • MySql 数据库物理文件存放位置查看示例
  • 最新文章
    • MySQL查看死锁与解除死锁的简单示例
    • MySQL 慢查询的功能实例
    • MySQL查看死锁与去除死锁的简单示例
    • MySQL找出未提交事务的SQL的简单示例
    • MySQL锁阻塞的的简单示例
    • MySQL中的binary类型使用操作的示例
    • SQL优化教程之in与range查询的简单示例
    • MySQL 的 21 个规范、优化最佳实践!
    • MySQL 字符类型大小写敏感的简单示例
    • 解决mybatis-plus分页传入参数后sql where条件没有limit分页信息的问题

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。