MySQL(18):Select- subquery子查询
1. Select- subquery子查询
子查询:是将一条查询语句嵌套在另一条查询语句之中。
2. 案例
需求:查询获得代课天数最多的那个老师的信息。
思路:先获得最多的代课天数是多少天,然后再判断哪个老师的代课天数和最大值是一样的。MySQL允许将上面的查询结果,作为一个值来使用。
即:
var1 = Select max(days) from teacher_class;/* 保存起来 */
Select t_name,gender from teacher_class where days = var1;
Select t_name,gender from teacher_class where days = ( Select max(days) from teacher_class );
3. 子查询详解:
上面2中使用到就是子查询,子查询需要使用括号括起来。
(1)子查询的分类:
分类标准:
• 子查询使用的结构:exists型,where型,from型
• 子查询返回值形式:(1)单一值 (2)一列 (3)多列 (4)多行多列
(2)标量子查询:
获得一个值之后,使用关系运算符,进行判断。
= > < <= >= !=
比如:Select t_name,gender from teacher_class where days < ( Select max(days) from teacher_class );

(3)列子查询:
获得一列 ,通常是多个行的一列值。
需求:获得所有带过0228班的讲师信息。
思路:先获得0228班讲师的姓名,再利用这姓名查询其所有的班记录。
select t_name from teacher_class where c_name ='php0228';
select t_name,c_name,days from teacher_class where t_name in ( select t_name from teacher_class where c_name ='php0228' );
注意:
• 返回一列。
• 使用in / not in
• 还可以使用其他的集合操作符:
Any(集合):集合中的任何一个
= any(集合):等于集合中的任何一个即可。等同与in
all(集合):集合中所有的元素。
!=all(集合):不等于集合中的任何一个即可。等同与 not in
Some(集合):集合中的一些
--> 使用 in

--> 使用 any

--> 使用 !=any
!=any不等于集合中的任意一个就可以(注意不是要求和集合中所有的元素不相等),只要与集合中的一些元素不相等即可。
注意 !=any不是 not in

总结:
• = any ----- in
• != all ----- not in
• Some 和 any 同义词
(4)行子查询:
使用 limit 1

行子查询案例:
在参与比较的时候,使用括号可以构建一行(field1, field2)
select t_name, gender,c_name from teacher_class where (gender,c_name) = (select distinct gender,c_name from teacher_class where t_name='李白' and c_name='php0115');

这时候要求查询结果返回一行,如下:
select t_name, gender,c_name from teacher_class where (gender,c_name) = (select distinct gender,c_name from teacher_class where t_name='李白' and c_name='php0115' limit 1);
(5)表子查询:
通常用在from型语句中。
select * from (select t_name ,c_name,days from teacher_class where days > 15);

在from子句中内,要求使用一个表,而不是一个结构,应该给这个查询结果起名,别名。
select * from (select t_name ,c_name,days from teacher_class where days > 15) as temp;

在上面的基础上,添加查询条件,如下:
select * from (select t_name ,c_name,days from teacher_class where days > 15) as temp where t_name like '李%';

再次添加查询条件:
select teacher from (select t_name as teacher ,c_name,days from teacher_class where days > 15) as temp where teacher like '李%';

MySQL(18):Select- subquery子查询的更多相关文章
- mysql update不支持子查询更新
先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...
- SELECT使用子查询
SELECT使用子查询 SELECT使用子查询,该子查询会执行多次, 次数是由记录数量决定.效率比较低,不推荐使用. //查询部门编号,工资大于等于2000的人数, //工资小于2000的人 ...
- subquery 子查询
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Enum ...
- MySQL(八)子查询和分组查询
一.子查询 1.子查询(subquery):嵌套在其他查询中的查询. 例如:select user_id from usertable where mobile_no in (select mobil ...
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- MySQL 使用JOIN优化子查询
1.数据准备 mysql> select * from student; +----+--------+----------+---------+-------------+ | id | na ...
- mysql sql_safe_updates 不支持子查询的更新。
考虑到开发人员有时候不小心误更新数据,要求线上库的 MySQL 实例都设置 sql_safe_updates=1 来避免没有索引的 update.delete. 结果有一天开发发现下面的一个SQL 没 ...
- php+mysql 内联接 和 子查询
INNER JOIN(内连接):取得两个表中存在连接匹配关系的记录 $sql="SELECT * FROM subject as a INNER JOIN e_user as b ON a. ...
- MySQL锁类型以及子查询锁表问题、解锁
MySQL中select * for update锁表的范围 MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主 ...
- MySQL使用存储过程代替子查询
摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...
随机推荐
- EF Code First学习笔记:数据库创建
控制数据库的位置 默认情况下,数据库是创建在localhost\SQLEXPRESS服务器上,并且默认的数据库名为命名空间+context类名,例如我们前面的BreakAway.BreakAwayCo ...
- 15、NDK开发初步
一.什么是NDK? NDK是Android让你潜入原生组件(C/C++开发)的一套开发套件 Android应用程序是运行在Dalvik虚拟机中的 ,NDK允许你通过原生代码实现部分的应用程序模块 . ...
- asp.net文本编辑器(FCKeditor)
FCKeditor介绍 FCKeditor是一个功能强大支持所见即所得功能的文本编辑器,可以为用户提供微软office软件一样的在线文档编辑服务.它不需要安装任何形式的客户端,兼容绝大多数主流浏览器, ...
- 【暑假】[实用数据结构]UVAlive 3942 Remember the Word
UVAlive 3942 Remember the Word 题目: Remember the Word Time Limit: 3000MS Memory Limit: Unknown ...
- uva11732 strcmp() Anyone?
题意:给出多个字符串,两两配对,求总配对次数. 思路:如果两个字符串一样,ans=strlen(字符串)*2+2,如果不同,ans=公共前缀长度*2+1:用左儿子右兄弟建字典树.插入一个字符计算一次. ...
- MAC OS安装wget
MAC下没有wget工具,不习惯curl,使用起来还是很不方便的.下载了一个wget源码吧,编译安装.sudo curl -O http://ftp.gnu.org/gnu/wget/wget-1.1 ...
- POJ 3678--Katu Puzzle(2-SAT)
感觉这题比较裸,表现出了2-sat的本质. 不过构图我想的还是太简单了,a&b=1我只连了 a1->b1,b1->a1,但其实是不对的.这样连,a0和b0可以同时选到.应该连a0- ...
- <转>HTML中的table转为excel
转换html 中的table 为excel,firefox浏览器支持,代码如下 <%@ page language="java" contentType="text ...
- 4.22 注入js需要加 addjavascriptinterface
由于项目需要,再次使用到了android的webview,webview要加载的页面是html5的页面: 需要有点击webview中的控件的交互,所以需要在android应用中注入一个js对象: 通过 ...
- cocos2d-x 3.0 开发(一) Hello_New_World
1.Previous On 2dx 2dx 的3.0版本是个与以往不同的版本.变化比2dx从1.x 到2.x的变化还要大不少.具体的新功能可以参见:CocoaChina大会见闻——cocos2 ...