#子查询-某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就要用到子查询。用于子查询的关键字主要包括:
in、not in、=、!=、exists、not exists等等。
#从emp表中查询出所有部门在dept表中的所有记录 mysql> select * from dept;
+--------+----------+
| deptno | deptname |
+--------+----------+
| 1 | tech |
| 2 | sale |
| 3 | hr |
| 4 | sl |
+--------+----------+
rows in set (0.01 sec) mysql> select * from emp;
+-------+------------+------------+---------+--------+------+
| ename | birth | hirdate | sal | deptno | age1 |
+-------+------------+------------+---------+--------+------+
| zzx1 | 2000-01-01 | 2000-01-01 | 2000.00 | 1 | 21 |
| zzx1 | 2002-03-09 | 2009-04-03 | 2001.00 | 3 | 22 |
| ttx2 | 2023-04-10 | 2010-03-04 | 4000.00 | 4 | 23 |
| ssss | 2019-01-01 | 2018-01-01 | 5000.00 | 2 | 24 |
+-------+------------+------------+---------+--------+------+
rows in set (0.00 sec) mysql> select * from emp where deptno in(select deptno from dept);
+-------+------------+------------+---------+--------+------+
| ename | birth | hirdate | sal | deptno | age1 |
+-------+------------+------------+---------+--------+------+
| zzx1 | 2000-01-01 | 2000-01-01 | 2000.00 | 1 | 21 |
| ssss | 2019-01-01 | 2018-01-01 | 5000.00 | 2 | 24 |
| zzx1 | 2002-03-09 | 2009-04-03 | 2001.00 | 3 | 22 |
| ttx2 | 2023-04-10 | 2010-03-04 | 4000.00 | 4 | 23 |
+-------+------------+------------+---------+--------+------+
rows in set (0.00 sec) #如果子查询记录数唯一,还可以用=代替in mysql> select * from emp where deptno=(select deptno from dept limit 1); +-------+------------+------------+---------+--------+------+ | ename | birth | hirdate | sal | deptno | age1 | +-------+------------+------------+---------+--------+------+ | zzx1 | 2000-01-01 | 2000-01-01 | 2000.00 | 1 | 21 | +-------+------------+------------+---------+--------+------+
row in set (0.00 sec) # 某些情况下,子查询可转化为表连接 mysql> select * from emp where deptno in(select deptno from dept); +-------+------------+------------+---------+--------+------+ | ename | birth | hirdate | sal | deptno | age1 | +-------+------------+------------+---------+--------+------+ | zzx1 | 2000-01-01 | 2000-01-01 | 2000.00 | 1 | 21 | | ssss | 2019-01-01 | 2018-01-01 | 5000.00 | 2 | 24 | | zzx1 | 2002-03-09 | 2009-04-03 | 2001.00 | 3 | 22 | | ttx2 | 2023-04-10 | 2010-03-04 | 4000.00 | 4 | 23 | +-------+------------+------------+---------+--------+------+
rows in set (0.00 sec) #转换为表连接后
mysql> select emp.* from emp,dept where emp.deptno=dept.deptno;
+-------+------------+------------+---------+--------+------+
| ename | birth | hirdate | sal | deptno | age1 |
+-------+------------+------------+---------+--------+------+
| zzx1 | 2000-01-01 | 2000-01-01 | 2000.00 | 1 | 21 |
| ssss | 2019-01-01 | 2018-01-01 | 5000.00 | 2 | 24 |
| zzx1 | 2002-03-09 | 2009-04-03 | 2001.00 | 3 | 22 |
| ttx2 | 2023-04-10 | 2010-03-04 | 4000.00 | 4 | 23 |
+-------+------------+------------+---------+--------+------+
rows in set (0.00 sec) #union和union all的主要区别是union all是把结果集直接合并在一起
union是将union all后的结果在进行一次distinct,去除重复记录后的结果。
mysql> select deptno from emp union all select deptno from dept;
+--------+
| deptno |
+--------+
| 1 |
| 3 |
| 4 |
| 2 |
| 1 |
| 2 |
| 3 |
| 4 |
+--------+
rows in set (0.00 sec) mysql> select deptno from emp union select deptno from dept;
+--------+
| deptno |
+--------+
| 1 |
| 3 |
| 4 |
| 2 |
+--------+
rows in set (0.00 sec)

MySQL-SQL基础-子查询的更多相关文章

  1. SQL基础-子查询&EXISTS&UNION

    一.子查询 1.使用子查询作为计算字段 子查询:嵌套在其他查询中的查询 现在有两个表,student表和teacher表 创建teacher表,并插入数据: CREATE TABLE `teacher ...

  2. 2.Mysql SQL基础

    2.Mysql SQL基础2.1 SQL简介 SQL(Structure Query Language)是结构化查询语言.2.2 SQL使用入门 2.2.1 SQL分类 SQL分为DDL.DML(DQ ...

  3. SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]

    --====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...

  4. SQL Fundamentals: 子查询 || 分析函数(PARTITION BY,ORDER BY, WINDOWING)

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

  5. MySQL中IN子查询会导致无法使用索引

    今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表 ...

  6. SQL Fundamentals: 子查询 || WHERE,HAVING,FROM,SELECT子句中使用子查询,WITH子句

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

  7. MySQL里面的子查询

    一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:dis ...

  8. SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

  9. MySQL中in子查询会导致无法使用索引问题(转)

    MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...

  10. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

随机推荐

  1. java跨平台性说明

    一.举例说明 我们知道,只要是用标准C开发的程序,使用不同的编译器编译后的可执行文件是可以在对应平台运行的,比如windows可以使用VC编译,那编译后的exe文件就可以在windows下运行:liu ...

  2. 第一篇 -- Sprint Tool Suite配置和Hello World编写

    首先需要安装 1. Sprint Tool Suite(本次所用版本:spring-tool-suite-3.8.3.RELEASE-e4.6.2-win32-x86_64) 2. Tomcat(本次 ...

  3. ts 学习笔记 - 进阶篇 1

    目录 进阶 类型别名 字符串字面量类型 元祖 例子 越界的元素 枚举 手动赋值 常数项和计算所得项 常数枚举 外部枚举 进阶 类型别名 类型别名用来给一个类型起个新名字 type Name = str ...

  4. Jenkins-CI 远程代码执行漏洞(CVE-2017-1000353)

    影响范围 所有Jenkins主版本均受到影响(包括<=2.56版本) 所有Jenkins LTS 均受到影响( 包括<=2.46.1版本) poc下载 https://github.com ...

  5. ABC165C题解

    题目 看题目的时候一脸懵,直到看见数据范围 \[N \le 10,\; M \le 10,\; Q \le 50 \] 之后才意识到问题的严重性. 毕竟数据如此的小,我们完全可以用阶乘复杂度算法卡过去 ...

  6. JUC学习笔记(一)

    1.什么是 JUC 1.1.JUC简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的.JUC 就是 java.util .concurrent 工具包的简称.这是一个处理 ...

  7. 腾讯技术团队整理,为什么 Flutter 能最好地改变移动开发

    导语 | Flutter 框架是当下非常热门的跨端解决方案,能够帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面等多端开发.但仍然有很多产品.设计.甚至开发同学并不了解 Flut ...

  8. Linux进程理解与实践(五)细谈守护进程

    一. 守护进程及其特性      守护进程最重要的特性是后台运行.在这一点上DOS下的常驻内存程序TSR与之相似.其次,守护进程必须与其运行前的环境隔离开来.这些环境包括未关闭的文件描述符,控制终端, ...

  9. windows的自动登录和隐藏用户

    Launch Regedit. #r -> regedit 1. Navigate to: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Cu ...

  10. Lab: 2FA bypass using a brute-force attack:暴力破解双重验证靶场复盘(困难级别)

    靶场内容: This lab's two-factor authentication is vulnerable to brute-forcing. You have already obtained ...