Mysql 子查询 (查询语句中带查询语句)
子查询:指一个“正常查询语句”中的某个部分(比如select部分,from 部分,where 部分)又出现了查询的一种查询形式,比如:
select * from 表名 where age > (一个子查询语句); select * from 表名 where age > (select avg(age) from 表名);可以根据需求不断的嵌套子查询 select * from 表名 where 字段名 > (select avg(字段名) from 表名 where 字段名 < (select ...));
测试数据
mysql> select * from test; +----+--------+------+------+ | id | name | sex | age | +----+--------+------+------+ | 1 | name1 | 女 | 15 | | 2 | name1 | 女 | 15 | | 4 | name2 | 男 | 30 | | 5 | name50 | 男 | 12 | +----+--------+------+------+
查询出大于平均年龄的用户数据 mysql> select * from test where age > (select avg(age) from test); +----+-------+------+------+ | id | name | sex | age | +----+-------+------+------+ | 4 | name2 | 男 | 30 | +----+-------+------+------+
- 标量子查询
含义: |
标量子查询就是指子查询的结果是“单个值”(一行一列)的查询。使用:
标量子查询通常用在where子句中,作为主查询的一个条件判断的数据。
本质上,标量子查询的结果,就可以直接当做“一个值”来使用。
取出的平均值除去标题栏,就是一行一列,查询结果可以直接当做值来使用
mysql> select avg(age) from test;
+----------+
| avg(age) |
+----------+
| 18.0000 |
+----------+类似于这样的查询也是一行一列,可以当做值来使用
mysql> select 18 as age;
+-----+
| age |
+-----+
| 18 |
+-----+上面的两种写法都可以代替这个 18 数字,区别就是一个是固定写死的,一个是通过查询计算之后得到的值,非固定值。
mysql> select * from test where age > 18;
+----+-------+------+------+
| id | name | sex | age |
+----+-------+------+------+
| 4 | name2 | 男 | 30 |
+----+-------+------+------+查询结果都是一样的
mysql> select * from test where age > (select 18);
+----+-------+------+------+
| id | name | sex | age |
+----+-------+------+------+
| 4 | name2 | 男 | 30 |
+----+-------+------+------+查询结果都是一样的
mysql> select * from test where age > (select avg(age) from test);
+----+-------+------+------+
| id | name | sex | age |
+----+-------+------+------+
| 4 | name2 | 男 | 30 |
+----+-------+------+------+
- 列子查询
含义:
列子查询查出的结果为“一列数据”,类似这样:mysql> select name from user;
+-------+
| name |
+-------+
| name1 |
| name2 |
| name3 |
| name4 |
+-------+使用;
列子查询通常用在 where 子句的 in 运算符中,代替 in 运算符中的“字面值”列表数据。比如:
select * from product where chandi in ('北京', '深圳', '天津')
如果 in 中的数据并不方便一个一个列出,但可以通过一个查询得到,就可以使用查询来实现:
select * from product where chandi in (select chandi from product);
相当于就是 in 中的数据无法固定写死,需要通过动态的去查询出来一个列表放到 in 中去动态使用。
- 行子查询
含义:
行子查询查出的结果通常是一行,类似这样:mysql> select name,age from user where age > 15;
+-------+------+
| name | age |
+-------+------+
| name1 | 18 |
| name3 | 20 |
| name4 | 30 |
+-------+------+使用:
行子查询的结果通常跟“行构造符”一起,在 where 条件子句中做为条件数据,类似这样:
select * from 表名 where (字段 1, 字段2) = (行子查询)
或这样,含义跟上一行是一样的, 即 row 可以省略
select * from 表名 where row(字段1, 字段2) = (行子查询)使用场景举例:找出指定省市的所有用户,这样就可以这么写查询了
select * from 表名 where row(省字段名, 市字段名) = ('上海', '徐汇区');
- 表子查询
含义:
当一个子查询查出的结果是“多行多列”的时候,就是表子查询。
表子查询的结果相当于一个表,可以直接当做一个表来使用。使用:
表子查询通常用在主查询的 from 子句中,作为一个“数据源”。通常我们查询表是这样:
select * from 表名 where 字段名 > 0;
但是现在这个表就不固定了,需要我们通过查询语句来得到并使用,这个查询的表必须要起别名:
select * from (select * from 表名 where 字段名 > 0) as table1;注意:
此时需要给该子查询设置一个别名,必须要加别名!!!,类似这样:
select * from (select... 子查询) as table1;
查询出年龄 age > 12 的用户
mysql> select * from (select * from test where age > 12) as table1;
+----+-------+------+------+
| id | name | sex | age |
+----+-------+------+------+
| 1 | name1 | 女 | 15 |
| 2 | name1 | 女 | 15 |
| 4 | name2 | 男 | 30 |
+----+-------+------+------+查询出年龄 age > 12 的用户总人数与平均年龄
mysql> select count(*) as 总人数, avg(age) as 平均年龄 from (select * from test where age > 12) as table1;
+-----------+--------------+
| 总人数 | 平均年龄 |
+-----------+--------------+
| 3 | 20.0000 |
+-----------+--------------+
- 子查询的特定关键字
- any、some、in、all、exists 关键字
Mysql 子查询 (查询语句中带查询语句)相关推荐
- 下列sql语句中哪条语句可为用户zhangsan分配数据库userdb表userinfo的查询和插入数据权限
下列sql语句中哪条语句可为用户zhangsan分配数据库userdb表userinfo的查询和插入数据权限(A). A: grant select,insert on userdb.userinfo ...
- 数据库SQL:在插入语句中使用查询查询语句(动态获取数据库自增字段的值)
在插入语句中使用查询: INSERT into 表名(获取自增id1 ,获取自增id2 ,字段3 ,...... ,字段N ) SELECT 表别名1.id, 表别名2.id ,"字段3的值 ...
- 【JavaWeb之旅二】MySQL数据库之SQL语句中的DML语句与DQL语句
SQL语句中的DML语句与DQL语句 文章目录 SQL语句中的DML语句与DQL语句 1.SQL语句之DML 1.1DML常见的语法 1.添加数据常见语句 2.修改.删除数据常用语法 2.SQL语句之 ...
- sql语句中的case语句
sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让我们看一下CASE的语法.在一般的SELECT中,其语法格 ...
- R语言嵌套的ifelse语距:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用。If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块
R语言嵌套的ifelse语句:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用.If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块 ...
- java中if(a.c())_if 语句中的条件语句只能是() 类型。_学小易找答案
[单选题]设 x,y 均为已定义的类名,下列声明对象 x1 的语句中正确的是 ( ) [单选题]C# 中引入命名空间使用 [简答题]class Parent{ private String name; ...
- mysql能用case嵌套sql吗,关于sqlserver中查询语句中嵌套case语句使用方法
ryxxlong的博客 Sql server 中的 CASE 语句文章, 链接 http://ryxxlong.iteye.com/blog/531221 写的比较详细,具体内容如下,主要用于自己以后 ...
- mysql 查询 唯一_Mysql中如何查询所有唯一记录
Mysql中如何查询所有唯一记录? 今天刚下班时看到网上有人问了一个mysql问题,关于如何在mysql中查询出所有不重复的记录,搞了很长时间才写了条,算是学习一下吧,自己对mysql也不是很了解.下 ...
- mysql怎么模糊查询名字_mysql中模糊查询的四种用法:
一.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百 分号(%%)表示. *注:like '%龙%':查询出所有含有"龙"的记录 1. 所查 ...
最新文章
- 思科服务器查看生成树协议,CISCO中生成树协议的配置
- mathematica实现闭包
- 2021最新报告:一文洞察智慧金融发展现状
- 锦州财经学校计算机系,锦州一职高与财经学校哪个好
- 安卓 linux找回内置存储,Android手机自带内部存储路径的获取
- VS2010连接MySql数据库时无法选择mysql database数据源
- 程序员工作交接文档怎么写_离职程序员交接工作被怒怼:每一行代码都必须讲清楚,不然投诉...
- Opencv之读取yuv420P
- 数据库一键自动生成 Java 实体类和数据库文档
- Swift-函数学习
- Python 入门演示
- vscode - 设置 Python 版本
- 解决计算机主机与打印机共享打印机,HP M126A打印机共享打印机后必须得主机先打印一次后其他电脑才能打印问题的解决办法...
- 单片机流水单C语言程序,51单片机流水灯C语言源程序
- [Groovy]Groovy with Ant Task
- 2018.7.18 上半年课程总结 4- 高级英语
- LeetCode-Hot100-寻找两个正序数组的中位数
- abs绝对位置指令 三菱plc_三菱FX系列PLC方便指令的使用方法
- 《python金融数据分析》
- Win7、Win8、Win10系统USB-Blaster驱动程序无法安装的解决办法