IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 二、数据查询语言(三) -> 正文阅读

[大数据]二、数据查询语言(三)

MySQL


一、初识数据库
二、数据查询语言(一)
二、数据查询语言(二)
二、数据查询语言(三)

数据查询语言包括: 基础查询 条件查询 排序查询 分组查询 连接查询 子查询 分页查询 联合查询

前言


提示:以下是本篇文章正文内容,下面案例可供参考
且所用数据表为:可自行下载

连接查询

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

笛卡尔乘积现象:表1 有m行,表2 有n行,结果=m*n行

发生原因:没有有效的连接条件

如何避免:添加有效的连接条件

分类:
	按年代分类:
		sq192标准:仅仅支持内连接
		sq199标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接
		
	按功能分类:
		内连接:
			等值连接
			非等值连接
			自连接
		外连接
			左外连接
			右外连接
			全外连接
		交叉连接

sql99语法

语法:
	select 查询列表
	from 表1 别名 【连接类型】
	join 表2 别名 
	on 连接条件
	【where 筛选条件】
	【group by 分组】
	【having 筛选条件】
	【order by 排序列表】

内连接(?)inner
外连接
	左外(?)left【outer】
	右外(?)right【outer】
	全外 full【outer】
交叉连接 cross join

一、内连接

语法:
	select 查询列表
	from 表1别名
	inner join 表2 别名
	on 连接条件;
	
分类:
等值
非等值
自连接

特点:
	1、添加分组、排序、筛选
	2、inner可以省略
	3、筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
	4、inner join连接和sql92语法等值连接效果是一样的,都是查询多表的交集部分

案例1:查询员工名和部门名

#可调换顺序
SELECT last_name,department_name
FROM employees e
INNER JOIN departments d
ON e.`department_id`=d.`department_id`;

案例2:查询名字中包含a的员工名和工种名(添加筛选)

SELECT last_name,job_title
FROM employees e
INNER JOIN jobs j
ON e.`job_id`=j.`job_id`
WHERE last_name LIKE '%a%';

案例3:查询部门个数>3的城市名和部门个数(分组+筛选)

SELECT city,COUNT(*) 部门个数
FROM departments d
INNER JOIN locations l
ON d.`location_id`=l.`location_id`
GROUP BY city#分组
HAVING COUNT(*)>3;

案例4:查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)

SELECT department_name,COUNT(*)
FROM employees e
INNER JOIN departments d
ON e.`department_id`=d.`department_id`
GROUP BY department_name
HAVING COUNT(*)>3
ORDER BY COUNT(*) DESC;

5.查询员工名、部门名、工种名,并按部门名降序(添加三表连接)

SELECT last_name,department_name,job_title
FROM employees e
INNER JOIN departments d
ON e.`department_id`=d.`department_id`
INNER JOIN jobs j
ON e.`job_id`=j.`job_id`
ORDER BY department_name DESC;

非等值连接

查询员工的工资级别

SELECT salary,grade_level
FROM employees e
INNER JOIN job_grades g
ON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`;

#查询每个工资级别的个数>2的个数,并且按工资级别降序
SELECT grade_level,COUNT(*)
FROM employees e
INNER JOIN job_grades g
ON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`
GROUP BY grade_level
HAVING COUNT(*)>20
ORDER BY grade_level DESC;

三)自连接

#查询姓名中包含字符k的员工名字、上级的名字
SELECT e.last_name,m.last_name
FROM employees e
INNER JOIN employees m
ON m.`employee_id`=e.`manager_id`
WHERE e.last_name LIKE '%k%';
``
## 二、外连接
```c
/*
应用场景:用于查询一个表中有,另一个没有的记录

特点:
1、外连接查询结果为主表的所有记录
	如果从表中有和它匹配的,则显示匹配的值
	如果从表中没有和它匹配的,则显示null
	外连接查询结果=内连接结果+主表中有而从表中没有的记录
2、左外连接,left join左边的是主表
   右外连接,right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样效果
4、全外连接=内连接的结果+表1中有但表2中没有的+表2中有表1没有的
*/

引入:查询 男朋友 不在男神表的女神名

#select * from beauty;
#select * from boys;
#左外连接
SELECT b.name,bo.*
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.`boyfriend_id`=bo.`id`
WHERE bo.`id` IS NULL;
#右外连接
SELECT b.name,bo.*
FROM boys bo
RIGHT OUTER JOIN beauty b
ON b.`boyfriend_id`=bo.`id`
WHERE bo.`id` IS NULL;

案例1:查询那个部门没有员工

#左外连接
USE myemployees;
SELECT d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.`department_id`=e.`department_id`
WHERE e.`employee_id` IS NULL;

#右外连接
SELECT d.*,e.employee_id
FROM employees e
RIGHT OUTER JOIN departments d
ON d.`department_id`=e.`department_id`
WHERE e.`employee_id` IS NULL;

全外连接

/*
查出交集部分	
mysql不支持
*/
USE girls;
SELECT b.name,bo.*
FROM beauty b
FULL OUTER JOIN boys bo
ON b.`boyfriend_id`=bo.`id`;


#交叉连接
SELECT b.*,bo.*
FROM beauty b
CROSS JOIN boys bo;

sql92和sql99pk

功能:sql99支持的较多
可读性:sql99实现连接条件和筛选条件的分离,可读性较高

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:50:07  更:2021-12-02 16:50:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:44:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码