文章实例的数据表,来自上一篇博客《mysql简单查询》:http://blog.csdn.net/zuiwuyuan/article/details/39349611

MYSQL的多表连接建立在有相互关系的父子表上,分为交叉连接、内连接、外连接、自连接

一、 交叉连接/笛卡尔交集

SELECT COUNT(*) FROM emp;    # 返回14行
SELECT COUNT(*) FROM dept; #返回4行
SELECT COUNT(*) FROM emp,dept; #返回14*4=56行数据
SELECT COUNT(*) FROM emp CROSS JOIN dept; # 通过关键字CROSS JOIN进行交叉连接
SELECT * FROM emp,dept;
SELECT * FROM emp CROSS JOIN dept;

二、内连接

语法:

select ... from join_table

[inner] JOIN join_table2

[ON join_condition]

where where_definition

只列出这些连接表中与连接条件相匹配的数据行

内连接分类:

      等值连接: 在连接条件中使用=运算符来比较被连接列的列值

      非等值连接: 在连接条件中使用除等号以外的其他比较运算符来比较背连接的列的列值

      自然连接: 在连接条件中使用=运算符来比较被连接列的列值, 但它使用选择列表指出查询结果集合中所包含的列,并删除连接表中的重复列



2.1 连接条件就是主外键相连

SELECT * FROM emp e,dept d WHERE e.deptno=d.deptno;

标准的内连接语法

SELECT * FROM emp
INNER JOIN dept
ON emp.deptno= dept.deptno;

三、外连接

      语法:

         select... from join_table

         (left|right|full) [outer] join join_table2

         on join_condition

         where where_definition

         

      不仅列出与连接条件相匹配的行,还列出左表(左连接),右表(右连接)或者两个表(全连接)中所有符合where过滤条件的数据行



3.1 左连接

在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行

左连接,左表为主表,左边的表记录全部显示,如果没找到记录则补null

SELECT * FROM dept
LEFT JOIN emp
ON dept.deptno=emp.deptno;

SELECT * FROM emp
LEFT JOIN dept
ON emp.deptno=dept.deptno;

3.2 右连接

SELECT * FROM emp
RIGHT JOIN dept
ON dept.deptno=emp.deptno;





3.3 全连接(mysql不支持)

SELECT * FROM emp
FULL JOIN dept
ON dept.deptno=emp.deptno;

四、 子查询

    在某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要用到子查询

    为了给主查询提供数据而首先执行的查询被叫做子查询

    用于子查询的关键字主要包括in、not in、=、<>等

4.1 查询工资比ALLEN搞的员工

SELECT *
FROM emp
WHERE sal>(
SELECT sal FROM emp WHERE ename='ALLEN'
)





4.2 查询和ALLEN同一个部门的员工

SELECT *
FROM emp
WHERE deptno=(
SELECT deptno FROM emp WHERE ename='ALLEN'
)

4.3 查询月薪最高的员工的名字

SELECT ename,sal
FROM emp
WHERE sal=(
SELECT MAX(sal)
FROM emp
)



4.4  单行子查询返回多个结果--错误

SELECT *
FROM emp
WHERE sal=(
SELECT MIN(sal)
FROM emp
GROUP BY deptno
)

4.5 子查询没有返回结果

SELECT *
FROM emp
WHERE job=(
SELECT job
FROM emp
WHERE ename='lining'
)

4.6 in 与列表中的任意成员相等(等于子查询的任意结果)

SELECT *
FROM emp
WHERE sal IN(
SELECT sal
FROM emp
WHERE job='SALESMAN'
)



4.7 ANY 与子查询返回的每一个值比较(这里小于子查询的任一个结果)

SELECT *
FROM emp
WHERE sal<ANY(
SELECT sal
FROM emp
WHERE job='SALESMAN'
)

4.8  ALL与子查询返回的所有值比较 (这里要小于子查询的所有结果)

SELECT *
FROM emp
WHERE sal<ALL(
SELECT sal
FROM emp
WHERE job='SALESMAN'
)

mysql多表连接和子查询的更多相关文章

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

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

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

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

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

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

  4. MySQL学习笔记——多表连接和子查询

    多表连接查询 # 返回的是两张表的乘积 SELECT * FROM tb_emp,tb_dept SELECT COUNT(*) FROM tb_emp,tb_dept # 标准写法,每个数据库都能这 ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. PAI-STUDIO通过Tensorflow处理MaxCompute表数据

    PAI-STUDIO在支持OSS数据源的基础上,增加了对MaxCompute表的数据支持.用户可以直接使用PAI-STUDIO的Tensorflow组件读写MaxCompute数据,本教程将提供完整数 ...

  2. DLedger —基于 raft 协议的 commitlog 存储库

    “点击获取上云帮助文档” 尊敬的阿里云用户: 您好!为方便您试用开源 RocketMQ 客户端访问阿里云MQ,我们申请了专门的优惠券,优惠券可以直接抵扣金额.请填写下您公司账号信息,点击上图,了解更多 ...

  3. hack 记录

    0.寻找信号强的wifi,对于隐藏ssid 的可通过嗅探 1.wifi密码:wifi万能钥匙.minidwep-gtk.aircrack-ng 2.对于绑定mac地址的安全设置,可通过对活动的客户端网 ...

  4. ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇

    ASP.NET自定义控件组件开发 第一章 第三篇   第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...

  5. 我从HTML的meta中学到了什么

    meta meta中有这样几个常用属性:http-equiv,name,content,包括html5新增的charset. 注意:content属性用来存储meta信息的内容,所有的主流浏览器都支持 ...

  6. CMake学习笔记六-引用cmake文件

    include(${CMAKE_CURRENT_SOURCE_DIR}/../Share/share.cmake)

  7. URL编程

    package com.tanlei.URL; import java.io.File; import java.io.FileOutputStream; import java.io.IOExcep ...

  8. 【JZOJ4755】【NOIP2016提高A组模拟9.4】快速荷叶叶变换

    题目描述 输入 一行,包含两个整数N,M. 输出 1个整数,FHT(N,M) mod 1000000007的值. 样例输入 3 4 样例输出 1 数据范围 对于 40% 的数据,1 ≤ N,M ≤ 1 ...

  9. python流程控制和循环

    变量的命名:可以由数字字母下换线组成 ,不能以数字开头,可以使用中文但是不推荐使用中文,不推荐前面使用_ __,不能使用系统的关键字,变量名严格区分大小写 逻辑运算优先级 or<and<n ...

  10. facebook第三方登录

    一:创建和配置开发者应用 https://developers.facebook.com 登录开发者(可能要手机验证,身份证严重)->创建应用(web )->填写配置,网站网址和应用域名需 ...