说一下子查询,子查询的意义就是使用一个查询语句做为另一个查询语句的条件,一般使用exists和in来引导子查询

exists子查询

exists 放在 where 之后使用,可以看成查询数据所满足的一个条件,只是这个条件的值比较特殊(true或false),当子查询返回

数据时则结果为true,没有数据时结果为false

使用exists子查询时,一般使用到了外表中的字段作为子查询的条件

exists对外表的每一条记录进行遍历,然后根据外表中依赖的条件判断子查询中是否可以返回数据

实例:

解释 只要techer表中存在数据,子查询就会有数据,返回true,子查询一直成立,没有实际意义
sql
SELECT s.id sid, s.name sname FROM student s WHERE EXISTS (SELECT * FROM teacher t)
结果
解释 查询学生名字和老师名字相同,并且老师名字为 cc 的数据
sql
SELECT s.id sid, s.name sname FROM student sWHERE EXISTS (SELECT * FROM teacher t WHERE s.name = t.name AND t.name = 'cc')
结果

not exists和exists的结果集正好相反

使用子查询时,要处理好子查询中所依赖的外部表中的字段和子查询表中字段对应的条件关系

in子查询

in用于条件查询,相当于or , in后边的子查询语句只能返回一列值

实例:

解释 查询student中name和teacher表中name相同的数据
sql
SELECT s.id sid, s.name sname FROM student s WHERE  s.name in (SELECT name from teacher)

相当于


SELECT s.id sid, s.name sname FROM student s WHERE  s.name = name1 or s.name = name2 …
结果

not in和in的结果集相反

exists和in的比较

查询student表中name值和teacher表中name相同的数据

SELECT s.id sid, s.name sname FROM student sWHERE EXISTS (SELECT * FROM teacher t WHERE s.name = t.name)

exists子查询是遍历外表然后根据条件去内表中查询并判断是否有数据返回,主要用到的是子查询中表的索引进行的查询,外表只需要过滤即可,所以影响效率的关键在内表及teacher表

SELECT s.id sid, s.name sname FROM student s WHERE  s.name in (SELECT name from teacher)

in后边的子查询相当于使用or将条件进行拼接,所以真正查询时主要操作的还是外表,及影响效率的关键在外表及student表

11、mysql数据表中数据的查询(3)相关推荐

  1. mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用sel ...

  2. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  3. 【MySQL】根据数据表中日期字段查询某个月每一天的数据量?查询数据表中所有日期每天的数据量?近三天每天数据量?

    前提这个table有一个日期字段date_time之类的 1.根据数据表中日期字段查询某个月每一天的数据量 如果要获取8月的数据,可以这么写: SELECT count(*), DATE_FORMAT ...

  4. SQL Server数据表中数据的增加(插入)、查询、修改、删除

    目录 零.码仙励志 一.数据表中数据的增加(插入) 二.数据表中数据的查询 三.数据表中数据的修改 四.数据表中数据的删除 零.码仙励志 伟人所达到并保持着的高处,并不是一飞就到的,而是他们在同伴们都 ...

  5. phpMyAdmin将数据表中数据导出为csv文件,用微软excel打开时,中文乱码的原因以及解决办法

    中文乱码的原因:用户使用phpMyAdmin可以将数据表中数据导出为csv文件,而使用Excel工具打开该文件时,可能出现中文乱码的情况.这是因为phpMyAdmin导出的csv文件使用了UTF-8编 ...

  6. 10、mysql数据表中数据的查询(2)

    介绍一下mysql中查询的重中之重,连接查询 创建student和teacher表,表中数据如下: student teacher 交叉连接查询 查询结果是连接的几个表中满足条件的相关联的数据的交集 ...

  7. mysql删除表中数据

    方法1:delete from 表名; 方法2:truncate table 表名; 比  较: 1> truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢) 2> ...

  8. 8、mysql数据表中数据的增删改

    已经介绍了数据表的创建.修改和删除,接下来介绍一下如何往数据表中添加数据.修改数据.删除数据 添加数据 # 默认给表中所有字段添加数据,要保证添加的数据列和字段列一致 insert into user ...

  9. MySQL 清空表中数据

    MySQL清空表中的数据(不算DROP语句) 1. truncate 语句 truncate table table_name 不能与where一起使用 truncate删除数据后是不可以rollba ...

  10. mysql 删除数据表中数据_Mysql-删除数据表-三种方式详解

    Mysql 删除数据表的三种方式详解 用法: 1.当你不再需要该表时, 用 drop; 2.当你仍要保留该表,但要删除所有记录时, 用 truncate; 3.当你要删除部分记录或者有可能会后悔的话, ...

最新文章

  1. 求组合数python_给定一个序列求指定位数的排列组合数
  2. 使用WebClient请求WCF REST服务
  3. 序列化包含多种不明类型的集合
  4. Canvas学习:封装Canvas绘制基本图形API
  5. SQL Server 2005 Analysis Services实践(一)
  6. python距离向量路由算法_互联网中常用路由协议,路由协议基础,一分钟了解下...
  7. PHP面向对象设计的五大原则
  8. 一场大火,让云计算巨头的数据中心化为灰烬!10 万Rust 游戏玩家的数据永久丢失,无法恢复
  9. bzoj 3750: [POI2015]Pieczęć(模拟)
  10. 统计信号处理基础_0基础学Python,就业中你需要建立360度无死角技能树
  11. mysql ,show slave status详解
  12. 第一章:SQL Server 数据库环境搭建与使用
  13. 30岁了开始自学编程,家里比较困难还来得及吗?
  14. 阿里云ECS后台CPU占用100%,top却找不到
  15. 棋牌游戏开发运营技巧列举 如何才能提高平台留存率
  16. 学术Assignment写作怎么了解文献内容?
  17. switch语句练习题
  18. 汇编移位指令SHR,SAR,SAL/SHL,ROR,ROL,RCR,RCL
  19. java 文件上传乱码_java上传txt文件,出现中文乱码
  20. UWB定位系统在展馆中的应用

热门文章

  1. json.net java_java解析JSON (使用net.sf.json)
  2. 数据结构——从叶子结点到根节点的全部路径
  3. leetcode337. 打家劫舍 III
  4. 哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之下——设计键
  5. php 接口缓存,php写的一个缓存接口demo,兼容redis和memcache
  6. fastreport字体自适应_FastReport 自动换行与行高自适应及自动增加空行
  7. linux下I2C驱动发送IO时序,I2C驱动情景分析——怎样控制I2C时序
  8. CF 1475 F . Unusual Matrix 思维
  9. 【CEOI2017】Building Bridges【任意坐标斜率优化】【李超线段树】
  10. 失配树(border树)