SQL连接、合并、子查询
连接:连接分为内连接、外连接、交叉连接
内连接和外连接都是在笛卡尔积的基础做一些修改。

合并查询:把两个相似的结果可以用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连接、合并、子查询的更多相关文章
- ylb:SQL 表的高级查询-多表连接和子查询
ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
- 读《程序员的SQL金典》[3]--表连接、子查询
一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...
- MS sql server 基础知识回顾(二)-表连接和子查询
五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...
- SQL Server 数据库子查询基本语法
一.SQL子查询语句 1.单行子查询 select ename,deptno,sal from emp where deptno=(select deptno ...
- MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- HIVE:用外连接替代子查询
由于hive也支持sql,很多人会把hql跟标准sql进行比较,甚至有的时候会直接套用.hive不支持事务也不支持索引,更不支持追加写,但是对于一般的sql都是能够支持的.但是对于一些子查询确实无法支 ...
- MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- MySQL开发——【联合查询、多表连接、子查询】
联合查询 所谓的联合查询就是将满足条件的结果进行拼接在同一张表中. 基本语法: select */字段 from 数据表1 union [all | distinct] select */字段 fro ...
- mysql学习笔记-- 多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
随机推荐
- 快学Scala之继承
## 1. 继承 Scala语言通过 extends 关键字来继承类. 那么继承一个类有什么好处呢? 子类除了拥有继承自超类的方法和字段(即为val(常量), var(变量)所定义的), 还可 ...
- Java 容器在实际项目中的应用
前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用 ...
- 对于所有对象都通用方法的解读(Effective Java 第二章)
这篇博文主要介绍覆盖Object中的方法要注意的事项以及Comparable.compareTo()方法. 一.谨慎覆盖equals()方法 其实平时很少要用到覆盖equals方法的情况,没有什么特殊 ...
- 机器学习之支持向量机(SVM)
支持向量机 百度百科(基本看不懂):http://baike.baidu.com/link?url=Z4MU6AYlf5lOX7UGHVYg9tBvxBGOkriPtNt0DixmscnMz06q5f ...
- 使用Vue-resource完成交互
使用vue-resource 引入vue-resource vue-resource就像jQuery里的$.ajax,是用来跟后端交互数据的,vue-resource是vue的一个插件,所以我们在开始 ...
- MongoDB 系列(一) C# 简易入门封装
之前写过一篇关于MongoDB的封装 发现太过繁琐 于是打算从新写一篇简易版 1:关于MongoDB的安装请自行百度,进行权限认证的时候有一个小坑,3.0之后授权认证方式默认的SCRAM-SHA-1模 ...
- NLP中的用N-gram语言模型做英语完型填空的环境搭建
本文是对xing_NLP中的用N-gram语言模型做完型填空这样一个NLP项目环境搭建的一个说明,本来想写在README.md中.第一次用github中的wiki,想想尝试一下也不错,然而格式非常的混 ...
- JS操作数组常用的方法
JS操作Array对象的方法 concat(arr1,arr2,...):连接数组indexOf(value):返回数组中value的第一个索引join(separator):将数组中所有的元素连接由 ...
- js模块加载详解
看着java中各种import加载,在回过头来看看javascript还在自己造轮子,写各种XX的模块加载框架,ECMASCRIPT6不知什么时候能够普及.不过DT归DT,该学的还是要学. 一 同步加 ...
- Hadoop hdfs上传文件 权限问题
问题描述: hadoop在虚拟机中的linux系统下 在本地通过eclipse编写代码把本地文件上传至hadoop平台的指定目录 代码如下: @Test public void upload() th ...