当前位置: 首页 > news >正文

SQL的高级查询练习知识点下(day26)

1 学习目标

  1. 重点掌握分组查询的语法

  2. 重点掌握分页查询的语法

2 分页查询

2.1 语法

SELECT 字段|表达式,...
FROM 表
[WHERE 条件]
[GROUP BY 分组字段]
[HAVING 条件]
[ORDER BY 排序的字段]
LIMIT [起始的条目索引,]条目数;

2.2 特点

  • 起始条目索引从0开始

  • limit子句放在查询语句的最后

  • 公式

    SELECT * FROM 表 LIMIT (page-1) * size , size
    • 每页显示条目数:size
    • 要显示的页数:page
  • 例子:

    • limit 10 前10行
    • limit 0,10 第1行开始的10行
    • limit 10,10 第11行开始的10行
    • limit 100,10 第101行开始的10行
    • 数据量大时(千万),分页数据越往后越慢

2.3 例子

①查询employees表中前10行记录

SELECT employee_id,first_name,last_name
FROM employees LIMIT 10;

②查询employees表中第1行记录开始后的10行记录

SELECT employee_id,first_name,last_name
FROM employees LIMIT 0,10;

③查询employees表中第11行记录开始后的10行记录

SELECT employee_id,first_name,last_name
FROM employees LIMIT 10,10;

3 多表连接查询

3.1 含义

  • 两张表,按指定条件连接,连接成一张表

image-20221122121327393

3.2 传统模式连接

3.2.1 语法

SELECT 字段,...
FROM 表1,表2
WHERE 筛选条件;

3.2.2 例子

3.2.2.1 查询员工信息,并附带显示部门名
  • 我们可以发现employees有部门id字段,所以是可以关联departments表的

image-20221122125940609

SELECT e.employee_id, e.first_name, e.salary, d.department_id, d.department_name
FROM employees e,departments d
WHERE e.department_id = d.department_id;
3.2.2.2 查询部门以及部门所在的城市
  • departments表中还包含location_id字段,所以也可以关联区域表,所以查询locations表

image-20221122130450944

SELECT d.department_id, d.department_name, l.city
FROM departments d,locations l
WHERE d.location_id = l.location_id;
3.2.2.3 查询部门以及部门经理
  • 发现departments表中还包含manager_id字段,该字段是部门经理的id,部门经理的id其实也是取自于员工表,所以这两个字段也是可以关联的,所以查询manger表
SELECT d.department_id, d.department_name, d.manager_id, e.first_name mgr
FROM departments d,employees e
WHERE d.manager_id = e.employee_id;
3.2.2.4 查询员工和员工的主管名
  • 此处需要使用自连接,就是将一张表看做是两张表

  • 经过分析可知,员工的信息在employees表,而员工的主管是manger_id字段,该字段的值是取自于employees表的,所以此时可以将employees表即当成员工表,也可以当成主管表

image-20221122132721557

SELECT e1.employee_id, e1.first_name, e1.salary, e2.first_name mgr
FROM employees e1,employees e2
WHERE e1.manager_id = e2.employee_id;

3.3 外连接

3.3.1 概念

  • 内连接:只查询符合连接条件的数据
  • 外连接:连接条件以外的数据,也要查询出来
    • 左外连接:左侧表中连接条件之外的数据
    • 右外连接:右侧表中连接条件之外的数据
    • 全外连接:双侧表中连接条件之外的数据

image-20221122133442841

3.3.2 语法

  • 内连接
SELECT ...
FROM a INNER JOIN b 
ON(连接条件)
  • 左外连接
SELECT ...
FROM a LEFT [OUTER] JOIN b 
ON(连接条件)
  • 右外连接
SELECT ...
FROM a RIGHT [OUTER] JOIN b 
ON(连接条件)
  • 全外连接(mysql不支持)
SELECT ...
FROM a FULL [OUTER] JOIN b 
ON(连接条件)

3.3.3 例子

①查询107个员工并显示部门名

SELECT e.employee_id, e.first_name, e.salary, d.department_name
FROM employees e
LEFT JOIN departments d
ON (e.department_id = d.department_id);

②查询27个部门,有经理显示经理,没有经理显示NULL

SELECT d.department_id, d.department_name, e.first_name mgr
FROM departments d
LEFT JOIN employees e 
ON(d.manager_id=e.employee_id);

③查询107个员工,显示主管名

SELECT e1.employee_id, e1.first_name, e1.salary, e2.first_name mgr
FROM employees e1
LEFT JOIN employees e2 
ON (e1.manager_id = e2.employee_id);

④107个员工,显示部门名,城市

SELECT e.employee_id, e.first_name, e.salary, d.department_name, l.city
FROM employees e
LEFT JOIN departments d ON (e.department_id = d.department_id)
LEFT JOIN locations l ON (d.location_id = l.location_id);

4 总结

  • 分页查询的公式是什么?

    SELECT * 
    FROM 表 
    LIMIT (page-1) * sizePerPage , sizePerPage
  • 什么是多表连接查询?

    两张表,按指定条件连接,连接成一张表


http://www.mrgr.cn/news/21303.html

相关文章:

  • 企业邮箱怎么设置邮箱监控(老板监控员工邮件的方法推荐)【企业管理必备】
  • 基于web宾馆管理系统设计与实现
  • C++学习, 类的构造函数
  • 【数据结构】你真的学会了二叉树了吗,来做一做二叉树的算法题及选择题
  • C++11 异常
  • VB 关键字
  • 2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略(详细思路+matlab代码+python代码+论文范例)
  • 【Linux修行路】线程同步——条件变量
  • 【抽代复习笔记】27-群(二十一):子群与生成子群
  • 图像处理基础篇-镜像仿射透视
  • C++学习,类的析构函数
  • 我的私人助理 | 办公小浣熊
  • 第二十一章 rust与动静态库的结合使用
  • 搭建自己的Discuz论坛
  • Docker 部署 Minio (图文并茂超详细)
  • 黑神话:游戏的诞生
  • C++开发基础之自定义异步日志库实现及性能测试
  • Linux block_device gendisk和hd_struct到底是个啥关系
  • 【docker】基于docker-compose 安装elasticsearch + kibana + ik分词器(8.10.4版本)
  • 基于yolov8的焊缝质量好坏系统python源码+onnx模型+评估指标曲线+精美GUI界面