MySQL~多表查询

一、多表查询

查询语法:

select列名列表
from表名列表
where....

1、准备sql

创建部门表

CREATE TABLE dept(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20)
);
INSERT INTO dept (NAME) 
VALUES ('开发部'),('市场部'),('财务部');

创建员工表

CREATE TABLE emp (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),gender CHAR(1), -- 性别salary DOUBLE, -- 工资join_date DATE, -- 入职日期dept_id INT,FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键)
);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) 
VALUES('zs','男',7200,'2013-02-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) 
​​​​​​​VALUES('ls','男',3600,'2010-12-02',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) 
VALUES('王五','男',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) 
VALUES('赵六','女',5000,'2015-10-07',3);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) 
VALUES('刘能','女',4500,'2011-03-14',1);

2、笛卡尔积

有两个集合A、B ,取这两个集合的所有组成情况

要完成多表查询,需要消除无用的数据

2.1 多表查询的分类

2.1.1 内连接查询

  • 隐式内连接:使用where条件消除无用数据

例子: -- 查询所有员工信息和对应的部门信息

SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;

-- 查询员工表的名称,性别。部门表的名称

SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
SELECT t1.name, -- 员工表的姓名t1.gender,-- 员工表的性别t2.name -- 部门表的名称
FROMemp t1,dept t2
WHERE t1.`dept_id` = t2.`id`;
  • 显式内连接:

语法:

select 字段列表 from 表名1 
[inner] join 表名2 on 条件

例如:

SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`; 
SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;   

内连接查询:

  • 从哪些表中查询数据

  • 条件是什么

  • 查询哪些字段

2.1.2 外链接查询

1、左外连接:

语法:

select 字段列表 from 表1 
​
left [outer] join 表2 on 条件;

查询的是左表所有数据以及其交集部分

例子: -- 查询所有员工信息、如果员工有部门、则查询部门名称;没有部门则不显示部门名称

SELECT  t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;

2、右外连接:

语法:

select 字段列表 from 表1 
​
right [outer] join 表2 on 条件;

查询的是右表所有数据以及其交集部分

例子:

SELECT  * FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;

2.1.3 子查询

概念:查询中嵌套查询,称嵌套查询为子查询。

-- 查询工资最高的员工信息

-- 1 查询最高的工资是多少 9000

SELECT MAX(salary) FROM emp;

-- 2 查询员工信息,并且工资等于9000的

SELECT * FROM emp WHERE emp.`salary` = 9000;

-- 一条sql就完成这个操作(子查询)

SELECT * FROM emp 
WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);

子查询不同情况

  1. 子查询的结果是单行单列的:

    子查询可以作为条件,使用运算符去判断。

    运算符: > >= < <= =

    -- 查询员工工资小于平均工资的人

    SELECT * FROM emp 
    WHERE emp.salary < (SELECT AVG(salary) FROM emp);

  2. 子查询的结果是多行单列的:

    子查询可以作为条件,使用运算符in来判断

  3. -- 查询'财务部'和'市场部'所有的员工信息

    SELECT id FROM dept 
    WHERE NAME = '财务部' OR NAME = '市场部';
    SELECT * FROM emp 
    WHERE dept_id = 3 OR dept_id = 2;
    -- 子查询
    
    SELECT * FROM emp 
    WHERE dept_id IN 
    (SELECT id FROM dept 
    WHERE NAME = '财务部' OR NAME = '市场部');

  4. 子查询的结果是多行多列的:

    子查询可以作为一张虚拟表参与查询

  5. -- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息

  6. -- 子查询

  7. SELECT * FROM dept t1 ,
    (SELECT * FROM emp 
    WHERE emp.`join_date` > '2011-11-11') t2
    WHERE t1.id = t2.dept_id;

    -- 普通内连接

    SELECT * FROM emp t1,dept t2 
    WHERE t1.`dept_id` = t2.`id` 
    AND t1.`join_date` >  '2011-11-11'

    ​​​​​​​

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

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

相关文章

Flink(十三)Flink 的table api与sql的基本概念、通用api介绍及入门示例

Flink 系列文章 Flink&#xff08;一&#xff09;1.12.7或1.13.5详细介绍及本地安装部署、验证 Flink&#xff08;二&#xff09;1.13.5二种部署方式(Standalone、Standalone HA )、四种提交任务方式&#xff08;前两种及session和per-job&#xff09;验证详细步骤 Flink&…

android framework车载桌面CarLauncher的TaskView详细源码分析

1、构建相关的TaskView&#xff0c;装载到对应的ViewGroup b站免费视频教程讲解&#xff1a; https://www.bilibili.com/video/BV1wj411o7A9/ //packages/apps/Car/Launcher/src/com/android/car/carlauncher/CarLauncher.java void onCreate() { //ignoresetContentView(R.…

macos下安装john the ripper并配置zip2john+破解加密zip文件

为了破解加密的zip文件&#xff0c;需要用到john进行爆破密码。 1、首先使用homebrew安装john&#xff0c;可以安装它的增强版john-jumbo: brew install john-jumbo 2、安装后可以使用 john 命令验证&#xff1a; john 3、配置zip2john的环境——.zshrc下&#xff0c;&#x…

城市气象数据可视化:洞察气候变化,构建智慧城市

随着城市化进程的加速&#xff0c;城市气象数据的采集和分析变得越来越重要。气象数据不仅影响着人们的生活和出行&#xff0c;还与城市的发展和规划息息相关。在数字化时代&#xff0c;如何将城市中各个气象数据进行可视化&#xff0c;让复杂的数据变得简单易懂&#xff0c;成…

【JavaEE初阶】HTTP请求的构造及HTTPS

文章目录 1.HTTP请求的构造1.1 from表单请求构造1.2 ajax构造HTTP请求1.3 Postman的使用 2. HTTPS2.1 什么是HTTPS?2.2 HTTPS中的加密机制(SSL/TLS)2.2.1 HTTP的安全问题2.2.2 对称加密2.2.3 非对称加密2.2.3 中间人问题2.2.5 证书 1.HTTP请求的构造 常见的构造HTTP 请求的方…

名词性从句

文章目录 名词性从句的分类主语从句不确定的信息的主语从句形式主语 宾语从句that引导词可以省略宾语从句的否定 从句&#xff1a;(从句引导词主谓)从句指复合句中不能独立成句&#xff0c;但具有主语部分和谓语部分&#xff0c;有that、who、what、when、how等引导词引导的非主…

简单工厂模式——集中式工厂的实现

1、简介 1.1、概述 简单工厂模式并不属于GoF 23个经典设计模式&#xff0c;但通常将它作为学习其他工厂模式的基础&#xff0c;它的设计思想很简单&#xff0c;其基本流程如下&#xff1a; 首先将需要创建的各种不同对象的相关代码封装到不同的类中&#xff0c;这些类称为具体…

Pushgateway+Prometheus监控Flink

思路方案 FlinkMtrics->pushgateway->prometheus->grafnana->altermanager 方案 : Flink任务先将数据推到pushgateway。然后pushgateway将值推送到prometheus,最后grafana展示prometheus中的值, 去这个 https://prometheus.io/download/ 下载最新的 Prometheu…

【IDEA】idea不自动生成target

文章目录 1. 不生成target2. 仅部分文件不生成target2.1. 一般原因就是资源没有设置2.2. 配置编译src/main/java文件夹下的资源文件2.3. 清理缓存&#xff08;王炸&#xff09; 3. 参考资料 本文描述idea不生成target的几种情况以及处理方法 1. 不生成target 像下图这样根本就…

一篇文章搞定Java泛型

目录 介绍 优点 泛型类 语法定义 代码示例 泛型类注意事项 抽奖示例 泛型类派生子类 定义 代码示例 子类是泛型 子类不是泛型 泛型接口 定义 泛型方法 定义 代码示例 泛型方法与可变参数 泛型方法总结 ​编辑类型通配符 定义 代码示例 通配符的上限 定义 …

致敬图灵!HashData拥抱数据智能新时代!

图1&#xff1a;2023ACM中国图灵大会现场 生于1912年的艾伦图灵被称为“计算机科学之父”、“人工智能之父”。1966年&#xff0c;国际计算机协会&#xff08;ACM&#xff09;为了纪念这位卓越的科学家&#xff0c;设立了以其名字命名的ACM图灵奖&#xff0c;以表彰在计算机领…

入门redis你一定需要知道的命令

1、各种数据类型的特点 字符串(string)&#xff1a;普通字符串&#xff0c;Redis中最简单的数据类型 哈希(hash)&#xff1a;也叫散列&#xff0c;类似于Java中的HashMap结构 列表(list)&#xff1a;按照插入顺序排序&#xff0c;可以有重复元素&#xff0c;类似于Java中的Li…

nginx如何配置两个服务器的连接

nginx 中通过server_name listen的方式配置多个服务器 nginx配置两个站点的windows操作方法&#xff0c;双域名双站点

JavaWeb_LeadNews_Day4-阿里云内容安全, 雪花算法, app文章保存, 自媒体文章审核

JavaWeb_LeadNews_Day4-阿里云内容安全, 雪花算法, app文章保存, 自媒体文章审核 阿里云内容安全分布式主键策略-雪花算法app文章保存具体实现总结 自媒体文章审核提取内容和图片审核内容和图片保存app端文章Feign远程调用降级发布文章异步调用自管理敏感词图片文字识别入门集成…

【【51单片机11.0592晶振红外遥控】】

51单片机11.0592晶振红外遥控 红外遥控&#xff0c;51单片机完结 这是初步实现的架构 怎么实现内部的详细逻辑 我们用状态机的方法 0状态时一个空闲状态 当它接收到下降沿开始计时然后转为1状态 1状态下 寻找start 或者repeat的信号 再来下降沿读出定时器的值 如果是start 那…

UE4/5C++多线程插件制作(十八、Graph线程封装,以及宏的设置)

目录​​​​​​​ 什么是Graph线程? MTPThreadGraphManage.h MTPThreadInterface.h MTPThreadGraphManage.h MTPManage.cpp void FMTPThreadGraphManage::Wait(const FGraphEventRef& EventRef)</

QT 常用数据结构整理

目录 QString篇 QString篇 //初始化bool bOk false;QString str "sd";QString strTemp(str);str QString("%1,%2").arg("11").arg("-gg");qDebug()<<str;str.sprintf("%s %d","ni",1);qDebug()<<…

网安笔记2

一、实例对象 1.对象是单个实物的抽象&#xff0c;是一个容器&#xff0c;封装了属性和方法 2.构造函数&#xff0c;构造函数就是一个普通的函数&#xff0c;但具有自己的特征和用法。 var Vehicle function () { this.price 1000; }; 上面代码中&#xff0c;Ve…

前端(Electron Nodejs)如何读取本地配置文件

使用electron封装了前端界面之后&#xff0c;最终打包为一个客户端&#xff08;exe&#xff09;。但是&#xff0c;最近项目组内做CS&#xff08;c开发&#xff09;的&#xff0c;想把所有的配置都放进安装目录的配置文件中&#xff08;比如config.json&#xff09;。这做法&am…

M 芯片的 macos 系统安装虚拟机 centos7 网络配置

centos 安装之前把网络配置配好或者是把网线插好 第一步找到这个 第二步打开网络适配器 选择图中所指位置 设置好之后 开机启动 centos 第三步 开机以后 编写网卡文件保存 重启网卡就可以了&#xff0c;如果重启网卡不管用&#xff0c;则重启虚拟机即可 “ ifcfg-ens160 ” 这…