-
4.可以加分组
-
5.可以加排序
-
6.可以实现三表连接
-
2.非等值连接
-
3.自连接
-
二、sq199标准
-
- 语法:
-
分类:
-
相关概念
-
1.等值连接
-
2、非等值连接
-
3、自连接
-
4.外连接
-
- 1.左外
-
2.右外
-
5.全外连接
=================================================================
上次说到了MySQL的查询进阶三和四,这次继续讨论查询的相关的知识
链接: https://pan.baidu.com/s/1a_wstxPVhxeliZkt6-BTiw
提取码: gaj8
=======================================================================
select 分组函数,列(要求出现在group by的后面)
from 表
【where 筛选条件】
group by 分组的列表
【oder by 子句】
注意:查询列表必须特殊,要求是分组函数和group by后出现的字段
1.分组查询中的筛选分为两类
分组前筛选 位置:group by 子句的前面 关键字:where
分组后筛选 位置:group by 子句的后面 关键字:having
能用分组前筛选的优先考虑分组前筛选
group by 既支持多个字段分组也支持单个字段的分组(多个字段的分组用逗号隔开且没有顺序的要求)
group by 也支持函数和表达式(用的相对上面的比较的少)
group by 也可以添加排序(放在整个的分组查询的最后的)
#案例1、查询每个工种的最高工资
SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id;
#案例2、查询每个位置的部门个数
SELECT COUNT(1),location_id
FROM departments
GROUP BY location_id
;
#案例3、查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
WHERE email
LIKE ‘%a%’
GROUP BY department_id
;
#案例4、查询有奖金的每个领导手下的最高工资
SELECT MAX(salary),manager_id
FROM employees
WHERE commission_pct
IS NOT NULL
GROUP BY manager_id
;
#案例5、查询哪个部门的员工个数大于2
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;
#案例6、查询每个工种有奖金的的员工的最高工资大于12000的工种编号和最高工资
SELECT MAX(salary),job_id
FROM employees
WHERE commission_pct
IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;
#案例7、查询领导编号大于102的每个领导手下的最低工资大于5000的领导编号是哪个,以及其最低工资
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id
> 102
GROUP BY manager_id
HAVING MIN(salary)>5000;
1. 按表达式或函数分组
#案例8、按姓名的长度分组,查询每一组的员工个数,筛选员工个数大于5的有那些
SELECT COUNT(*),LENGTH(last_name)
FROM employees
GROUP BY LENGTH(last_name)
HAVING COUNT(*)>5;
2. 按多个字段分组
#查询每个部门每个工种的员工的平均工资
SELECT AVG(salary),department_id
,job_id
FROM employees
GROUP BY department_id
,job_id
;
=======================================================================
又称多表查询,当查询的字段来自于多个表时,就会用到多表查询
笛卡尔乘积现象:表一有m行,表二有n行,结果就是:m*n行
发生的原因:没有有效的连接条件
如何避免:添加有限的连接条件
按年代分类:
sql92标准:仅仅支持内连接
sq199标准:【推荐】支持内连接+外连接(左外和右外)+交叉连接
按功能分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接
右外连接
全连接
交叉连接
SELECT * FROM beauty
;
SELECT * FROM boys
;
SELECT name
,boyName
FROM beauty
,boys
WHERE beauty
.boyfriend_id
=boys
.id
;
1.等值连接
1.多表等值连接的结果为多表的交集部分
2.n表连接至少需要n-1个连接条件
3.多表的顺序没有要求
4.一般需要为表起别名
5.可以搭配前面的所有子句进行使用,;例如分组,排序,筛选等等
#案例、查询对应的员工名和部门名
SELECT last_name
,department_name
FROM departments
,employees
WHERE employees
.department_id
=departments
.department_id
;
1.为表起别名
/*
好处:
①提高语句的简洁度
②区分多个重名的字段
注意:如果取了表名的别名就不能用原来的表名去限定了,只能用别名了
*/
#案例、查询员工名,工种号,工种名
SELECT e.last_name
,e.job_id
,j.job_title
FROM employees
e,jobs
j
WHERE e.job_id
=j.job_id
;
2.表的顺序是否可以调换(可以调换)
#案例、查询员工名,工种号,工种名
SELECT e.last_name
,e.job_id
,j.job_title
FROM jobs
j,employees
e
WHERE e.job_id
=j.job_id
;
3.可以加筛选
#案例、查询有奖金的员工名和部门名
SELECT e.last_name
,d.department_name
,e.commission_pct
FROM employees
e,departments
d
WHERE e.department_id
=d.department_id
AND e.commission_pct
IS NOT NULL;
#查询城市中第二个字符为o的城市名和部门名
SELECT l.city
,d.department_name
FROM departments
d,locations
l
WHERE d.location_id
=l.location_id
AND l.city
LIKE ‘_o%’;
4.可以加分组
#查询每个城市的部门个数
SELECT COUNT(*) 个数,l.city
FROM departments
d,locations
l
WHERE d.location_id
=l.location_id
GROUP BY l.city
#案例、查询有奖金的每个部门的部门名和部门领导的编号和该部门的最低工资
SELECT department_name
,d.manager_id
,MIN(salary
)
FROM departments
AS d,employees
e
WHERE d.department_id
=e.department_id
AND e.commission_pct
IS NOT NULL
GROUP BY d.department_name
,d.manager_id
;
5.可以加排序
#案例、查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT job_title
,COUNT(*)
FROM employees
e,jobs
j
WHERE e.job_id
=j.job_id
GROUP BY j.job_id
ORDER BY COUNT(*) DESC;
6.可以实现三表连接
#查询员工名,部门名和所在的城市
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
;
2.非等值连接
SELECT * FROM job_grades
;
#查询员工的工资和工资级别
SELECT salary,grade_level
FROM employees
e,job_grades
j
WHERE salary BETWEEN j.lowest_sal
AND j.highest_sal
;
3.自连接
#查询员工的名和上级的名称
SELECT e.employee_id
,e.last_name
,m.employee_id
,m.last_name
FROM employees
AS e,employees
AS m
WHERE e.manager_id
=m.employee_id
;
语法:
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【…】
分类:
内连接(⭐):inner
外连接:
左外(*):left 【outer】
右外(*):right【outer】
全外:full【outer】
交叉连接:cross
相关概念
#内连接
/*
语法:
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【…】
分类:
内连接:
等值连接
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
架构学习资料
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ava开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
架构学习资料
[外链图片转存中…(img-BF7N9Qrw-1713509096107)]
[外链图片转存中…(img-yyV8Gd8m-1713509096109)]
[外链图片转存中…(img-oINO6gas-1713509096111)]
[外链图片转存中…(img-O3W5AaOH-1713509096113)]
[外链图片转存中…(img-nRx7t30R-1713509096115)]
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!