索引

  • 分组查询
    • 简单分组
    • 可以实现分组前的筛选
    • 可以实现分组后的筛选
    • 可以实现排序
    • 按多个字段分组
  • 连接查询(SQL99语法)
    • 内连接
    • 语法:
    • 等值连接
      • 简单查询
      • 添加筛选条件
      • 添加分组+筛选
      • 添加分组+筛选+排序
    • 非等值连接
    • 自连接

分组查询

语法:
select 查询列表
from 表名
where 筛选条件
group by 分组列表
having 分组后筛选
order by 排序列表;

执行顺序:
①from子句
②where子句
③group by 子句
④having子句
⑤select子句
⑥order by子句

分组前筛选 原始表 where group by 的前面

分组后筛选 分组后的结果集 having group by的后面

where——group by ——having

分组函数做条件只可能放在having后面!!!

简单分组

查询每个工种的员工平均工资

mysql> select avg(salary),job_id-> from employees-> group by job_id;
+--------------+------------+
| avg(salary)  | job_id     |
+--------------+------------+
|  8300.000000 | AC_ACCOUNT |
| 12000.000000 | AC_MGR     |
|  4400.000000 | AD_ASST    |
| 24000.000000 | AD_PRES    |
| 17000.000000 | AD_VP      |
|  7920.000000 | FI_ACCOUNT |
| 12000.000000 | FI_MGR     |
|  6500.000000 | HR_REP     |
|  5760.000000 | IT_PROG    |
| 13000.000000 | MK_MAN     |
|  6000.000000 | MK_REP     |
| 10000.000000 | PR_REP     |

查询每个领导的手下人数

mysql> select count(*),manager_id-> from employees-> where manager_id is not null-> group by manager_id;
+----------+------------+
| count(*) | manager_id |
+----------+------------+
|       14 |        100 |
|        1 |        102 |
|        4 |        103 |
|        5 |        101 |
|        5 |        108 |

可以实现分组前的筛选

查询邮箱中包含a字符的 每个部门的最高工资

mysql> select max(salary) 最高  ,department_id #最高后要加空格-> from employees-> where email like '%a%'-> group by department_id;
+----------+---------------+
| 最高     | department_id |
+----------+---------------+
|  7000.00 |          NULL |
|  4400.00 |            10 |
| 13000.00 |            20 |
| 11000.00 |            30 |
|  6500.00 |            40 |
|  8200.00 |            50 |

可以实现分组后的筛选

查询哪个部门的员工个数>5

  1. 查询每个部门的员工个数
  2. 在刚才的结果基础上,筛选哪个部门的员工个数>5
mysql> select count(*) 员工个数 ,department_id-> from employees-> group by department_id-> having count(*)>5;
+--------------+---------------+
| 员工个数     | department_id |
+--------------+---------------+
|            6 |            30 |
|           45 |            50 |
|           34 |            80 |
|            6 |           100 |
+--------------+---------------+

领导编号>102的 每个领导手下的最低工资大于5000的最低工资

  1. 查询每个领导手下员工的最低工资
  2. 筛选刚才1的结果
mysql> SELECT MIN(salary) 最低工资,manager_id-> from employees-> WHERE manager_id>102-> GROUP BY manager_id-> HAVING MIN(salary)>5000 ;
+--------------+------------+
| 最低工资     | manager_id |
+--------------+------------+
|      6900.00 |        108 |
|      7000.00 |        145 |
|      7000.00 |        146 |
|      6200.00 |        147 |
|      6100.00 |        148 |
|      6200.00 |        149 |
|      6000.00 |        201 |
|      8300.00 |        205 |
+--------------+------------+

可以实现排序

查询没有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序

  1. 按工种分组,查询每个工种有奖金的员工的最高工资

  2. 筛选刚才的结果,看哪个最高工资>6000

  3. 按最高工资升序

mysql> SELECT MAX(salary) 最高工资,job_id-> FROM employees-> WHERE commission_pct IS  NULL-> GROUP BY job_id-> HAVING MAX(salary)>6000-> ORDER BY MAX(salary) ASC;
+--------------+------------+
| 最高工资     | job_id     |
+--------------+------------+
|      6500.00 | HR_REP     |
|      8200.00 | ST_MAN     |
|      8300.00 | AC_ACCOUNT |
|      9000.00 | FI_ACCOUNT |
|      9000.00 | IT_PROG    |
|     10000.00 | PR_REP     |
|     11000.00 | PU_MAN     |
|     12000.00 | AC_MGR     |
|     12000.00 | FI_MGR     |
|     13000.00 | MK_MAN     |
|     17000.00 | AD_VP      |
|     24000.00 | AD_PRES    |
+--------------+------------+

按多个字段分组

查询每个工种每个部门的最低工资,并按最低工资降序

mysql> SELECT MIN(salary) 最低工资,job_id,department_id-> FROM employees-> GROUP BY job_id,department_id-> order by job_id,department_id;
+--------------+------------+---------------+
| 最低工资     | job_id     | department_id |
+--------------+------------+---------------+
|      8300.00 | AC_ACCOUNT |           110 |
|     12000.00 | AC_MGR     |           110 |
|      4400.00 | AD_ASST    |            10 |
|     24000.00 | AD_PRES    |            90 |
|     17000.00 | AD_VP      |            90 |
|      6900.00 | FI_ACCOUNT |           100 |
|     12000.00 | FI_MGR     |           100 |
|      6500.00 | HR_REP     |            40 |
|      4200.00 | IT_PROG    |            60 |
|     13000.00 | MK_MAN     |            20 |
|      6000.00 | MK_REP     |            20 |
|     10000.00 | PR_REP     |            70 |

连接查询(SQL99语法)

内连接

语法:

select 查询列表
from 表名1 别名
【inner】 join 表名2 别名
on 连接条件
where 筛选条件
group byY 分组列表
having分组后筛选
order by 排序列表;

等值连接

简单查询

查询员工名和部门名

SELECT last_name,department_name
FROM departments d
JOIN  employees e
ON e.department_id =d.department_id;

添加筛选条件

查询部门编号>100的部门名和所在的城市名

SELECT department_name,city
FROM departments d
JOIN locations l
ON d.`location_id` = l.`location_id`
WHERE d.`department_id`>100;

添加分组+筛选

查询每个城市的部门个数

SELECT COUNT(*) 部门个数,l.`city`
FROM departments d
JOIN locations l
ON d.`location_id`=l.`location_id`
GROUP BY l.`city`;

添加分组+筛选+排序

查询部门中员工个数>10的部门名,并按员工个数降序

SELECT COUNT(*) 员工个数,d.department_name
FROM employees e
JOIN departments d
ON e.`department_id`=d.`department_id`
GROUP BY d.`department_id`
HAVING 员工个数>10
ORDER BY 员工个数 DESC;

非等值连接

查询部门编号在10-90之间的员工的工资级别,并按级别进行分组

SELECT COUNT(*) 个数,grade
FROM employees e
JOIN sal_grade g
ON e.`salary` BETWEEN g.`min_salary` AND g.`max_salary`
WHERE e.`department_id` BETWEEN 10 AND 90
GROUP BY g.grade;

自连接

查询员工名和对应的领导名

SELECT e.`last_name`,m.`last_name`
FROM employees e
JOIN employees m
ON e.`manager_id`=m.`employee_id`;

mysql的sqlyog学习笔记(高级查询部分)(代码用命令行显示 )相关推荐

  1. mysql的sqlyog学习笔记(查询部分)(代码用命令行显示 )

    索引 语言 查询 基础查询 select 查询列表 from 表名; 查询函数(调用函数,获取返回值) 起别名 +的作用 distinct的使用(去重) 查看表的结构 条件查询 按关系表达式筛选 按逻 ...

  2. Linux操作系统学习笔记3【图形界面与命令行】

    文章目录: 本章讨论: 1.Linux图形化管理系统组成部分 2.什么是X Window系统 3.X Window组成 4.什么是KDE桌面 5.什么是GNOME桌面 6. Red Hat Linux ...

  3. linux学习笔记:1.基础知识和命令行基本操作

    初次学习linux系统,想在这里记录自己的学习痕迹,如发现有不足之处,希望能指出,谢谢啦,之后的学习是在虚拟机VMware 10下的Red Hat Enterprise linux 6 的操作. 一. ...

  4. Android学习笔记Android必备开发工具之一命令行创建Git库

    提供相关文章介绍 http://hi.baidu.com/baixuejiyi1111/blog/item/e7a475a2589123e19152eed9.html http://www.2cto. ...

  5. 数据库MySQL学习笔记高级篇(周阳)

    数据库MySQL学习笔记高级篇 1. mysql的架构介绍 mysql简介 高级Mysql mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...

  6. Postgresql学习笔记-高级语法篇

    Postgresql学习笔记-高级语法篇 Postgresql 约束 Postgresql约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表的时候就规定(通 ...

  7. B站《一天学会 MySQL 数据库》学习笔记

    B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 ​关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...

  8. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  9. mysql性能优化-学习笔记

    mysql性能优化-学习笔记

最新文章

  1. 升压转换器 (Boost)
  2. 利用java反射机制进行对象操作
  3. 读书笔记 -《深入理解计算机系统》2.1
  4. 使用python来操作redis用法详解
  5. BZOJ 1562 变换序列
  6. pycharm 更改创建文件默认路径
  7. java基础——“”equals“”与 “”==“” 的区别
  8. 干货 | 找工作的经验总结(一)
  9. PostgreSQL重启恢复---Log Buffer
  10. Linux下 timerfd创建定时器并使用 epoll 监听
  11. 侃一侃萨班斯法案之302条款
  12. Linux基本命令(Redhat,CentOS等等)
  13. 北京大学生数学建模与计算机应用,2011年北京市大学生数学建模与计算机应用竞赛获奖名单...
  14. linux版retroarch游戏,RetroArch下载
  15. manjaro安装tim
  16. Salesforce诊断网络问题以排除性能下降
  17. C++ lambda递归
  18. 【文末赠书】大逆转悄然而至,人口如何影响我们的未来?
  19. 简单编程(六)使用for循环语句 编写程序1+2+3+...........+100
  20. Outlook 客户端邮件莫名其妙“失踪”

热门文章

  1. 用5v1a的充电器给1.2v的镍氢电池充电(充满后可自动断电)或者可以定时
  2. GSE184854 ccr2敲除小鼠和wt小鼠merge到一起之后,对ccr和wt组别进行harmony ,大致分为上皮 内皮 髓系 淋巴系 ,取髓系,分为dc 单核monocyte 巨噬细胞,取巨噬
  3. 低端键盘拆解(牛屎芯片、键盘导电膜、键盘帽、橡胶垫)
  4. MySQL——数据库基本操作(教程)
  5. sparrow图标素材
  6. Android平台png转jpg的实现
  7. 【python】点燃我,温暖你 ,快来Get同款~
  8. 1024——依然是写给你
  9. AD画原理图保留十字节点
  10. 超级简单的自动刷新_144Hz刷新率真比60Hz快 谁用谁知道