MySQL学习笔记(十二)__连接查询(一)
连接查询
含义:
又称多表查询,当查询的字段来自多个表时,就会用到连接查询
笛卡尔乘积现象:表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学习笔记(十二)__连接查询(一)的更多相关文章
- MySQL学习笔记十二:数据备份与恢复
数据备份 1.物理备份与逻辑备份 物理备份 物理备份就是将数据库的数据文件,配置文件,日志文件等复制一份到其他路径上,这种备份速度一般较快,因为只有I/O操作.进行物理备份时,一般都需要关闭mysql ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- MySQL学习笔记十五:优化(2)
一.数据库性能评测关键指标 1.IOPS:每秒处理的IO请求次数,这跟磁盘硬件相关,DBA不能左右,但推荐使用SSD. 2.QPS:每秒查询次数,可以使用show status或mysqladmin ...
- java jvm学习笔记十二(访问控制器的栈校验机制)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...
- MySQL学习(四) SQL连接查询
更多情况下,我们查询的数据来源于多张表,所有有必要了解一下MySQL中的连接查询. SQL中将连接查询分成四类:交叉连接,内连接,外连接和自然连接. 数据准备 student表 -- -------- ...
- MySQL学习笔记(二)
二.SQL基本知识 SQL 是一种典型的非过程化程序设计语言,这种语言的特点是:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这些操作是如何执行的,则未被指定.非过程化程序设计语言的优点在于 ...
- (C/C++学习笔记) 十二. 指针
十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...
随机推荐
- CSS Modules 解决 react 项目 css 样式互相影响的问题
1. CSS Modules引入目的 写过CSS的人,应该都对一大长串选择器选中一个元素不陌生吧,这种方式,其实定义的就是全局样式,我们时常会因为选择器权重问题,没有把我们想要的样式加上去. 另外,每 ...
- 安装eclipse中html/jsp/xml editor插件以及改动html页面的字体
近期在做android项目,用到了jquery mobile 框架以及phonegap,所以就会涉及一些html文件,可是html文件打开的方式是Text Editor ,而且打开之后一些html代码 ...
- hdu 3006 The Number of set(思维+壮压DP)
The Number of set Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- Linux 编译C++ 与 设置 Vim
1. Linux 下编译c++ vim test.cpp // 创建文件 g++ test.cpp // 编译文件 ./a.out // 执行文件 g++ test.cpp ...
- Java语言中extend和implement的区别
Java语言并不支持多重继承,而只能继承一个类,不过我们可以使用implements来实现多个接口. extends继承的父类:不能声明为final或者定义为abstract: implements实 ...
- Unity3D游戏开发最佳实践20技巧(一)
关于这些技巧这些技巧不可能适用于每一个项目. 这些是基于我的一些项目经验.项目团队的规模从3人到20人不等. 框架结构的可重用性.清晰程度是有代价的--团队的规模和项目的规模决定你要在这个上面付出多少 ...
- 【CEOI2002】【Poj 1038】Bugs Integrated, Inc.
http://poj.org/problem?id=1038 发一下中文题面(今天考试直接被改了): 生记茶餐厅由于受杀人事件的影响,生意日渐冷清,不得不暂时歇业.四喜赋闲在家,整天抱着零食看电视,在 ...
- 洛谷P2680 运输计划——树上差分
题目:https://www.luogu.org/problemnew/show/P2680 久违地1A了好高兴啊! 首先,要最大值最小,很容易想到二分: 判断当前的 mid 是否可行,需要看看有没有 ...
- bat 截取字符串(for命令) 推荐收藏
摘自:http://www.jb51.net/article/50354.htm 今天需要用批处理命令处理文件夹中的文件,需要用到bat中的for命令以及字符串截取的一些命令.在上面的链接中找到许多有 ...
- log4j日志基本配置
Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松 ...