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.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
随机推荐
- WriteTeacherObj
package JBJADV003;import java.io.*;public class WriteTeacherObj { /** * @param args */ public static ...
- 利用powershell反弹shell到metasploit
一.使用msfvenom生成PS1文件: msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST= -f psh-reflection >.p ...
- python学习笔记之运算符
目录 前言 软件环境 身份运算符 算术运算符 比较运算符 位移运算符 自变运算符 位运算符 逻辑运算符 成员关系运算符 Python真值表 最后 前言 在前面的博文介绍了Python的数据结构之后,接 ...
- dict-字典功能介绍
叨逼叨:#字典 可变类型 意思就是修改的是自己本身#可变类型,当修改后,内存里的值也会对应着修改#不可变类型,当修改后,会在内存里开启一块新的空间,放新的值#1.清空 # name = { # 'na ...
- 解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题
解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题 在原来项目中导入全志v3相机的 ...
- 由max_allowed_packet引发的mysql攻防大战
1.原因 程序的sql语句比较长.max_allowed_packet默认是1024.于是就报错了.一开始手动改 global max_allowed_packet ,改完后.莫名奇妙被还原.后来改配 ...
- java第二课,java基础2
关键字: 在java中被赋予了特殊含义的单词,具有特殊用途. 标识符: 由字母,数字,下划线(_),美元符($)组成,不能以数字开头,不能是jav ...
- 【转载】 ISO14229系列之二:诊断指令格式和相关概念
转载链接:http://www.cnblogs.com/autogeek/p/4458658.html 1. 简单的通信机制 其实诊断通信的机制很简单,可以类比client-server通信方式,即客 ...
- poj_1845: Sumdiv
题目链接 先将A^B分解质因数,可以通过先分解A,再把对应的幂次*B.之后用下面这个式子求解就可以了 #include<vector> #include<iostream> u ...
- CC攻击网站和游戏如何针对性预防?
1:CC攻击原理 CC = Challenge Collapsar,其前身名为Fatboy攻击,是利用不断对网站发送连接请求致 使形成拒绝服务的目的, CC攻击是DDOS(分布式拒绝服务)的一种,相比 ...