MySQL子查询详细教程

目录
  • 1.where后面嵌套子查询
  • 2.from后面嵌套子查询*
  • 3.在select 后面嵌套子查询
  • 4.union
  • 5.*limit

定义:select语句中嵌套select语句,被嵌套的select语句是子查询。

子查询可以出现在:

select
	....(select)..
from
	....(select)..
where
	....(select)..

1.where后面嵌套子查询

select * from emp where sal > (select avg(sal) from emp) ; 

2.from后面嵌套子查询*

SELECT d.dname,AVG(s.grade) '部门平均薪资'
FROM emp e
JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal
JOIN dept d ON e.deptno = d.deptno
GROUP BY d.dname

3.在select 后面嵌套子查询

找出每个员工所在的部门名称

写法一:看作临时表
SELECT t.ename,d.dname
FROM dept d JOIN (SELECT e.ename,e.deptno FROM emp e) t ON t.deptno = d.deptno   

写法二:连接查询
SELECT e.ename,d.dname FROM emp e JOIN dept d ON e.deptno = d.deptno

写法三:select后嵌套子查询
SELECT e.ename,(SELECT d.dname FROM dept d WHERE d.deptno = e.deptno) AS dept FROM emp e ;

4.union

可将查询结果集相加

SELECT ename,job FROM emp e WHERE job = 'CLERK'
UNION
SELECT ename,job FROM emp e WHERE job = 'SALESMAN'

而且两张不相干的表中数据也能够因此拼接在一起。(但是列数保持一致)

SELECT ename FROM emp
UNION
SELECT dname FROM dept

5.*limit

重点中的重点,分页查询全靠它

1)limit是mysql中特有的,其他数据库中没有,但是Oracle中有一个相同的机制叫rownum。

2)limit取结果集中的部分数据

3)语法机制:limit startIndex,length

​ startindex表示起始位置,从0开始,0表示第一条数据。

​ length表示取几个。

4)limit是sql语句中最后一个执行的环节。

(当前页数-1)* 页的大小 = 当前页起始下标

到此这篇关于MySQL子查询详细教程的文章就介绍到这了,更多相关MySQL子查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql in语句子查询效率慢的优化技巧示例

    表结构如下,文章只有690篇. 文章表article(id,title,content) 标签表tag(tid,tag_name) 标签文章中间表article_tag(id,tag_id,article_id) 其中有个标签的tid是135,查询标签tid是135的文章列表. 690篇文章,用以下的语句查询,奇慢: select id,title from article where id in( select article_id from article_tag where tag_id=

  • mysql实现多表关联统计(子查询统计)示例

    本文实例讲述了mysql实现多表关联统计的方法.分享给大家供大家参考,具体如下: 需求: 统计每本书打赏金额,不同时间的充值数据统计,消费统计, 设计四个表,book 书本表,orders 订单表  reward_log打赏表   consume_log 消费表 ,通过book_id与book表关联, 问题: 当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用CONCAT_WS函数将多个字段其拼接 实现: 查询代码如下 SELECT b.id, b.book_

  • MySQL优化之使用连接(join)代替子查询

    使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询.这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FR

  • MySQL里面的子查询实例

    一,子选择基本用法 1,子选择的定义 子迭择允许把一个查询嵌套在另一个查询当中.比如说:一个考试记分项目把考试事件分为考试(T)和测验(Q)两种情形.下面这个查询就能只找出学生们的考试成绩 select * from score where event_id in (select event_id from event where type='T'); 2,子选择的用法(3种)         用子选择来生成一个参考值 在这种情况下,用内层的查询语句来检索出一个数据值,然后把这个数据值用在外层

  • 解决MySQL中IN子查询会导致无法使用索引问题

    今天看到一篇关于MySQL的IN子查询优化的案例, 一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.) 随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, p

  • MYSQL子查询和嵌套查询优化实例解析

    查询游戏历史成绩最高分前100 Sql代码 SELECT ps.* FROM cdb_playsgame ps WHERE ps.credits=(select MAX(credits) FROM cdb_playsgame ps1 where ps.uid=ps1.uid AND ps.gametag=ps1.gametag) AND ps.gametag='yeti3' GROUP BY ps.uid order by ps.credits desc LIMIT 100; Sql代码 SEL

  • 详解MySQL子查询(嵌套查询)、联结表、组合查询

    一.子查询 MySQL 4.1版本及以上支持子查询 子查询:嵌套在其他查询中的查询. 子查询的作用: 1.进行过滤: 实例1:检索订购物品TNT2的所有客户的ID = + 一般,在WHERE子句中对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询. 注意:列必须匹配 --在WHERE子句中使用子查询(如这里所示),应该保证SELECT语句具有与WHERE子句中相同数目的列.通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列. 示例2:返回订购

  • MySQL中表子查询与关联子查询的基础学习教程

    MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据. MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: blog 表: SQL 如下: SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog) 查询返回结果如下所示: 该 SQL 的意义在于查找 article 表中指定的字段同时也存在于 blog 表中的所有的行(注

  • 详细讲述MySQL中的子查询操作

    继续做以下的前期准备工作: 新建一个测试数据库TestDB: create database TestDB; 创建测试表table1和table2: CREATE TABLE table1 ( customer_id VARCHAR(10) NOT NULL, city VARCHAR(10) NOT NULL, PRIMARY KEY(customer_id) )ENGINE=INNODB DEFAULT CHARSET=UTF8; CREATE TABLE table2 ( order_id

  • Mysql子查询IN中使用LIMIT应用示例

    这两天项目里出了一个问题,LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料申请表,要求是读出申请表中哪些人申请哪些物料 于是我先是这样写的: 复制代码 代码如下: SELECT infor.name,infor.phone,infor.add, mconfig.mname,mapply.acount,from_unixtime(mapply.atime,'%Y-%m-%d') as 'atime' FROM mapply right

随机推荐