MySQL_多表查询

多表查询

  1. 概述:多表查询就是多张表之间的查询。

    • 回顾:SELECT * FROM table_name

    • 多表查询 from 后面就得跟多张表。如:select * from emp,dept

      在这里插入图片描述

  2. 笛卡尔积:笛卡尔积在数学中,表示两个集合,集合 A 和集合 B的所有组成情况。

    在这里插入图片描述

  3. 如何在 sql 中去消除笛卡尔积尼?在sql 查询中,只需要加上一定的条件,就可以消除无效数据,消除笛卡尔积。

    • 比如,查询马云的时候,加上部门id 的条件,就可以消除其它无效数据

多表查询的分类

连接查询

  • 内连接查询(相当于查询我们集合的交集部分(C))

    在这里插入图片描述

内连接查询

  1. 注意:无法查询没有关联关系的数据
隐式内连接查询
  1. 语法:

    SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;SELECT * FROM emp,dept where emp.dept_id = dept.id
    

    在这里插入图片描述

显式内连接查询
  1. 语法

    SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;SELECT * FROM emp JOIN dept on emp.dept_id = dept.id;
    

    在这里插入图片描述

内连接查询的案例
  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;

    在这里插入图片描述

  2. 查询每一个员工的姓名 , 及关联的部门的名称 (显式内连接实现) — INNER JOIN …ON …

    • 表结构: emp , dept

    • 连接条件: emp.dept_id = dept.id

      SELECT e.name ‘员工姓名’,d.name ‘部门名称’
      FROM emp e JOIN dept d ON e.dept_id = d.id;

      SELECT e.name ‘员工姓名’,d.name ‘部门名称’
      FROM emp e INNER JOIN dept d ON e.dept_id = d.id;

  3. 注意:一旦起了别名,就不能用表直接使用,此时只能使用别名,inner 可以省略(不影响任何效果,开发中基本不使用)

    在这里插入图片描述

外连接查询

  1. 外连接查询分为左外连接和右外连接
左外连接
  1. 语法(包含左表的所有数据,也包含两张表交集的数据):

    SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
    

    在这里插入图片描述

右外连接
  1. 语法(相当于查询右边表的所有数据,也包含两张表的交集部分):

    SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;
    

    在这里插入图片描述

外连接查询的案例
  1. 查询emp表的所有数据, 和对应的部门信息,由于需求中提到,要查询emp的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。

    • 表结构: emp, dept

    • 连接条件: emp.dept_id = dept.id

      SELECT e.*,d.* from emp e left join dept d on e.dept_id = d.id;

  2. 查询dept表的所有数据, 和对应的员工信息(右外连接)由于需求中提到,要查询dept表的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。

    • 表结构: emp, dept

    • 连接条件: emp.dept_id = dept.id

      SELECT e.*,d.* from emp e right join dept d on e.dept_id = d.id;
      SELECT e.*,d.* from dept d left join emp e on e.dept_id = d.id;

外连接查询注意
  1. 左外连接,右外连接可以相互替换(只不过是颠倒顺序的问题),在开发中,你任意使用,我偏向于喜欢左连接

自连接查询

  1. 概述:自己连接自己,也就是把一张表当成两张表来查询,自连接查询可以使用内连接或者外连接查询

  2. 语法(必须使用别名)

    SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;
    
自连接查询的案例
  1. 查询员工 及其 所属领导的名字

    SELECT   e.name '员工姓名' , ee.name '领导名称'  FROM emp e,emp ee where e.managerid = ee.id
    
  2. 查询所有员工 emp 及其领导的名字 emp , 如果员工没有领导, 也需要查询出来

    SELECT   e.name '员工姓名' , ee.name '领导名称'  FROM emp e left join emp ee on e.managerid = ee.id
    

联合查询

  • union查询

    • 把多次查询的结果合并起来,形成一个新的查询结果集
  • union all 查询

    • 将全部的数据直接合并到一起(union) 会去重
  • 语法

    SELECT 字段列表 FROM 表名 ...
    UNION [ALL]
    SELECT 字段列表 FROM 表名 ...
    
  • 要求:对于联合查询,必须保持查询的列长度一致,字段类型也需要保持一致

    在这里插入图片描述

联合查询的案例
  1. 将薪资低于 5000 的员工 , 和 年龄大于 50 岁的员工全部查询出来.

    select * from emp where salary < 5000 union 
    select * from emp where age > 50 
    
  2. 注意:使用 union all 不会去重,只是把两张表的结果集做一个逻辑合并

    在这里插入图片描述

子查询

  1. 概述,实质是一种嵌套查询,把查询出来的结果集作为新表来进行查询

  2. 语法:

    SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );
    
  3. 对于增删改查来说,都可以使用子查询的方式

  4. 分类

    • 标量子查询(查询出来的结果是单个值)
    • 列子查询(子查询的结果为一列)
    • 行子查询(子查询出来的结果是一行)
    • 表子查询(子查询查出来的结果是多行多列的)
  5. 查询位置

    • where
    • from
    • select

标量子查询

  1. 查询结果是单个值(数值,日期),常用一些操作位,= ,!=,>,<,>=,<=

  2. 案例:

    • 查询 “研发部” 的所有员工信息

      SELECT * FROM emp where dept_id = (SELECT id from dept where name = '研发部');
      
    • 查询在 “马云” 入职之后的员工信息

      SELECT * FROM emp where entrydate > (SELECT entrydate from emp where name = '马云');
      

列子查询

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

    • 常用操作符

      • IN
      • NOT IN
      • ANY 有任意一个满足就行
      • SOME 有任意一个满足就行 ANY 和 SOME 可以替换
      • ALL 必须全部满足
  2. 案例:

    • 查询 “销售部” 和 “市场部” 的所有员工信息

      SELECT * FROM emp WHERE dept_id in (SELECT id FROM dept where name = '销售部' or name = '市场部');
      
    • 查询比 “财务部” 所有人工资都高的员工信息

      SELECT * FROM emp where salary > all(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 = '研发部'))
      

行子查询

  1. 概述:子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

  2. 常用操作符

    • =
    • !=
    • IN
    • NOT IN
  3. 案例:

    • 查询与 “谢世煌” 的薪资及直属领导相同的员工信息

      SELECT  * FROM emp where (managerid,salary) = (SELECT managerid,salary from emp where name = '谢世煌');
      

表子查询

  1. 概述:就是查询的结果返回多行多列,这种子查询就是表子查询

  2. 常用操作符

    • IN
  3. 案例

    • 查询与 “韩敏” , “蒋芳” 的职位和薪资相同的员工信息

      select * from emp where (job,salary) in ( SELECT job,salary from emp where name = '韩敏' or name = '蒋芳')
      
    • 查询入职日期是 “2006-01-01” 之后的员工信息 , 及其部门信息

      SELECT e.name '员工姓名' ,e.salary '薪资', d.name '部门名称' FROM  (SELECT * FROM emp where entrydate > '2006-01-01') eLEFT JOIN dept d on  d.id = e.dept_id
      

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

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

相关文章

Django实现音乐网站 ⑽

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。 目录 歌曲类型功能优化 新增编辑 优化输入项标题显示 父类型显示改为下拉菜单 列表显示 父类型显示名称 过滤器增加父类型 歌单表功能优化…

# X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系

X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系 很多人对于他们是啥是傻傻分不清的&#xff0c;我做了个表格供大家参考。 摘抄&#xff1a; X11是X Window System Protocol, Version 11&#xff08;RFC1013&#xff09;&#xff0c;是X server和X client之间的通…

Android多渠道打包+自动签名工具 [原创]

多渠道打包自动签名工具 [原创] github源码&#xff1a;github.com/G452/apk-packer 如果觉得有帮助可以点个小星星支持一下&#xff0c;万分感谢&#xff01; 使用步骤&#xff1a; 1、在apk-packer.exe目录内放入打包需要的配置&#xff1a; 1&#xff09;签名文件.jks2&am…

flutter开发实战-just_audio实现播放音频暂停音频设置音量等

flutter开发实战-just_audio实现播放音频暂停音频设置音量等 最近开发过程中遇到需要播放背景音等音频播放&#xff0c;这里使用just_audio来实现播放音频暂停音频设置音量等 一、引入just_audio 在pubspec.yaml引入just_audio just_audio: ^2.7.0在iOS上&#xff0c;video_p…

Michael.W基于Foundry精读Openzeppelin第23期——ERC165Checker.sol

Michael.W基于Foundry精读Openzeppelin第23期——ERC165Checker.sol 0. 版本0.1 ERC165Checker.sol 1. 目标合约2. 代码精读2.1 supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId)2.2 supportsERC165(address account)2.3 supportsInterface(address acc…

springboot整合JMH做优化实战

这段时间接手项目出现各种问题&#xff0c;令人不胜烦扰。吐槽下公司做项目完全靠人堆&#xff0c;大上快上风格注定留下一地鸡毛&#xff0c;修修补补不如想如何提升同事代码水准免得背锅。偶然看到关于JMH对于优化java代码的直观性&#xff0c;于是有了这篇文章&#xff0c;希…

11款UML/SysML建模工具更新(2023.7)Papyrus、UModel……

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有&#xff1a; 工具最新版本&#xff1a;drawio-desktop 21.6.5 更新时间&#xff1a;2023年7月22日 工具简介 开源绘图工具&#xff0c;用Electron编写&#xff0c;…

uniapp文件下载并预览

大概就是这样的咯&#xff0c;文件展示到页面上&#xff0c;点击文件下载并预览该文件&#xff1b; 通过点击事件handleDownLoad(file.path)&#xff0c;file.path为文件的地址&#xff1b; <view class"files"><view class"cont" v-for"(…

PPO和文本生成

策略梯度 策略梯度&#xff08;Policy Gradient&#xff09;方法梯度的计算如下&#xff1a; E ( a t , s t ) ∈ π θ [ A ^ t ∇ θ log ⁡ π θ ( a t ∣ s t ) ] \mathbb E_{(a_t,s_t) \in \pi_\theta}[\hat A_t \nabla_ \theta \log \pi_\theta(a_t | s_t)] E(at​,st…

Nginx的重定向

URI&#xff1a;统一资源标识符&#xff0c;是一种字符串标识&#xff0c;主要是用于标识抽象的或者是物理资源&#xff08;主要是指一些文件视频等等&#xff09; 常用的Nginx正则表达式 ^ 匹配输入字符串的起始位置&#xff08;以......开头&#xff09; $ 匹配输入…

FreeRTOS( 任务与中断优先级,临界保护)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、中断优先级 1、NVIC基础知识 2、FreeRTOS配置NVIC 3、SVC、PendSV、Systick中断 4、不受FreeRTOS管理的中断 5、STM32CubeMX配置 二、任务优先级 1、任务优先级说明 2、任务…

【LeetCode】144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 144. 二叉树的前序遍历 144. 二叉树的前序遍历 题目&#xff1a; 给你二叉树的根节点 root &…

保姆级Arcgis安装图文安装教程

参考视频&#xff1a;【钟老师arcGIS从放弃到入门】02软件下载与安装_哔哩哔哩_bilibili 安装包在视频简介中有 注释&#xff1a;安装过程中有犯错误&#xff0c;请耐心看完一遍再跟着操作 &#xff08;一&#xff09;安装包下载 下载视频中分享的压缩包(压缩包密码&#x…

window下部署Yapi接口管理系统部署总结

window下部署Yapi接口管理系统部署总结 YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API&#xff0c;YApi 还为用户提供了优秀的交互体验&#xff0c;开发人员只需利用平…

后端开发8.品牌模块

概述 简介 效果图 数据库设计 DROP TABLE IF EXISTS `goods_brand`;CREATE TABLE `goods_brand` ( `goodsBrandId` int(11) NOT NULL AUTO_IN

04-4_Qt 5.9 C++开发指南_时间日期与定时器

文章目录 1. 时间日期相关的类2. 源码2.1 可视化UI设计2.2 dialog.h2.3 dialog.cpp 1. 时间日期相关的类 时间日期是经常遇到的数据类型&#xff0c;Qt 中时间日期类型的类如下。 QTime:时间数据类型&#xff0c;仅表示时间&#xff0c;如 15:23:13。 QDate:日期数据类型&…

【资料分享】全志科技T507-H工业核心板规格书

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板&#xff0c;主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案&#xff0c;国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

QGIS开发五:使用UI文件

前面我们说了在创建项目时创建的是一个空项目&#xff0c;即不使用 Qt 提供的综合开发套件 Qt Creator&#xff0c;也不使用 Qt Visual Studio Tools 这类工具。 但是后面发现&#xff0c;如果我想要有更加满意的界面布局&#xff0c;还是要自己写一个UI文件&#xff0c;如果不…

深度对话|如何设计合适的网络经济激励措施

近日&#xff0c;我们与Mysten Labs的首席经济学家Alonso de Gortari进行了对话&#xff0c;讨论了如何在网络运营商和参与者之间找到激励措施的平衡&#xff0c;以及Sui的经济如何不断发展。 是什么让您选择将自己的经济学背景应用于区块链和Web3领域&#xff1f; 起初&…

微信个人小程序申请 (AppID 和 AppSecret)

1. 登录微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?url%2Fcgi-bin%2Fhome%3Ft%3Dhome%2Findex%26lang%3Dzh_CN%26token%3D47421820 2. 右上角立即注册 3. 注册类型选择小程序 4. 账号信息 5. 邮箱激活 6. 小程序发布流程 7. 小程序信息 (前往填写) 8. 获取小程…