MySql数据库复杂查询示例

创建数据库表

复杂查询涉及到了多个表,以下为相应的简化版建表语句示例:

  1. 部门表(departments):
CREATE TABLE departments (department_id INT PRIMARY KEY,department_name VARCHAR(255) NOT NULL,parent_id INT DEFAULT NULL,  -- 可用于自连接查询的外键FOREIGN KEY (parent_id) REFERENCES departments(department_id)
);INSERT INTO departments (department_id, department_name) VALUES
(1, 'IT'), (2, 'HR'), (3, 'Sales'), (4, 'Finance');
-- 对于自连接查询,假设部门IT是Sales的上级
UPDATE departments SET parent_id = 1 WHERE department_name = 'Sales';
  1. 员工表(employees):
CREATE TABLE employees (emp_id INT PRIMARY KEY,emp_name VARCHAR(255) NOT NULL,salary DECIMAL(10, 2) NOT NULL,dept_id INT,FOREIGN KEY (dept_id) REFERENCES departments(department_id)
);INSERT INTO employees (emp_id, emp_name, salary, dept_id) VALUES
(1, 'John Doe', 50000, 1),
(2, 'Jane Smith', 60000, 1),
(3, 'Mike Johnson', 70000, 2),
(4, 'Emily Brown', 80000, 3),
(5, 'Tom Wilson', 90000, 4);
  1. 客户表(customers)和订单表(orders):
CREATE TABLE customers (customer_id INT PRIMARY KEY,customer_name VARCHAR(255) NOT NULL,last_purchase DATE
);CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,status VARCHAR(20),FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);INSERT INTO customers (customer_id, customer_name) VALUES
(1, 'Customer A'),
(2, 'Customer B');INSERT INTO orders (order_id, customer_id, order_date, status) VALUES
(1, 1, '2022-01-01', 'Pending'),
(2, 1, '2022-02-01', 'Completed'),
(3, 2, '2022-01-15', 'Pending');

请注意,以上仅为简化的示例,实际数据库设计时应根据具体业务需求进行更详细的字段定义及数据插入。

MySQL数据库复杂查询示例:

  1. 子查询(嵌套查询):

    -- 查询每个部门薪水最高的员工信息
    SELECT d.dept_name, e.emp_name, e.salary 
    FROM departments AS d 
    JOIN employees AS e ON d.dept_id = e.dept_id
    WHERE e.salary = (SELECT MAX(salary) FROM employees WHERE dept_id = d.dept_id
    );
    
  2. 联合查询(UNION 或 UNION ALL):

    -- 获取所有在表A和表B中都存在的用户ID
    SELECT user_id FROM table_A
    UNION
    SELECT user_id FROM table_B;-- 包含重复项的联合查询
    SELECT user_id FROM table_A
    UNION ALL
    SELECT user_id FROM table_B;
    
  3. 连接查询(JOIN):

    -- 使用INNER JOIN获取每个订单对应的客户信息
    SELECT o.order_id, c.customer_name, o.order_date
    FROM orders AS o
    INNER JOIN customers AS c ON o.customer_id = c.customer_id;
    
  4. 自连接查询(Self Join):

    -- 查询某个部门及其所有下属部门的信息
    SELECT t1.department_name AS ParentDept, t2.department_name AS SubDept
    FROM departments AS t1
    LEFT JOIN departments AS t2 ON t2.parent_id = t1.department_id;
    
  5. 分组查询与聚合函数

    -- 按照部门统计平均薪水
    SELECT dept_id, AVG(salary) as avg_salary
    FROM employees
    GROUP BY dept_id;-- 分组后过滤条件(HAVING)
    SELECT dept_id, COUNT(*) as employee_count
    FROM employees
    GROUP BY dept_id
    HAVING COUNT(*) > 5;
    
  6. 窗口函数(OVER clause):

    -- 对每个部门内的员工薪水进行排名
    SELECT emp_id, salary, dept_id,RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) as rank_in_dept
    FROM employees;
    
  7. 多表更新

    -- 更新订单状态的同时更新对应客户的最后购买日期
    UPDATE orders o
    JOIN (SELECT order_id, MAX(order_date) as last_purchase_dateFROM ordersGROUP BY customer_id
    ) t ON o.order_id = t.order_id
    SET o.status = 'Completed', c.last_purchase = t.last_purchase_date
    JOIN customers c ON o.customer_id = c.customer_id
    WHERE o.status = 'Pending';
    

以上各示例展示了MySQL中常见的复杂查询类型,实际应用时会根据业务需求选择合适的查询语句组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用vmware,在ubuntu18.04中使用笔记本的摄像头

步骤1:在windows中检查相机状态 win10系统中,在左下的搜索栏,搜索“相机”,点击进入即可打开相机,并正常显示图像。 注意:如果相机连接到了虚拟机,则不能显示正常。 步骤2:在ubuntu…

STM32——通用计时器

通用计时器框图 1.时钟源 1)内部时钟(CK_INT) 2)外部时钟模式 1:外部输入引脚(TIx),x1,2(即只能来自于通道 1 或者通道 2) 3)外部时钟模式 2:外部触发输入(ETR) 4&#…

ARCGIS PRO SDK 访问Geometry对象

一、Geometry常用对象 二、主要类 1、ReadOnlyPartCollection:Polyline 和 Polygon 使用的 ReadOnlySegmentCollection 部件的只读集合,属性成员:​ 名字描述Count获取 ICollection 中包含的元素数。TIEM获取位于指定索引处的元素。Spatial…

mac中excel条件格式找到每一列的最大值并标红

假设现在excel有A1:R24组数据,最终效果如下 先选择要处理数据的第一列,然后点击【条件格式】-【新建规则】 style选择【classic】以及【Use a formula to determine which cells to format】,输入规则【C3MAX(C$3:C$24)】 注意这里C$3前面没…

识别pdf标题并重命名pdf

最新改进版: https://blog.csdn.net/weixin_44751432/article/details/135247984 已导出为可执行文件 下载链接在评论区 此为改进版 解决了期刊名可能是最大字体的问题: 思路 识别字符串的空格>3则为标题 import os import PyPDF2import fi…

DMLC深度机器学习框架MXNet的编译安装

这篇文章将介绍MXNet的编译安装。 MXNet的编译安装分为两步: 首先,从C源码编译共享库(libmxnet.so for linux,libmxnet.dylib for osx,libmxnet.dll for windows)。接着,安装语言包。 1. 构建…

Rust开发⼲货集(1)--迭代器与消费器

本内容是对 Rust开发干货集[1] 的实践与扩展. iter() 不转移所有权 先简单解释下什么叫"转移所有权": 在 Rust 中,"转移所有权"(Ownership Transfer)是一种核心概念,它涉及变量和数据的所有权从一个实体转移…

Mysql入门教程-存储过程

8.存储过程 创建语法 可以使用 CREATE PROCEDURE 语句创建存储过程&#xff0c;语法格式如下&#xff1a; CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体> [过程参数[,…] ] 格式 [ IN | OUT | INOUT ] <参数名> <类型> 语法说明如下&…

3D视觉-结构光测量-线结构光测量

概述 线结构光测量中&#xff0c;由激光器射出的激光光束透过柱面透镜扩束&#xff0c;再经过准直&#xff0c;产生一束片状光。这片光束像刀刃一样横切在待测物体表面&#xff0c;因此线结构光法又被成为光切法。线结构光测量常采用二维面阵 CCD 作为接受器件&#xff0c;因此…

QT上位机开发(乘法计算小软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面一篇文章&#xff0c;我们学习了怎么创建qt的第一个工程&#xff0c;怎么用designer给qt修改界面。虽然我们到目前为止&#xff0c;还没有编写…

剑指 Offer(第2版)面试题 61:扑克牌的顺子

剑指 Offer&#xff08;第2版&#xff09;面试题 61&#xff1a;扑克牌的顺子 剑指 Offer&#xff08;第2版&#xff09;面试题 61&#xff1a;扑克牌的顺子解法1&#xff1a;排序 剑指 Offer&#xff08;第2版&#xff09;面试题 61&#xff1a;扑克牌的顺子 题目来源&#x…

React入门介绍

React官方学习指南 React React是一个由Facebook开发并维护的开源JavaScript库&#xff0c;用于构建用户界面。 特点 声明式设计&#xff1a;React采用声明式编程模式&#xff0c;你只需要描述你想要的最终状态&#xff0c;React会自动计算如何达到这个状态。组件化&#xf…

C#使用switch语句更改窗体颜色

目录 一、示例 二、生成 用switch多路选择语句及窗体的BackColor属性更改窗体的BackColor属性。该属性用于获取或设置控件的背景颜色。 可以使用Color结构的静态属性获取Color对象&#xff0c;如Color.Red&#xff1b;也可以使用Color结构的静态方法Color.FromArgb()&#xf…

Linux权限的基本理解

一:&#x1f6a9;Linux中的用户 1.1&#x1f966;用户的分类 &#x1f31f;在Linux中用户可以被分为两种用户: 超级用户(root):可以在Linux系统中做各种事情而不被约束普通用户:只能做有限的事情被权限约束 在实际操作时超级用户的命令提示符为#,普通用户的命令提示符为$,可…

crfclust.bdb文件过大处理

问题现象 巡检过程中发下1套11.2.0.4版本的RAC的生产环境服务上&#xff0c;/oracle目录空间仅剩余8.3G&#xff0c;需尽快清理大文件避免磁盘爆满宕机。 --查看磁盘空间 [rootrac01 ~]# df -h 文件系统 容量 已用 可用 已用%% 挂载点 /dev/mapper/vg_rac01-lv_root5…

python观察图像的直流分量——冈萨雷斯数字图像处理

原理 在数字图像处理中&#xff0c;图像的直流分量&#xff08;DC分量&#xff09;是指图像中的平均亮度水平。这个概念源自于傅里叶变换&#xff0c;其中信号可以分解为多个频率成分。在这个上下文中&#xff0c;直流分量对应于频率为零的成分&#xff0c;即信号的平均值。 在…

CSS一个纯样式花里胡哨的动态渐变背景块

使用SASS或CSS纯样式花里胡哨的动态渐变背景块 鼠标放在小方块上会放大并挤压周围方块&#xff0c;背景颜色会动态改变。 效果如下 HTML结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vie…

基于JWT的用户token验证

1. 基于session的用户验证 2. 基于token的用户身份验证 3. jwt jwt代码实现方式 1. 导包 <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.18.2</version> </dependency> 2. 在登录…

Spring Data Redis对象缓存序列化问题

相信在项目中&#xff0c;你一定是经常使用 Redis &#xff0c;那么&#xff0c;你是怎么使用的呢&#xff1f;在使用时&#xff0c;有没有遇到同我一样&#xff0c;对象缓存序列化问题的呢&#xff1f;那么&#xff0c;你又是如何解决的呢&#xff1f; Redis 使用示例 添加依…

MySQL5.7服务器状态变量参考

官网地址&#xff1a;MySQL :: MySQL 5.7 Reference Manual :: 5.1.5 Server Status Variable Reference 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. MySQL 5.7 参考手册 / ... / 服务器状态变量参考 5.1.…