MySQL子查询用法实例分析
本文实例讲述了MySQL子查询用法。分享给大家供大家参考,具体如下:
假设表my_tbl包含三个字段a,b,c;现在需要查询表中列a的每个不同值下的列b为最小值的记录量。
比如表记录为:
a b c
1 3 'cd'
2 3 'nhd'
1 5 'bg'
2 6 'cds'
1 7 'kiy'
3 7 'vsd'
3 8 'ndf'
希望得到结果为:
a b c
1 3 'cd'
2 3 'nhd'
3 7 'vsd'
(1) 其中一个做法:先查出每个a值下的b最小值,然后根据这些最小值去查询符合要求的所有记录。
查询符合最小b值的sql写法如下:
select A.* from my_tbl as A where A.b=(select min(b) from my_tbl as B where B.a=A.a);
由于是嵌套查询和取交集,80万条记录情况下竟然用一个小时也没把中间结果算出来(我真怀疑是自己哪里写错了);后面求记录量就免谈了。
(2) 上面的方法是个灾难, 只能弃用了。
具体逻辑为:先按列a,b分组,然后选择每组中列b值最小的记录,生成结果集。
sql语句写法如下:
select a,b,c,count(a) from (select a,b,c from my_tbl group by a,b) as A group by a;
执行查询后,时间竟只用了1.1秒。
再一次证明,sql的查询策略的不同能直接导致性能上的巨大差异。
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》
希望本文所述对大家MySQL数据库计有所帮助。
相关推荐
-
MySQL里面的子查询实例
一,子选择基本用法 1,子选择的定义 子迭择允许把一个查询嵌套在另一个查询当中.比如说:一个考试记分项目把考试事件分为考试(T)和测验(Q)两种情形.下面这个查询就能只找出学生们的考试成绩 select * from score where event_id in (select event_id from event where type='T'); 2,子选择的用法(3种) 用子选择来生成一个参考值 在这种情况下,用内层的查询语句来检索出一个数据值,然后把这个数据值用在外层
-
详细讲述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中的子查询优化技巧
mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,你可以点击这里 ,这里来获得一些信息,mysql在处理子查询的时候,会将子查询改写,通常情况下,我们希望由内到外,也就是先完成子查询的结果,然后在用子查询来驱动外查询的表,完成查询,但是恰恰相反,子查询不会先被执行:今天希望通过介绍一些实际的案例来加深对mysql子查询的理解: 案例:用户反馈数据库响应较慢,许多业务动更新被卡住:登录到数据库中观察,发现长时间执行的sql: | 10437
-
MySQL笔记之子查询使用介绍
子查询是将一个查询语句嵌套在另一个查询语句中 内层查询语句的查询结果,可以为外层查询语句提供查询条件 因为在特定情况下,一个查询语句的条件需要另一个查询语句来获取 参考表:employee 参考表:department 带IN关键字的子查询 复制代码 代码如下: mysql> SELECT * FROM employee -> WHERE d_id IN -> (SELECT d_id FROM department);+------+------+--------+----
-
MySQL子查询的几种常见形式介绍
mysql子查询的几种常见写法: 复制代码 代码如下: select * from xxx where col = [any|all](select * from xxxx); 该句法可分为加关键词和不加关键词的写法,当不加关键词的时候,子查询语句返回的是一个离散值(注意是一个),查询语句将以子查询语句的结果作为自己 where子句的条件进行查询,该句法可以在子查询语句前加入any.all.some等关键字,此时子查询语句返回的是一组离散值.any则表示,查询语句是以子查询返回的值作为一个范围,
-
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
-
MySQL查询优化:用子查询代替非主键连接查询实例介绍
一对多的两张表,一般是一张表的外键关联到另一个表的主键.但也有不一般的情况,也就是两个表并非通过其中一个表的主键关联. 例如: 复制代码 代码如下: create table t_team ( tid int primary key, tname varchar(100) ); create table t_people ( pid int primary key, pname varchar(100), team_name varchar(100) ); team表和people表是一对多的关
-
mysql关联子查询的一种优化方法分析
本文实例讲述了mysql关联子查询的一种优化方法.分享给大家供大家参考,具体如下: 很多时候,在mysql上实现的子查询的性能较差,这听起来实在有点难过.特别有时候,用到IN()子查询语句时,对于上了某种数量级的表来说,耗时多的难以估计.本人mysql知识所涉不深,只能慢慢摸透个中玄机了. 假设有这样的一个exists查询语句: select * from table1 where exists (select * from table2 where id>=30000 and table1.u
-
对MySQL子查询的简单改写优化
使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在子查询的处理上有可能会让你大失所望,在我们的生产系统上就由于碰到了这个问题: select i_id, sum(i_sell) as i_sell from table_data where i_id in (select i_id from table_data where Gmt_create
-
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基本查询、连接查询、子查询、正则表达查询
查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SELECT语句来查询数据的.在这一章中将讲解的内容包括. 1.查询语句的基本语法 2.在单表上查询数据 3.使用聚合函数查询数据 4.多表上联合查询 5.子查询 6.合并查询结果 7.为表和字段取别名 8.使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: create table STUD
随机推荐
- 如何在线查询本地机的文件?
- java多线程Future和Callable类示例分享
- IOS上实现的自定义仪表盘示例
- 基于jstree使用JSON数据组装成树
- 在PHP中实现Javascript的escape()函数代码
- Laravel+jQuery实现AJAX分页效果
- php检查字符串中是否包含7位GSM字符的方法
- asp分页的一个类
- 使用C语言实现CRC校验的方法
- FCKEditor v2.6 编辑器配置图解教程
- SQL语句优化方法30例(推荐)
- Android编写简单的网络爬虫
- 微信小程序 摇一摇抽奖简单实例实现代码
- 通过网站统计或系统监视器查看IIS并发连接数
- 用C#编写ActiveX控件(一)
- PHPExcel中文帮助手册|PHPExcel使用方法(分享)
- C++类中的常量介绍
- 详解webpack babel的配置
- Android自定义控件打造绚丽平行空间引导页
- Android实现APP自动更新功能