连接:连接分为内连接、外连接、交叉连接

内连接和外连接都是在笛卡尔积的基础做一些修改。

合并查询:把两个相似的结果可以用union联合起来。

mysql> select id,time from exam
-> union
-> select id,time from recuit;
+-----+------------+
| id | time |
+-----+------------+
| 1 | 2016-08-30 |
| 2 | 2016-09-10 |
| 8 | NULL |
| 9 | 2016-08-31 |
| 100 | 2014-08-06 |
| 1 | 2016-08-31 |
| 2 | 2016-08-25 |
| 3 | 2016-08-31 |
+-----+------------+
8 rows in set (0.14 sec)

子查询:

当子查询为单行单列时:可以用子查询的某条记录作为where condition的元素之一。

mysql> select id from recuit
-> where id>
-> (select id from exam where name="tengxun");
+----+
| id |
+----+
| 2 |
| 3 |
| 9 |
+----+
3 rows in set (0.12 sec) mysql> (select id from exam where name="tengxun");
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)

子查询的返回值为多行多列时:

mysql> select * from recuit
-> where (id,time)
-> >
-> (select id,time from exam where id=1);
+----+------------+-----------------+---------+--------+
| id | time | process | name | result |
+----+------------+-----------------+---------+--------+
| 1 | 2016-08-31 | wait for result | baidu | 1 |
| 2 | 2016-08-25 | haha | tengxun | 1 |
| 3 | 2016-08-31 | jiayou | wangyi | 1 |
| 9 | 2016-08-31 | happy | wangyi | 1 |
+----+------------+-----------------+---------+--------+
4 rows in set (0.02 sec)

带有关键字In的查询,当主查询的条件是子查询的查询结果中时,就可以通过关键字in来判断。相反如果不是可以用not in。

select * from table_name
where field_name in
(select field_name from table_name);

带有关键字ANY的查询:

=ANY:功能与in一样。

>ANY: 返回比子查询中最小的还要大的记录。只要大于子查询中其中一个就行了。

<ANY:返回比子查询中最大的还要小的记录。只要小于一个就行了。

带有关键字ALL的查询:

>ALL:比最大的还要大。

<ALL:比最小的还要小。

带有关键字exists

exist的子查询实际上不返回任何记录,而是返回true和false,如果子查询存在至少一条记录,就会返回true。否则就是false.

问题1:

--users表有1000条记录,id自增,id都大于0

select * from users where exists (select * from users limit 0); --输出多少条记录?

select * from users where exists (select * from users where id < 0); --输出多少条记录?

答案(请选中查看):

10000条

0条

 原因:

exists查询的本质,只要碰到有记录,则返回true;所以limit根本就不会去管,或者说执行不到。

问题2:

exists可以完全代替in吗?

不能。

例如:

--没有关联字段的情况:枚举常量

select * from areas where id in (4, 5, 6);

--没有关联字段的情况:这样exists对子查询,要么全true,要么全false

select * from areas where id in (select city_id from deals where deals.name = 'xxx'); 

SQL连接、合并、子查询的更多相关文章

  1. ylb:SQL 表的高级查询-多表连接和子查询

    ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...

  2. MySQL多表查询之外键、表连接、子查询、索引

    MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...

  3. 读《程序员的SQL金典》[3]--表连接、子查询

    一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...

  4. MS sql server 基础知识回顾(二)-表连接和子查询

    五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...

  5. SQL Server 数据库子查询基本语法

    一.SQL子查询语句 1.单行子查询        select ename,deptno,sal        from emp        where deptno=(select deptno ...

  6. MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  7. HIVE:用外连接替代子查询

    由于hive也支持sql,很多人会把hql跟标准sql进行比较,甚至有的时候会直接套用.hive不支持事务也不支持索引,更不支持追加写,但是对于一般的sql都是能够支持的.但是对于一些子查询确实无法支 ...

  8. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  9. MySQL开发——【联合查询、多表连接、子查询】

    联合查询 所谓的联合查询就是将满足条件的结果进行拼接在同一张表中. 基本语法: select */字段 from 数据表1 union [all | distinct] select */字段 fro ...

  10. mysql学习笔记-- 多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

随机推荐

  1. Jmeter(十三)用Jmeter自带录制工具代理录制手机端应用脚本APP脚本

    JM 菜单栏(即编辑下面的绿色按钮),Templates -->Select Template 选择 Recording -->create: 然后在工作台 (WorkBench)下面的H ...

  2. Oracle 使用命令导入dmp文件

    若要导入到特定的表空间则需要新建表空间,若不要求,则用已有的,则只需执行下面的步骤 在dos窗口中输入imp 用户名/密码@ip地址:端口号/数据库实例 file='需要导入的dmp文件的路径' fu ...

  3. React 实践项目 (一)

    React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! 项目代码地址:https: ...

  4. HTML5 drag和drop的亲手实践

    起因 最近在公司打杂的时候,突然分到了一个锅,就是要支持一个新的功能:用户可以通过拖曳组件来改变组件的顺序.因此,这阵子就看了一下网上的一些drag和drog的文章以及W3C的介绍,然后自己亲手实践了 ...

  5. Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序

    Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序 1. 一键启动的过程 1.1 对于global key, 系统会根据global_keys.xml发送消息给某个组件 & ...

  6. C++第一篇--类的引入

    C++第一篇--类的引入 1. 用C语言输出两个人的信息 Person1.c:通过字符实现 #include <stdio.h> int main(int argc,int **argv) ...

  7. 50行代码实现的高性能动画定时器 raf-interval

    写在前面 raf-interval 是基于 window.requestAnimationFrame() 封装的定时器. Github: https://github.com/dntzhang/raf ...

  8. Android - 关于设备版本号

    设备信息可以在Settings - About 里看到 最近想改机器的build number,找到了 build/core/Makefile 里的定义 # Display parameters sh ...

  9. Docker 中的一些概念

    笔者使用 Mac 系统玩的,所以会更多阐述 Mac 上使用的一些东西. 在安装之前有些 Docker 相关的概念需要了解一下,以便我们更好了解 Docker. 简单来说,安装 Docker 之后,会在 ...

  10. angularjs 动态显示内容适用于$modal

    1.创建指令 angular.module('app').directive('dynamicElement', ["$compile", function ($compile) ...