连接查询
含义:
又称多表查询,当查询的字段来自多个表时,就会用到连接查询

笛卡尔乘积现象:表1 有 m 行,表2 有 n 行,结果 = m*n 行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件

分类:
按年代分类:
           sql192 标准:仅支持内连接
           sql199 标准;支持内连接+外连接(左外、右外)+交叉连接

按功能分类:
           内连接:
                      等值连接
                      非等值连接
                      自连接
           外连接:
                      左外连接
                      右外连接
                      全外连接
           交叉连接

一、sql192 标准
内连接
1、等值连接
a.多表等值连接的结果为多表的交集部分
b.n表连接,至少需要n-1个连接条件
c.多表的顺序没有要求
d.一般需要为表取别名
e.可以搭配前面所有的子句使用,比如排序、分组、筛选
1
2
3
4
5
e.g.:查询员工名和对应的部门名

SELECT
last_name,
department_name
FROM
employees,
departments
WHERE
employees.department_id = departments.department_id;
1
2
3
4
5
6
7
8
2、为表起别名
a.提高语句的简洁度
b.区分多个重名的字段
注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定
1
2
3
e.g.:查询员工名、工种号、工种名

SELECT
last_name,
e.job_id,
j.job_title
FROM
employees AS e,
jobs AS j
WHERE
e.job_id = j.job_id;
1
2
3
4
5
6
7
8
9
3、两个表的顺序可以调换
e.g.:查询员工名、工种号、工种名

SELECT
last_name,
e.job_id,
j.job_title
FROM
jobs AS j,
employees AS e
WHERE
e.job_id = j.job_id;
1
2
3
4
5
6
7
8
9
4、可以加筛选
e.g.:查询有奖金的员工名、部门名

SELECT
last_name,
department_name,
commission_pct
FROM
employees AS e,
departments AS d
WHERE
e.department_id = d.department_id
AND commission_pct IS NOT NULL;
1
2
3
4
5
6
7
8
9
10
e.g.:查询城市名中第二个字符为o的部门名和城市名

SELECT
city,
department_name
FROM
locations l,
departments d
WHERE
l.location_id = d.location_id
AND city LIKE '_o%’;
1
2
3
4
5
6
7
8
9
5、可以加分组
e.g.:查询每个城市的部门个数

SELECT
COUNT( * ) 个数,
city
FROM
departments d,
locations l
WHERE
d.location_id = l.location_id
GROUP BY
city;
1
2
3
4
5
6
7
8
9
10
e.g.:查询有奖金的每个部门名和部门的领导编号和该部门的最低工资

SELECT
department_name,
d.manager_id,
MIN( salary )
FROM
departments d,
employees e
WHERE
d.department_id = e.department_id
AND commission_pct IS NOT NULL
GROUP BY
department_name,
manager_id;
1
2
3
4
5
6
7
8
9
10
11
12
13
6、可以加排序
e.g.:查询每个工种的工种名和员工个数,并按员工个数降序

SELECT
job_title,
COUNT( * )
FROM
jobs j,
employees e
WHERE
e.job_id = j.job_id
GROUP BY
job_title
ORDER BY
COUNT( * ) DESC;
1
2
3
4
5
6
7
8
9
10
11
12
7、三表连接
e.g.:查询员工名、部门名、所在城市

SELECT
last_name,
department_name,
city
FROM
employees e,
departments d,
locations l
WHERE
e.department_id = d.department_id
AND d.location_id = l.location_id;
1
2
3
4
5
6
7
8
9
10
11
非等值连接
与等值连接类似

自连接
e.g.:查询员工名与上级名字

SELECT
e.employee_id 员工编号,
e.last_name 员工名,
m.employee_id 上级编号,
m.last_name 上级名
FROM
employees e,
employees m
WHERE
e.manager_id = m.employee_id;
---------------------

MySQL学习笔记(十二)__连接查询(一)的更多相关文章

  1. MySQL学习笔记十二:数据备份与恢复

    数据备份 1.物理备份与逻辑备份 物理备份 物理备份就是将数据库的数据文件,配置文件,日志文件等复制一份到其他路径上,这种备份速度一般较快,因为只有I/O操作.进行物理备份时,一般都需要关闭mysql ...

  2. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  3. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  4. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  5. MySQL学习笔记十五:优化(2)

    一.数据库性能评测关键指标 1.IOPS:每秒处理的IO请求次数,这跟磁盘硬件相关,DBA不能左右,但推荐使用SSD. 2.QPS:每秒查询次数,可以使用show status或mysqladmin ...

  6. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  7. MySQL学习(四) SQL连接查询

    更多情况下,我们查询的数据来源于多张表,所有有必要了解一下MySQL中的连接查询. SQL中将连接查询分成四类:交叉连接,内连接,外连接和自然连接. 数据准备 student表 -- -------- ...

  8. MySQL学习笔记(二)

    二.SQL基本知识 SQL 是一种典型的非过程化程序设计语言,这种语言的特点是:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这些操作是如何执行的,则未被指定.非过程化程序设计语言的优点在于 ...

  9. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

随机推荐

  1. 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习

    反射实现Model修改前后的内容对比   在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...

  2. 自己动手写shell命令之ls -R1fF

    ls命令的R參数代表递归的列出全部子目录中的全部文件,1表示每一行仅仅显示一个文件或目录,f表示不排序即输出.F表示在每项的输出的最后依据其文件类型对应的加上*/=>@|字符.通过c语言实现ls ...

  3. JSON参数

    JSON(JavaScript Object Notation,JavaScript 对象表示法),多么简单,不就是键值对嘛. 可是每次在前后端之间通过json作为参数传递,我都心烦意乱,甚至吓到面无 ...

  4. 【bzoj4597】 [Shoi2016]随机序列

    可以发现加减号之间可以互相抵消. 真正加到答案里的只有一些前缀积. 记s[i]为a[1]*a[2]*a[3]...*a[i].那s[i]在答案中出现的次数就是2*3^(n-i-1); 修改一个数只会对 ...

  5. 说说循环与闭包——《你不知道的JS》读书笔记(一)

    什么是闭包 <你不知道的JS>里有对闭包的定义:"当函数可以记住并访问所在的词法作用域,即使函数是在当前作用域之外执行,这就产生了闭包." 讲闭包是啥的太多了...就一 ...

  6. android 7源码的下载【转】

    本文转载自:http://www.jianshu.com/p/0799435daf8e android 7源码的下载 step: 1.ubuntu 环境 2.打开终端(快捷键:ctrl + alt + ...

  7. hdoj--1877--又一版 A+B(水题)

     又一版 A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. bzoj3295 洛谷P3157、1393 动态逆序对——树套树

    题目:bzoj3295 https://www.lydsy.com/JudgeOnline/problem.php?id=3295 洛谷 P3157(同一道题) https://www.luogu.o ...

  9. Oracle 10g 10.2.0.4的group by BUG |ORA-00979 not a GROUP BY expression|

    乍看 ORA-00979 not a GROUP BY expression 这个提示估计很快能将其定位为SQL语句写得有问题,实际上有可能你遇到了一个Oracle的BUG,这个BUG常见于10.2. ...

  10. Maximum Gap 典型线性排序

    https://leetcode.com/problems/maximum-gap/ Given an unsorted array, find the maximum difference betw ...