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

MySQL数据库多表关联查询

时间:2023-10-04 18:11:06浏览次数:51  
标签:多表 数据库 查询 dept emp MySQL join deptno select

本文列举数据库的多表关联查询及实际使用,以员工表和部门表作为举例:

部门表:dept

点击查看创建部门表sql
create table `dept`  (
  `deptno` int(2) not null,
  `dname` varchar(14),
  `loc` varchar(13),
  primary key (`deptno`)
);

员工表:emp

点击查看创建员工表sql
create table `emp`  (
  `empno` int(4) not null,
  `ename` varchar(10),
  `job` varchar(9),
  `mgr` int(4),
  `hiredate` date,
  `sal` int(7),
  `comm` int(7),
  `deptno` int(2),
  primary key (`empno`),
  index `fk_deptno`(`deptno`),
  constraint `fk_deptno` foreign key (`deptno`) references `dept` (`deptno`) on delete restrict on update restrict
);

SQL关联查询/连接查询

  • 内连接:inner join ... on
  • 外连接:left/right join ... on
  • 自连接:表自身与自身连接查询

一、内连接

  1. 查询员工编号为1的员工姓名和所在部门的名称

select ename,dname from emp inner join dept on emp.deptno=dept.deptno;

二、左外连接(left join 前为主表,后为从表,遍历主表中的每一条记录查询)

  1. 查询所有部门的名称和该部门的员工姓名

select dname,ename from dept left join emp on dept.deptno=emp.deptno;

  1. 查询所有员工的名称及其所在的部门

select ename,dname from emp left join dept on emp.deptno=dept.deptno;

三、右外连接(right join 前为从表,后为主表,遍历主表中的每一条记录查询)

  1. 查询所有部门名称及其下的员工姓名

select dname,ename from emp right join dept on dept.deptno=emp.deptno;

自连接

  1. 查询所有员工及其上级领导的姓名

select e.ename 员工,p.ename 上级领导 from emp e left join emp p on e.mgr=p.empno;

子查询/嵌套查询

单行子查询:子查询的结果只有一条

  1. 查询和scott在同一部门的员工

select * from emp where deptno=(select deptno from emp where ename='scott');

多行子查询:子查询的结果有多条

  1. 查询工资和10号部门员工相等的,且不在10号部门的员工

select * from emp where sal in (select sal from emp where deptno=10) and deptno!=10;

标签:多表,数据库,查询,dept,emp,MySQL,join,deptno,select
From: https://www.cnblogs.com/Qiuq-L/p/17742543.html

相关文章

  • 查看SQL Server数据库版本
    在SSMS里新建查询输入以下语句print'服务器名称:'+@@SERVERNAMEprint'SQLServer的版本'+@@VERSIONselect@@SERVERNAMEas'服务器名称'select@@VERSIONas'SQLServer的版本'执行可得或者在ssms上点击帮助——》关于即可得 ......
  • MySQL学习(3)B+树索引是如何快速查询的
    前言我们已经知道在磁盘中,有很多索引页,这些页并非在物理结构上相连接,而是通过双向链表关联。如果要查找一条数据,需要通过页目录中的槽,通过二分法定位到分组再进行遍历查找。比如下面这样:SELECT[查询列表]FROM表名WHERE条件; 假设表中只有一个页,在查找记录时,可以根据搜......
  • 什么是Mysql的日志
    Mysql日志体系1错误日志​ -默认开启​ 错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。可通过下面命令查看错误日志的存储位置:s......
  • 简单介绍一下 Mysql 存储引擎
    1入门本文去浅浅的探讨一下mysql数据库的存储引擎。数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。现在许多数......
  • Docker搭建Mysql主从机制
    Mysql主从复制1基础准备由于家境贫寒没有那么多的云资源供我操作,只能使用docker进行模拟了。拉取镜像简单得很就先不谈了。直接开整。以下操作基于mysql:5.7进行一主二从配置。2主库配置运行容器dockerrun-p3306:3306--namemysql-slaver-2-eMYSQL_ROOT_PASSWOR......
  • Navicat如何连接修改默认端口后的SQLServer数据库
    一般情况SQLServer默认端口是1433,Navicat连接时只需要输入服务器ip以及用户名和密码就可以登录,这里ip大部分人都不会写出来,因为不写的话Navicat默认连接的是1433这个端口;      但是有些情况比如修改了SQLServer默认端口号或者连接做了端口映射的SQLServer我们该怎么连......
  • 连接SQL Server数据库(详细步骤+登录注册案例)
    数据库入门~连接数据库(详细步骤+登录注册案例+简单界面)步骤一:SQLServer使用sqlserver身份验证登录,方便与编写的程序连接 <1>首先使用Windows登录进去,右键实例,点击属性,再选择安全性,将该选项卡中的服务器身份验证改为sqlserver和windows身份验证模式。点击确定 <2>此时重......
  • Mysql - 函数
    目录字符串函数数值函数日期函数字符串函数案例:企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0,比如:1号员工的工号应该为00001updateempsetworkno=LPAD(workno,5,'0');效果:需要注意的是workno需要是varchar类型数值函数案例:通过数据库的函数,生成一个6位......
  • IntelliJ IDEA 解决连接MYSQL失败问题
    省流版:mysql-connector-java-8.0.13.jar应该出现在下面三个地方:①web-WEB-INF-lib②Database连接时(一般会自动下载)③apache-tomcat-8.0.32-lib 在自己的项目里找到web-WEB-INF-lib,检查一下有没有驱动包  如果没有mysql-connector-java-8.0.13.jar需要下载一个然后在F......
  • 1.数据库简介
    MySQL简介:JavaEE企业级Java开发,Web前端(HTML,CSS,JavaScript)后端连接数据库JDBC,连接前端,传输数据数据库(存数据,TxtExcel,world)代码,数据库(增删改查)混饭吃操作系统,数据结构,算法,优秀离散数学,数字电路,体系结构,编译原理,实战=无敌MySQL是一个关系型数据库管理系统前世:瑞典MysqlAB公......