mysql多表连接和子查询
文章实例的数据表,来自上一篇博客《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多表连接和子查询的更多相关文章
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
- ylb:SQL 表的高级查询-多表连接和子查询
ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...
- MySQL开发——【联合查询、多表连接、子查询】
联合查询 所谓的联合查询就是将满足条件的结果进行拼接在同一张表中. 基本语法: select */字段 from 数据表1 union [all | distinct] select */字段 fro ...
- MySQL学习笔记——多表连接和子查询
多表连接查询 # 返回的是两张表的乘积 SELECT * FROM tb_emp,tb_dept SELECT COUNT(*) FROM tb_emp,tb_dept # 标准写法,每个数据库都能这 ...
- MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- mysql学习笔记-- 多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- MS sql server 基础知识回顾(二)-表连接和子查询
五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...
- 读《程序员的SQL金典》[3]--表连接、子查询
一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...
随机推荐
- checkbox的全选,取消全选,获得选中值
<html> <head> <title>jq全选以及获得选中项的值</title> <meta charset="utf-8" ...
- Thread.sleep
Thread.sleep() The current thread changes state from Running to Waiting/Blocked as shown in the diag ...
- bzoj3899 弦论
好久没有更blog了啊... 对于一个给定长度为N的字符串,求它的第K小子串是什么. 这是一个SAM的模板题. 我好弱啊这个时候才开始学SAM,才会用指针. 要维护3个东西:每个状态right集合的大 ...
- LDAP Authentication Handler
Including the Handler In the pom.xml file for your CAS Maven2 WAR Overlay, add the following depende ...
- vue中element-ui添加按钮
<div v-for="(v,i) in list"> <el-form label-width="120px" size="sma ...
- 剑指offer 1-6
1. 二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化 第一章:向量代数 1.向量计算的时候,使用XMV ...
- 2018-2-13-图论-Warshall-和Floyd-矩阵传递闭包
title author date CreateTime categories 图论 Warshall 和Floyd 矩阵传递闭包 lindexi 2018-2-13 17:23:3 +0800 20 ...
- 搭建OA项目环境及卸载指南
一.项目介绍 1).JDK是什么? 全称:Java Development Kit 中文名:java开发工具包 作用:提供java项目的运行环境 JDK安装 a.jdk.jre 安装 ...
- day4_python-之装饰器、迭代器、生成器
一.装饰器 1.为何要用装饰器 #开放封闭原则:对修改封闭,对扩展开放 2. 什么是装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被 ...