(一)select查询作为临时表
select cou,name from (select count(*) AS cou,enabled AS name from `user` group by enabled ) as a where cou>0
上面的语句就是将查询结果作为临时表,然后再在这个临时表中查找满足条件的数据。
语法: (注意:AS 可省略)
CODE:
|
|
SELECT ... FROM
(subquery)
AS
tableName
...
|
|
先创建一个表:
CODE:
|
|
CREATE TABLE t1 (s1 INT, s2 CHAR(5), s3 FLOAT);
INSERT INTO t1 VALUES (1,'1',1.0);
INSERT INTO t1 VALUES (2,'2',2.0);
|
|
我们就可以进行以下的嵌套查询了:
CODE:
|
|
SELECT sb1,sb2,sb3
FROM (SELECT s1 AS sb1, s2 AS sb2, s3*2 AS sb3 FROM t1) AS sb
WHERE sb1 > 1;
|
|
结果是: 2, '2', 4.0.
SELECT AVG(sum_column1)
FROM (SELECT SUM(column1) AS sum_column1
FROM t1 GROUP BY column1) AS t1;
(二)
行的子查询(Row Subquery)
SELECT * FROM t1 WHERE ROW(1,2) = (SELECT column1, column2 FROM t2);
|
在该例子中,在保证子查询返回单一行数据的前提下,如果 column1=1 且 column2=2 ,则该查询结果为 TRUE。
MySQL 行构造符
在上面的例子中,WHERE 后面的 (1,2) 被称为行构造符,也可以写作 ROW(1,2)。行构造符通常用于与对能返回两个或两个以上列的子查询进行比较。
SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)注意:[SQL] SELECT * FROM `user` WHERE ROW(username,`password`) = (SELECT username, `password` FROM `user`);
[Err] 1242 - Subquery returns more than 1 row
这是因为查询结果多于一行,可以这样处理
SELECT * FROM `user` WHERE ROW(username,`password`) = ANY(SELECT username, `password` FROM `user`);
(三)
.使用Exist和Not Exist参数
SELECT <span style="color:#ff0000;">DISTINCT</span> store_type FROM Stores
WHERE <span style="color:#ff0000;">EXISTS</span> (SELECT * FROM Cities_Stores
WHERE Cities_Stores.store_type = Stores.store_type);
SELECT DISTINCT store_type FROM Stores
WHERE <span style="color:#cc0000;">NOT EXISTS</span> (SELECT * FROM Cities_Stores
WHERE Cities_Stores.store_type = Stores.store_type);
条件关联关系查询
SELECT column1 FROM t1 AS x
WHERE x.column1 = (SELECT column1 FROM t2 AS x
WHERE x.column1 = (SELECT column1 FROM t3
WHERE x.column2 = t3.column1));
跟其他数据库做法是一样的。
(一)select查询作为临时表select cou,name from (select count(*) AS cou,enabled AS name from `user` group by enabled ) as a where cou>0上面的语句就是将查询结果作为临时表,然后再在这个临时表中查找满足条件的数据。 语法: (注意:AS 可省略)
select count(*) total from (
select count(*) total from sys_user a
left join fsms_fee_splitting b on a.su_name=b.fs_parent_id ----------------------left join联合
查询
where a.su_type in ('3')
1.什么是
临时表
内部
临时表
是sql语句执行过程中,用来存储中间结果的的数据表,其作用类似于:join语句执行过程中的joinbuffer,order by语句执行过程中的sortBuffer一样。这个表是
mysql
自己创建出来的,对客户端程序不可见。那么
mysql
什么时候会创建内部
临时表
呢?创建的内部
临时表
的表结构又是怎么样的呢?
2.
临时表
的
使用
场景
在
mysql
中常见的
使用
临时表
的场景,有两个:unoin语句和groupby语句。
为了更好的了解内部
临时表
在unoin和groupby中是如何起作用的,
一、创建
临时表
可以将
查询
结果寄存。报表制作的
查询
sql中可以用到。
(1)关于寄存方式,
mysql
不支持:select * into tmp from maintenanceprocess
(2)可以
使用
:
create table tmp (select ...)
#单个工位检修结果表上部
drop table if EXISTS tmp_单个工位检修结果表(检查报告)上...
在写数据库作业的时候遇到的问题,在查阅百度后自己简单整理了一下
sql中把一个
查询
结果当作另一个表来
查询
可以理解
查询
结果为一个
临时表
使用
select语句
查询
结果集即可。
参考代码:
–1:将结果作为一个
临时表
,可以
使用
链接或者直接
查询
SELECT * FROM(
SELECT SUM(NUM_QNTY4) AS sumNum, NUM_LINKID
FROM RW_STORE_QUNTY
GR...
文章来源: 学习通http://www.bdgxy.com/
目录UNION表初始化执行语句UNION RESULTUNION ALLGROUP BY内存充足执行语句执行过程排序过程ORDER BY NULL内存不足执行语句优化方案优化索引直接排序执行过程对比DISTINCT小结参考资料UNION
UNION语义:取两个子
查询
结果的并集,重复的行只保留一行
CREATE TABLE t1(id INT PRIMARY KEY, a INT, b INT, INDEX(a));
DELIMIT
在
MySQL
中,可以
使用
临时表
来存储
查询
的中间结果,再对这个中间结果进行进一步的操作。
如果要返回多个
临时表
,可以在多个 SELECT 语句中分别创建并
使用
临时表
,最后将结果集进行 UNION 操作以合并成一个结果集。
CREATE TEMPORARY TABLE temp1 AS
SELECT ...;
CREATE TEMPORARY TABLE temp2 AS
SELECT ...;
SELECT * FROM temp1
UNION
SELECT * FROM temp2;
这样就可以在一个
查询
中返回多个
临时表
的结果了。