在MySQL中使用子查询
子查询作为数据源
子查询生成的结果集包含行、列数据,因而非常适合将它与表一起包含在from子句的子查询里。例:
SELECT d.dept_id, d.name, e_cnt.how_many num_employees
FROM department d INNER JOIN
(SELECT dept_id, COUNT(*) how_many
FROM employee
GROUP BY dept_id) e_cnt
ON d.dept_id = e_cnt.dept_id;
数据加工
除了使用查询总结现有数据,读者还可以生成数据库中不存在的数据。例:
SELECT 'zifeiy' name, 0 low_limit, 4999.99 high_limit
UNION ALL
SELECT 'feiyzi' name, 5000 low_limit, 9999.99 high_limit
UNION ALL
SELECT 'hahahe' name, 10000 low_limit, 9999999.99 high_limit;
结果:
+--------+-----------+------------+
| name | low_limit | high_limit |
+--------+-----------+------------+
| zifeiy | 0 | 4999.99 |
| feiyzi | 5000 | 9999.99 |
| hahahe | 10000 | 9999999.99 |
+--------+-----------+------------+
3 rows in set (0.00 sec)
上面的SQL能够生成一个包含3组数据的结果集,然后我们将其滋味子查询添加到下面的SQL中:
SELECT groups.name, COUNT(*) num_customers
FROM
(SELECT SUM(a.avail_balance) cust_balance
FROM account a INNER JOIN product p
ON a.product_cd = p.product_cd
WHERE p.product_type_cd = 'ACCOUNT'
GROUP BY a.cust_id) cust_rollup
INNER JOIN
(SELECT 'zifeiy' name, 0 low_limit, 4999.99 high_limit
UNION ALL
SELECT 'feiyzi' name, 5000 low_limit, 9999.99 high_limit
UNION ALL
SELECT 'hahahe' name, 10000 low_limit, 9999999.99 high_limit) groups
ON cust_rollup.cust_balance
BETWEEN groups.low_limit AND groups.high_limit
GROUP BY groups.name;
过滤条件中的子查询
过滤条件中的子查询不一定出现在where子句中,下面的例子演示在having子句中使用子查询来查找开户最多的雇员:
SELECT open_emp_id, COUNT(*) how_many
FROM account
GROUP BY open_emp_id
HAVING COUNT(*) = (
SELECT MAX(emp_cnt.how_many)
FROM (
SELECT COUNT(*) how_many
FROM account
GROUP BY open_emp_id
) emp_cnt
);
子查询作为表达式生成器
单行单列的标量子查询,除了用于过滤条件中外,1还可以用在表达式可以出现的任何位置。其中包括查询中的select和order by子句以及insert语句中的values子句。例:
SELECT
(
SELECT p.name FROM product p
WHERE p.product_cd = a.product_cd
AND p.product_type_cd = 'ACCOUNT'
) product,
(
SELECT b.name FROM branch b
WHERE b.branch_id = a.open_branch_id
) branch,
(
SELECT CONCAT(e.fname, ' ', e.lname) FROM employee e
WHERE e.emp_id = a.open_emp_id
) name,
SUM(a.avail_balance) tot_deposits
FROM account a
GROUP BY a.product_cd, a.open_branch_id, a.open_emp_id
ORDER BY 1,2;
此SQL在select子句中使用了子查询,它在select子句中使用了关联标量子查询查找产品、分行和雇员的名字。
在MySQL中使用子查询的更多相关文章
- 详细讲述MySQL中的子查询操作 (来自脚本之家)
继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 1 ...
- MySQL中IN子查询会导致无法使用索引
今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表 ...
- 在MySQL中使用子查询和标量子查询的基本用法
一.MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性.子查询没 ...
- MySQL中in子查询会导致无法使用索引问题(转)
MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...
- mysql 中 delete 子查询的限制
1 DELETE FROM tablename 中的 tablename 不能起别名 delete ; [Err] - You have an error in your SQL syntax; 2 ...
- mysql 在update中实现子查询的方式
当使用mysql条件更新时--最先让人想到的写法 UPDATE buyer SET is_seller=1 WHERE uid IN (SELECT uid FROM seller) 此语句是错误的, ...
- mysql中的模糊查询
转载自:http://www.letuknowit.com/archives/90/ MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或 ...
- update 中实现子查询
mysql 在update中实现子查询的方式 当使用mysql条件更新时--最先让人想到的写法 UPDATE buyer SET is_seller=1 WHERE uid IN (SELECT ...
- MySQL里面的子查询
一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:dis ...
随机推荐
- vue+webpack+element-ui+git
webpack.config.jsconst { resolve } = require('path') const webpack = require('webpack') const HtmlWe ...
- poj 1562 dfs
http://poj.org/problem?id=1562 #include<iostream> using namespace std; ,m=,sum=; ][]; ][]={-,, ...
- RabbitMQ第四篇:Spring集成RabbitMQ
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...
- APP案例分析
产品 蓝叠安卓模拟器 选择理由 看了一眼桌面,就这个比较有意思.现在很多人喜欢玩手游,经常喜欢开个小号搞事情.这时候身边又没有多余的手机,怎么办?安卓模拟器下一个.手机屏幕太小玩起来没意思怎么 ...
- 第14、15週PTA題目的處理
題目1 選擇法排序 1.實驗代碼 #include <stdio.h> #include <stdlib.h> int main() { int n,index,exchang ...
- 201621123031 《Java程序设计》第3周学习总结
Week03-面向对象入门 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系 ...
- Android属性动画 nineoldandroids
各种资源链接 nineoldandroids 任玉刚的五个图片滑动,点击menu http://blog.csdn.net/singwhatiwanna/article/details/1763998 ...
- java从网络中下载图片到本地
public class imageDownload { public static void main(String[] args) { String url = "http://loca ...
- 《javascript设计模式与开发实践》阅读笔记(16)—— 状态模式
状态模式 会区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变.比如电灯的开关是开还是关,在外界的表现就完全不同. 电灯例子 按照常规思路,实现一个电灯就是构造一个电灯类,然后指定一下它的 ...
- CSS <input type="file">样式设置
这是最终想要的效果~~~ 实现很简单,div设置背景图片,<input type="file"/>绝对定位上去再设置opacity:0(透明度为0 ) 直接上代码,希望 ...