Mysql子查询和联合(UNION)查询详解

查询:
 在select查询中,又嵌套了一个select查询。一个是外层查询,另一个是内层查询。
Where子查询

就是在where查询语句有一个select语句,把内层查询的结果当做外层查询的条件。

From子查询

在from 查询语句中,有一个select语句,把内层查询结果作为一张临时表,供外层再一次查询。

区别:

对于不是唯一取值的列,使用where子查可能会出现不正确的结果。如果用from,有分组的情况下,我们要通过排序把需要的记录放在第一的位置上。

Exists

#查询有商品的栏目

 代码如下 复制代码
select cat_id,cat_name from category where cat_id
in
(select distinct cat_id from goods);

 
我们还可以通过Exists 子查询:

 代码如下 复制代码
select cat_id,cat_name from category where exists
 (select * from goods where goods.cat_id = category.cat_id);

 
执行过程:

它和前面我们讲的where、from子查询不同,where和from子查询只执行一次,而exists子查询要查询多次(有多少行记录就执行多少次)。

SQL UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法

 代码如下 复制代码

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值,即UNION是去了重的。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

 代码如下 复制代码

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。union只是将两个结果联结起来一起显示,并不是联结两个表

时间: 2024-08-22 15:23:14

Mysql子查询和联合(UNION)查询详解的相关文章

oracle跨库查询dblink的用法实例详解_oracle

本文实例讲述了oracle跨库查询dblink的用法.分享给大家供大家参考,具体如下: 1.创建之前的工作 在创建dblink之前,首先要查看用户是否有相应的权限.针对特定的用户,使用 sqlplus user/pwd登录后,执行如下语句: 复制代码 代码如下: select * from user_sys_privs t where t.privilege like upper('%link%'); 在sys用户下,显示结果为: SYS CREATE DATABASE LINK NO SYS

mysql之TIMESTAMP(时间戳)用法详解_Mysql

一.TIMESTAMP的变体 TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如: 1.在创建新记录和修改现有记录的时候都对这个数据列刷新: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 2.在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它: TIMESTAMP DEFAULT CURRENT_TIMESTAMP 3.在创建新记录的时候把这个字段设置为0,以后修改时刷新它: TIMES

MySQL解决SQL注入的另类方法详解_Mysql

本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: select * from T where f1 = '{value1}' and f2 = {value2} 现在我们需要根据用户输入值填充该语句: value1=hello value2=5 我们得到了下面的 SQL 语句,我们再提交给数据库: select * from T where f1='h

vuejs动态组件给子组件传递数据的方法详解_javascript技巧

通过子组件定义时候的props可以支持父组件给子组件传递数据,这些定义的props在子组件的标签中使用绑定属性即可,但是如果使用的是<component>动态组件,这个时候就没有显式的子组件标签,要给子组件传递数据需要在<component> 中进行绑定 <div class="app" id="deviceready"> <component :is="currentView" :user_name.s

MySQL数据备份之mysqldump的使用详解_Mysql

mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的du

SQL 联合查询与XML解析实例详解_MsSql

SQL 联合查询与XML解析实例           这里举例说明如何实现该功能: (select a.EBILLNO, a.EMPNAME, a.APPLYDATE, b.HS_NAME, replace(replace(a.SUMMARY,char(10), ''),char(13),'') as SUMMARY, cast(c.XmlData as XML).value('(/List/item/No/text())[1]','NVARCHAR(300)') as No, cast(c.X

MySQL分组查询Group By实现原理详解_Mysql

由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作.当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算.所以,在GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引. 在MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的场景下使用.下面我们分别针对这三种实现方式做一个分

Yii中的relations数据关联查询及统计功能用法详解_php实例

本文实例讲述了Yii中的relations数据关联查询及统计功能用法.分享给大家供大家参考,具体如下: 关联查询,Yii 也支持所谓的统计查询(或聚合查询). 它指的是检索关联对象的聚合信息,例如每个 post 的评论的数量,每个产品的平均等级等. 统计查询只被 HAS_MANY(例如,一个 post 有很多评论) 或 MANY_MANY (例如,一个 post 属于很多分类和一个 category 有很多 post) 关联对象执行. 执行统计查询非常类似于之前描述的关联查询.我们首先需要在 C

Mysql中order by语句的优化详解

在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序.where条件和order by使用相同的索引,并且order by的顺序和索引顺序相同,并且order by的字段都是升序或者都是降序. 一.建议使用一个索引来满足Order By子句. 在条件允许的情况下,笔者建议最好使用一个索引来满足Order By子句.如此的话,就可以避免额外的排序工作.这里笔者需要强调的一点是及时Order By子句不确切匹配索引,但是只要Where子句中所有未使用的索引部分和所有