07:MYSQL----多表查询

news2024/11/19 14:25:15

目录

1:多表查询概述

2:多表查询分类

 3:内连接

3:外连接

4:自连接  

 5:联合查询-union,union all

6:子查询


1:多表查询概述

select * from emp , dept;

emp:表中有6条数据,   dept表中有5条数据只查询出来的数据为:30条

概述:指从多张表中查询数据

笛卡尔积: 笛卡尔乘积是指在数学中,两个集合A集合和 B集合的所有组合情况。(在多表查询时,需要消除无效的笛0卡尔积)

--加上where条件消除笛卡尔积

select * from emp , dept where emp.dept_id=dept.id ;

2:多表查询分类

内连接:相当于查询A、B交集部分数据

外连接:   

                左外连接:查询左表所有数据,以及两张表交集部分数据

                右外连接:查询右表所有数据,以及两张表交集部分数据

自连接:当前表与自身的连接查询,自连接必须使用表别名

 3:内连接

语法   [  ]是可选向,所有可以省略 :

--隐式内连接
select 字段列表 from 表1,表2  where 条件....;

--显式内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件;

内连接查询的是两张表交集的部分

-- 内连接演示
-- 1. 查询每一个员工的姓名 , 及关联的部门的名称 隐式内连接实现
-- 表结构: emp ,dept
-- 连接条件: emp.dept_id = dept.id
select emp.name,dept.name from emp , dept where emp.dept_id=dept.id ;
select e.name,d.name from emp e , dept d where e.dept_id=d.id ;
-- 在起的别名后,只可以使用别名否则会报错
-- 显示内连接 
select e.name, d.name from emp e inner join dept d on e.dept_id = d.id;

3:外连接

左外连接:

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

相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据

右外连接:

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

相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据

-- 左连接
select e.name, d.name from emp e left outer join dept d on e.dept_id = d.id;
select e.*, d.name from emp e left join dept d on e.dept_id = d.id; -- outer 是可选项
-- 右连接
select d.*, e.* from emp e right outer join dept d on e.dept_id = d.id;
-- 一般情况下左连接使用的较多,右连接可以转换为左连接
select d.*, e.* from dept d left outer join emp e on e.dept_id = d.id;

4:自连接  

语法:

对一张表进行查询(一张表自己连接自己)

select 字段列表 from 表A 别名A join 表B 别名B on 条件....;

自连接查询,可以是内连接查询,也可以是外连接查询。

-- 自连接
-- 1. 查询员工 及其 所属领导的名字
-- 表结构: emp
select a.name , b.name from emp a , emp b where a.managerid = b.id;
-- 2. 查询所有员工 emp 及其领导的名字 emp , 如果员工没有领导, 也需要查询出来
-- 表结构: emp a,emp b
select a.name '员工', b.name '领导' from emp a left join emp b on a.managerid = b.id;

 自连接时要把一张表看为两张表

 5:联合查询-union,union all

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集

select 字段列表 from 表A...
union [all]
select 字段列表 from 表B...

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致

union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重

实际上就是把2次的查询结果放在一起打印出来

select * from emp where salary < 50000
union all
select * from emp  where age > 50;


select * from emp where salary < 50000
union 
select * from emp  where age > 50;

6:子查询

概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

select * from t1 where column1=(select column1 from t2);

子查询外部语句可以是: insert    update    delete   select   的任何一个

根据子查询结果不同,分为:

A:标量子查询(子查询结果为单个值)

B:列子查询(子查询结果为一列)

C:行子查询(子查询结果为一行,可以是多列)

D:表子查询(子查询结果为多行多列)

根据子查询位置,分为where之后、from之后、select之后。

A:标量子查询(子查询结果为单个值)

-- 2.查询在“小昭”入职之后的员工信息
-- a.查询小昭的入职日期
select entrydate from emp where name ="小昭";
-- b 查询所有员工的的入职日期
select * from emp where entrydate > "2004-10-12";
-- 完整的sql
select * from emp where entrydate >(select entrydate from emp where name ="小昭");
-- -- 1.查询“研发部"的所有员工信息
-- a:研发部的部门id
select id from dept where name="研发部";
-- b:查询所有员工的信息
select * from emp where dept_id="1";
-- 完整sql
select * from emp where dept_id=(select id from dept where name="研发部");

B:列子查询(子查询结果为一列)

子查询返回的结果为一列(可以是多行),这种子查询称为列子查询

常使用的符号:in,    not in   ,any ,some ,allch

        操作符描述
in在指定的集合范围之内,多选一
not in不在指定的集合范围之内
any子查询返回列表中,有任意一个满足即可
some与ANY等同,使用SOME的地方都可以使用ANY
all子查询返回列表的所有值都必须满足
--列子查询
-- 1.查询“销售部"和“研发部""的所有员工信息
-- a.查询“销售部"和1“研发部"的部门ID
select id from dept where name='销售部' or name= '研发部' ;
-- b.根据部门ID,查询员工信息
select * from emp where dept_id in (select id from dept where name='销售部' or name= '研发部' );


-- 2.查询比研发部所有人工资都高的员工信息
-- a.查询研发部所有财务部人员工资
select salary from emp where dept_id =(select id from dept where name='研发部');

select * from emp where salary > all(select salary from emp where dept_id =(select id from dept where name='研发部'));

-- 3. 查询比研发部其中任意一人工资高的员工信息
select salary from emp where dept_id =(select id from dept where name='研发部');
select * from emp where salary > any (select salary from emp where dept_id =(select id from dept where name='研发部'));

C:行子查询(子查询结果为一行,可以是多列)

行子查询
 子查询返回的结果是一行(可以是多列),这种子查询称为行子查询常用的操作符:  = 、<>、IN 、   NOT IN

-- 行子查询
-- 1. 查询与“张无忌”的薪资及直属领导相同的员工信息 ;
select salary,managerid from emp where name='张无忌';

select * from emp where  (salary,managerid)=(select salary,managerid from emp where name='张无忌');

D:表子查询(子查询结果为多行多列)

子查询返回的结果是多行多列,这种子查询称为表子查询C常用的操作符:IN  -----在指定的集合范围之内,多选一

-- 1。 查询与“韦一笑”,“常巡春”的职位和薪资的员工信息
-- a:首先查询韦一笑”,“常巡春”的职位和薪资
select job,salary from emp where name='韦一笑' or name='常巡春';

select * from emp where (job,salary) in (select job,salary from emp where name='韦一笑' or name='常巡春');

-- 2. 查询入职日期是 “2001-01-01” 之后的员工信息 , 及其部门信息
select * from emp where entrydate >'2001-01-01';

select e.*,d.* from (select * from emp where entrydate >'2001-01-01') e left join dept d on d.id=e.dept_id;

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

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

相关文章

在vite或者vue-cli中使用.env[mode]环境变量

在项目中总会遇到一些默认的配置,需要我们配置到静态文件中方便我们去获取,这时候就可以用到这个.env环境变量文件,在cli创建的项目中顶层的nodejs会有一个process对象,这个对象可以根据不同的环境获取不同的环境配置文件,但是vite中获取变量的方式不一样。 创建变量文件.env.…

如何编写接口自动化框架系列之requests详解(三)

目录 1.http协议 2.requests介绍 3.requests的主要功能 3.requests的主要功能 3.1 场景1-常用方法 3.2 场景2-通用方法 3.3 场景3-cookies认证方式 4.requests 在项目中的实践 4.1 在接口层实现一个接口 4.2 在测试用例层调用 4.3 项目总结 本文是接口自动化测试框架…

IOC初始化 IOC启动阶段 (Spring容器的启动流程)

[toc](IOC初始化 IOC启动阶段 (Spring容器的启动流程)) IOC初始化 IOC启动阶段 (Spring容器的启动流程) Resource定位过程&#xff1a;这个过程是指定位BeanDefinition的资源&#xff0c;也就是配置文件&#xff08;如xml&#xff09;的位置&#xff0c;并将其封装成Resource对…

Makefile基础教程(make的隐式规则)

文章目录 前言一、什么是make的隐式规则二、makefile中出现同名目标时三、一些常见的隐式规则四、查看隐式规则五、隐式规则缺点六、禁用隐式规则1.全局禁用2.局部禁用 总结 前言 本篇文章将给大家介绍make的隐式规则。 一、什么是make的隐式规则 Make 的隐式规则是指 Make …

css选择器及其权重

1. 类型选择器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置

目前&#xff0c;在 ZYNQ 中进行以太网开发的方案&#xff0c;大部分都是基于通过 PS 的 MIO 以 RGMII 接口连接外部 PHY 芯片的方式。但是&#xff0c;由于使用 PS 的 MIO 只能以 RGMII 接口连接外部 PHY 芯片&#xff0c;这就限制了支持其他接口 PHY 芯片的使用&#xff0c;如…

分文件实现温湿度数据管理系统项目

目标&#xff1a; 了解分文件的概念&#xff0c;要依次从C语言的函数声明、变量的存储类别、C语言编译预处理&#xff0c;说起。这些知识点我们之前或多或少接触过&#xff0c;这里做个总结与拓展。经过总结&#xff0c;最后我们归纳出一个实现C语言模块化编程的技巧&#xff…

03-bootstrap-响应式布局-栅格系统

一、概述 1、栅格系统是 Bootstrap 中响应式布局的重要组成部分&#xff0c;旨在实现页面元素的自适应排版。Bootstrap 栅格系统将屏幕宽度分为 12 列&#xff0c;通过在 HTML 元素上添加相应的类名&#xff0c;可以让元素占据指定数量的列数&#xff0c;从而实现灵活的布局效…

5种易实现的Linux和 Windows VPS速度提升方法

​  无论是Linux VPS还是Windows VPS&#xff0c;网站速度的提高都是非常重要的。它们在提高网站速度方面都有很多的优化方法。下面我们将介绍 5 种提高网站速度的方法。 1.通过缓存加速 缓存通常是用来加快商业网站加载时间的技术&#xff0c;因此它也可以用在 VPS 上。没有…

车架号查车辆信息-vin查车辆信息api接口

接口地址&#xff1a; https://登录后显示/pyi/88/264(支持:http/https)) 在线查询&#xff1a;https://www.wapi.cn/car_vin.html 网站地址&#xff1a;https://www.wapi.cn 返回格式&#xff1a;json,xml 请求方式&#xff1a;GET,POST 请求说明&#xff1a; Md5验证方式-…

字符串、字符串列表,倒序生成字典。

带数字的字符串以数字为key倒序生成字典&#xff0c;字符串列表按其元素索引为key倒序生成字典。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简…

【MySQL】-- 表的操作

目录 表的操作 创建表 创建表案例 查看表结构 查看表结构案例 查看历史上表的创建语句 修改表 修改表实例 新增列属性 修改列属性 删除列属性 修改列名 修改表名 删除表 表的操作 创建表 语法&#xff1a; CREATE TABLE (if not exists) table_name (fie…

【MyBatisPlus框架】

文章目录 MyBatisPlus1.概述1.1 简介1.2特性1.3支持数据库1.4框架结构 2.入门案例2.1 创建数据库以及表2.2 创建工程2.2.1引入依赖 2.3编写代码 3.基本CRUD3.1BaseMapper3.2插入3.3删除3.4修改3.5查询3.6通用Service 4.常用注解4.1TableName4.1.1问题4.1.2通过TableName解决上述…

简述springmvc的流程

4、SpringMVC的执行流程 用户向服务器发送请求&#xff0c;请求被SpringMVC 前端控制器 DispatcherServlet捕获。 DispatcherServlet对请求URL进行解析&#xff0c;得到请求资源标识符&#xff08;URI&#xff09;&#xff0c;判断请求URI对应的映射&#xff1a; a) 不存在 …

day05 java_Spring IoC 和 DI

为什么使用spring框架 1.解耦代码(每次使用都要new一个对象) 2.解决事务繁琐问题(创建对象----初始化----调用方法销毁对象) 3.使用第三方框架麻烦的问题 总结:spring是一个轻量级的Ioc,Di和AOP容器 轻量级:简洁,高效,低依赖 **容器:**创建对象并将对象存储对象,同时管理…

高矿化度矿井水深度除氟装置CH-87技术解析

高矿化度矿井水是指含有高浓度溶解性矿物质的废水&#xff0c;通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征&#xff0c;对环境…

性能测试计划不会写?我告诉你有模板你看不看

目录 1 简介 2 测试进入条件 3 测试退出条件 4 性能测试需求 5 测试风险 6 测试时机 7 测试策略 8 测试资源 9 测试进度 10 交付物 1 简介 1.1 目的 【描述性能测试计划的目的。】 1.2 背景 【描述项目或产品的背景。】 1.3范围 【描述性能测试的整体范围。】 2 测试进入条件 【…

Java如何配置环境变量

Java如何配置环境变量 0. 前言1. 下载Java2. 配置环境变量2.1新建 Java_Home2.2 编辑Path情况1情况2 3. 验证安装 0. 前言 本节记录如何配置Java环境变量&#xff0c;用自己重装过的系统实操 操作系统&#xff1a;Windows10 专业版 Java版本&#xff1a;jdk1.7.0_07 1. 下载…

全网最详细,Selenium自动化测试问题总结+解决,跟着大佬上高速...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Selenium4自动化测…

性能测试工程师必看——性能测试报告模板

目录 1. 测试概述 1.1 测试目标 1.2 指标和术语 2. 环境、工具 2.1 测试环境 2.2 测试工具 3. 测试方案 3.1 测试类型 3.2 业务模型 3.3 加密验签处理 3.4 压力梯度 4. 测试结果 4.1 聚合报告 4.2 系统吞吐量 4.3 资源占用率 5. 分析和建议 5.1 测试结论分析 …