首页 > 数据库 >MySQL联表查询

MySQL联表查询

时间:2024-08-29 08:55:18浏览次数:11  
标签:JOIN name 查询 department 联表 MySQL id 连接 SELECT

按功能分

  • 内连接
    • 等值连接
    • 非等值连接
    • 自连接
  • 外连接
    • 左外连接
    • 右外连接
    • 全外连接
  • 交叉连接

1. 内连接(INNER JOIN)

获取所有的员工名和其对应的部门名

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

查询部门个数>3城市名部门个数

SELECT city, COUNT(1) 部门个数
FROM departments d INNER JOIN locations l
		ON d.location_id = l.location_id
GROUP BY city
HAVING 部门个数 > 3;

查询员工名、部门名、工种名,并按部门名排序【三表连接

SELECT last_name, department_name, job_title
FROM employees e INNER JOIN departments d 
		ON e.department_id = d.department_id
	INNER JOIN jobs j
		ON e.job_id = j.job_id
ORDER BY department_name DESC;

2. 外连接

作用:查询一个表有另一个表没有的记录

然后我们可以分别使用内连接和外连接分别连接beautyboys这两张表,查看结果的差异:

此时我们可以获得如下几张表:

在这里插入图片描述

然后我们可以分别使用内连接和外连接分别连接beautyboys这两张表,查看结果的差异:

内连接:

SELECT *
FROM beauty b INNER JOIN boys y
	ON b.boyfriend_id = y.id;

在这里插入图片描述

外连接(左外):

SELECT *
FROM beauty b LEFT JOIN boys y
	ON b.boyfriend_id = y.id;

在这里插入图片描述

可以发现,当左表(即beauty表)的boyfriend_id字段找不到boys表中对应的id进行连接时,它也仍会保留这一记录,而右表(即boys表)的记录则全部设置为Null。

一句话来说,就是左表的数据不管是否满足连接条件,都至少会保留在最终查询集的一条记录之中。

查找男朋友不在男神表的女神名【左外连接】:

SELECT `name`, boyName
FROM beauty b LEFT JOIN boys y
	ON b.boyfriend_id = y.id
WHERE y.id IS NULL;

右外连接

SELECT `name`, boyName
FROM boys y RIGHT JOIN beauty b
	ON b.boyfriend_id=y.id
WHERE y.id IS NULL;

在这里插入图片描述

查询没有联系女神男生

SELECT `name`, boyName
FROM beauty b RIGHT JOIN boys y
	ON b.boyfriend_id=y.id
WHERE b.id IS NULL;

查询哪个部门 没有员工

SELECT department_name, COUNT(*)
FROM departments d LEFT JOIN employees e
	ON d.department_id = e.department_id
GROUP BY department_name
HAVING COUNT(*)=0;

在这里插入图片描述

标签:JOIN,name,查询,department,联表,MySQL,id,连接,SELECT
From: https://www.cnblogs.com/ZWJ7671277/p/18385814

相关文章

  • MySQL修改密码
    第一种方式:最简单的方法就是借助第三方工具NavicatforMySQL来修改,方法如下:1、登录mysql到指定库,如:登录到test库。2、然后点击上方“用户”按钮。3、选择要更改的用户名,然后点击上方的“编辑用户”按钮。4、出现如图界面,输入新密码,并确认新密码,点击“保存”按钮即可。......
  • MySQL 源码|62 - 词法解析(V2):调用词法解析器的逻辑
    目录文档:MySQL源码|源码剖析文档目录源码位置(版本=MySQL8.0.37):sql/sql_class.cc;sql/sql_yacc.yy前置文档:MySQL源码|33-语法解析:bison基础语法规则MySQL源码|61-词法解析(V2):MySQL语法解析指定的返回值类型的联合体在sql/sql_yacc.yy中定义了%defineapi.pr......
  • mysqldump的使用详解
    一、mysqldump简介mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。二、备份命令2.1命......
  • mysql格式化日期
    mysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的含义,现提供mysql格式换时间函数,可以方便的看到格式化后的时间。1.DATE_FORMAT()函数用于以不同的格式显示日期/时间数据。DATE_FORMAT(date,format)format参数的格式有 %a缩写星期名%b......
  • MYSQL索引的选型比较
    MYSQL索引前言Mysql作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是Mysql数据的存储形式以及索引的设计,决定了Mysql整体的数据检索性能。我们知道,索引的作用是做数据的快速检索,而快速检索的实现的本质是数据结构。通过不同数据结构的选......
  • 第42天:WEB攻防-PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作 - 快捷方式
    接受的参数值未进行过滤直接带入SQL查询 MYSQL注入:(目的获取当前web权限)1、判断常见四个信息(系统,用户,数据库名,版本)2、根据四个信息去选择方案root用户:先测试读写,后测试获取数据非root用户:直接测试获取数据  #PHP-MYSQL-SQL常规查询获取相关数据:1、数据库版本-看是否......
  • 第五章 表记录的查询(二)
    4、聚合函数查询一、聚合函数(1)COUNT()函数count(*)返回数据表中的记录数(包含NULL值的空行)除count(*)外,其余聚合函数都会忽略空值 substring(被截取的字符串,从第几位开始截取,截取长度)查询图书编号第一位到第五位是97871的行数Selectcount(distinct列名/字段名)from表名;di......
  • mysql-day01
    SQL-DDL--注释的方式:两个减号或者一个#号--这对于库的DDL--创建库createdatabasedb_youcai;createdatabasedb_youcai02charactersetutf8;--使用库,切换库usedb_youcai;--查询正在使用的库selectdatabase();--查询都有哪些库showdatabases;--......
  • MySQL表分区与分表:概念、规则及应用案例
    MySQL表分区与分表:概念、规则及应用案例在大型业务系统中,随着数据量的急剧增加,优化数据库性能成为关键任务。MySQL提供了两种有效的数据管理技术来应对这些挑战:表分区(Partitioning)和分表(Sharding)。本文将深入探讨表分区和分表的概念、优缺点、具体规则以及适用场景,并通过电......
  • MySQL字符集和排序规则详解
    前言MySQL中,字符集和排序规则在处理文本数据时起着至关重要的作用,本文将详细介绍MySQL中的字符集和排序规则。简介字符集(CharacterSet):字符集定义了数据库中可以存储的字符的集合。在MySQL中,常见的字符集包括utf8、utf8mb4、latin1等。utf8mb4字符集是用于在MySQL中存......