Mysql查询相关知识(进阶五:分组查询,进阶六 连接查询)

  • 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.简单的分组查询


#案例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;

2.添加分组后的筛选


#案例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;

一、sq192标准


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;

二、sq199标准


语法:

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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

架构学习资料

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ava开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

架构学习资料

[外链图片转存中…(img-BF7N9Qrw-1713509096107)]

[外链图片转存中…(img-yyV8Gd8m-1713509096109)]

[外链图片转存中…(img-oINO6gas-1713509096111)]

[外链图片转存中…(img-O3W5AaOH-1713509096113)]

[外链图片转存中…(img-nRx7t30R-1713509096115)]

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值