Mysql自连接查询实例详解

yizhihongxing

Mysql自连接查询是关于一个表自己与自己进行连接查询的方法。这种查询在复杂的数据结构中非常有用,它可以让我们找到相对于自己某些列存在相似性的记录,构造示例如下:

准备工作

示例中我们使用的是employees这张表,表中存放的是雇员的信息,包括雇员编号、名字、性别、工资、职位、上司等。

CREATE TABLE employees (
    emp_no      INT             NOT NULL,
    birth_date  DATE            NOT NULL,
    first_name  VARCHAR(14)     NOT NULL,
    last_name   VARCHAR(16)     NOT NULL,
    gender      ENUM('M','F')   NOT NULL, 
    hire_date   DATE            NOT NULL,
    PRIMARY KEY (emp_no)
 );

表中也存在上司-下属之间的关系,也就是同一张表中有父子级别关系,可以使用emp_no来描述两者之间的关系。

自连接查询示例

示例1:查询下属与上司的所有信息

我们可以通过自连接查询,查询一个上司及其下属的所有信息。例如查询员工编号为10001的上司及其下属的全部信息代码如下:

SELECT e1.emp_no, e1.first_name, e1.last_name, e2.emp_no, e2.first_name, e2.last_name
FROM employees AS e1, employees AS e2
WHERE e1.emp_no = e2.emp_no OR e1.emp_no = e2.emp_no;

查询结果如下表所示:

e1.emp_no e1.first_name e1.last_name e2.emp_no e2.first_name e2.last_name
4 Margaret Peacock 4 Margaret Peacock
4 Margaret Peacock 78 James Kramer
4 Margaret Peacock 119 Yoshinari DasSarma
4 Margaret Peacock 146 Berhard Lenart
4 Margaret Peacock 199 Vishv Chen
4 Margaret Peacock 218 Themistoklis Raman
5 Wolfgang Schlereth 5 Wolfgang Schlereth
5 Wolfgang Schlereth 62 Parviz Lortz
5 Wolfgang Schlereth 81 Xiaohua Lu
5 Wolfgang Schlereth 103 Shawna Frumkin
5 Wolfgang Schlereth 112 Wenbo Yen
5 Wolfgang Schlereth 117 Jussi Kivivuori
5 Wolfgang Schlereth 142 Hee Karvonen
5 Wolfgang Schlereth 168 Bangqing Kleiser
5 Wolfgang Schlereth 198 Gerard Barzin
5 Wolfgang Schlereth 242 Mariano Erde

上述查询的限制条件是e1.emp_no = e2.emp_no OR e1.emp_no = e2.emp_no,表示自身与自身的查询结果。使用 WHERE e1.emp_no = 10001,表示要查询的员工编号为10001和他的下属,最终的查询结果即为10001这个雇员及其下属所有信息的集合。

示例2:查询有相同上司的雇员信息

查询有相同上司的雇员信息,可以使用自身表连接的方法,具体查询代码如下所示:

SELECT e1.emp_no, e1.first_name, e1.last_name, e2.emp_no, e2.first_name, e2.last_name 
FROM employees AS e1, employees AS e2 
WHERE e1.emp_no != e2.emp_no AND e1.emp_no = e2.emp_no;

查询结果如下表所示:

e1.emp_no e1.first_name e1.last_name e2.emp_no e2.first_name e2.last_name
1 Georgi Facello 12 Patricio Bridgland
2 Bezalel Simmel 17 Cristinel Bouloucos
2 Bezalel Simmel 18 Kazuhide Peha
2 Bezalel Simmel 23 Bojan Zallocco
2 Bezalel Simmel 26 Yongqiao Berztiss
3 Parto Bamford 18 Kazuhide Peha
3 Parto Bamford 21 Ramzi Erde
3 Parto Bamford 24 Sumant Peac
3 Parto Bamford 25 Shailendra Mishra

在以上的查询中,使用了WHERE e1.emp_no != e2.emp_no,表示查询一个员工编号不等于另一个员工编号的结果。使用WHERE e1.emp_no = e2.emp_no,表示查询拥有相同上司人数大于等于两个人的结果。最后的查询结果为拥有相同上司(下属)的员工信息集合。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql自连接查询实例详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MySQL中SQL命令语句条件查询实例详解

    MySQL中SQL命令语句条件查询实例详解 什么是SQL命令语句条件查询 SQL命令语句条件查询是通过使用条件语句筛选出符合条件的记录的过程,它是数据库操作中最常用的一种。在MySQL中,我们可以使用SELECT语句来进行条件查询。 SELECT语句的基本语法 SELECT语句的基本语法如下: SELECT column1, column2, … FRO…

    database 2023年5月21日
    00
  • 远程登录MySQL服务(小白入门篇)

    让我来详细讲解“远程登录MySQL服务(小白入门篇)”的完整攻略。 远程登录MySQL服务(小白入门篇) 前置条件 在开始之前,需要确保以下条件已满足: 拥有MySQL服务器的访问权限。 已经开启MySQL服务器的远程访问权限。 配置步骤 下面是远程登录MySQL服务的详细攻略: 步骤1:打开终端 在开始之前,需要打开命令行终端。在 Windows 操作系统…

    database 2023年5月22日
    00
  • PHP与SQL语句常用大全

    PHP与SQL语句常用大全 PHP的SQL语句通常用于与数据库交互,包括数据查询、数据更新、数据插入等操作。下面是一些常用的SQL语句及其PHP实现。 数据库连接 连接数据库是操作数据库的第一步,可以使用mysqli或PDO扩展连接数据库。 mysqli扩展 $mysqli = new mysqli("localhost", "…

    database 2023年5月21日
    00
  • SQL 行值轮转

    下面将详细讲解SQL行值轮转的攻略。 什么是SQL行值轮转? SQL行值轮转(Row Value Transposition),也称为行转列、透视表,是将原始数据行转换为新的数据列的一个过程。通常情况下,我们从数据库中获取的数据是以行的形式呈现的,如果要将这些行数据“横向”展示,可以使用SQL行值轮转。 SQL行值轮转的语法 SQL行值轮转有不同的语法,此处…

    database 2023年3月27日
    00
  • Codeigniter操作数据库表的优化写法总结

    下面是关于Codeigniter操作数据库表的优化写法总结的完整攻略。 一、Codeigniter操作数据库表的基本优化 Codeigniter是一个快速的PHP轻量级Web应用程序开发框架,它可以协助开发者快速而且简单的创建Web应用程序。在Codeigniter中操作数据库表的优化关键有以下几点: 1. 数据库优化 在操作数据库表之前,需要对数据库进行优…

    database 2023年5月19日
    00
  • mysql开启主从复制

    主数据库配置:vim /etc/my.cnf server_id=146 #一般设置ip最后一位 log-bin=mysql-bin #开启bin-log binlog_do_db=test #生成test数据库binlog_do_db=sss #生成sss数据库binlog_ignore_db=sss #忽略数据库#查看配置是否生效 show VARIAB…

    MySQL 2023年4月13日
    00
  • 利用openfiler实现iSCSI原理分析

    简介: openfiler 是一个高性能的网络存储管理系统,支持 iSCSI 相关协议,可以轻松地搭建企业级网络存储。本文将详细介绍如何使用 openfiler 搭建 iSCSI 存储系统。 准备工作: 一台安装了 CentOS 7 的服务器; 一张 openfiler 的 ISO 镜像; 一块硬盘或者一个 U 盘用来安装 openfiler。 安装 ope…

    database 2023年5月22日
    00
  • MySQL修改和删除触发器(DROP TRIGGER)方法详解

    MySQL修改触发器的方法 使用命令SHOW TRIGGERS命令获取已经存在的触发器信息,确定要修改的触发器的名称。例如: SHOW TRIGGERS FROM database_name; 使用ALTER TRIGGER命令更新触发器。例如: ALTER TRIGGER trigger_name ON table_name [AFTER|BEFORE] …

    MySQL 2023年3月10日
    00
合作推广
合作推广
分享本页
返回顶部