高级查询 — 连接查询

news2024/11/28 11:49:56

关于northwind 示例数据库

  • 查询数据库中的表

    show tables;
    

  • 查询表的表属性

    desc xxx(表名);
    

连接查询

1.概述
  • 若一个查询同时涉及两个及以上的表,则称之为连接查询。
  • 也可以叫做多表查询。
  • 使用join关键字进行多表连接。
2.分类(按功能)
  • 内连接:等值连接、非等值连接、自链接。
  • 外连接:左外连接、右外连接、全外连接。
  • 交叉连接。

内连接

0.概述
  • 多表连接的结果为多表的交集部分。
  • n个表连接,至少需要 n-1 个连接条件。
  • 多表顺序没有要求,为方便操作一般需要为表起别名。
  • 可以搭配之前所有子句使用。
1.等值连接
  • 基本概念

    • 基于两个或多个表之间的共同列进行匹配。
    • 在等值连接中,两个表的列必须具有相同的数据类型,并且通常使用等于操作符 “=” 进行比较。
    • NULL 不等于任何值(包括 NULL 本身),因此如果两个表之间的列中有 NULL 值,则它们不会被视为相等。
  • 示例

    • 查询员工名字、工种编号和工种名称

      # 两个里边都有job_id, 所以要指定出来选择哪个
      select first_name, e.job_id, job_title
      from employees as e
      join jobs as j
      on e.job_id = j.job_id;
      
    • 加上筛选:查询有提成员工的员工名字、部门名称和提成

      select first_name, department_name, commission_pct
      from employees as e
      join departments as d
      on e.department_id = d.department_id
      where commission_pct is not null;
      
    • 加上分组:查询城市名称和该城市拥有的部门数量,过滤没有部门的城市

      select city, count(*) as num
      from departments as d
      join locations as l
      on d.location_id = l.location_id
      group by city;
      
    • 加上排序:查询每个工种的工种名称和员工人数,并且按员工人数降序排序

      select job_title, count(*) as num
      from employees as e
      join jobs as j
      on e.job_id = j.job_id
      group by job_title
      order by num desc;
      
    • 多表查询:查询员工名字、部门名称和所在的城市,并按部门名称降序排序

      select first_name, department_name, city
      from employees as e
      join departments as d
      on e.department_id = d.department_id
      join locations as l
      on d.location_id = l.location_id
      order by department_name desc;
      
2.非等值连接
  • 基本概念

    • 基于两个或多个表之间的共同列进行匹配。
    • 但是使用的不是等于操作符 “=”,而是其他比较操作符(如大于号 “>”, 小于号 “<” 等)。
    • 通常用于需要在两个表之间根据一个范围或者某些条件进行匹配时。
  • 示例

    • 查询员工的工资和工资级别

      select salary, grade_level
      from employees as e
      join job_grades as j
      on e.salary between j.lowest_sal and highest_sal;
      
    • 查询工资级别和该级别的员工人数,不包括人数小于 20 的工资级别

      select grade_level, count(*) as num
      from employees as e
      join job_grades as g
      on e.salary between g.lowest_sal and g.highest_sal
      group by grade_level
      having num > 20;
      
3.自链接
  • 基本概念

    • 在同一张表中通过连接相同的列来查询数据的过程。
    • 简单来说,就是将一张表看作两张表进行连接操作。
    • 通常用于需要比较同一表中不同行之间的数据时,例如查找员工与其经理之间的关系。
    • 自连接本质是两个相同的表连接,写代码时视为两个不相同的表连接。
  • 示例

    • 查询员工编号、员工名字、上司编号和名字

      select e.employee_id, e.first_name, m.employee_id as manager_id, m.first_name as manager_name
      from employees as e
      join employees as m
      on e.manager_id = m.employee_id;
      
    • 查询名为 Lisa 的员工,员工编号、其上司编号和名字

      select a.employee_id, a.manager_id, b.first_name
      from employees as a
      join employees as b
      on a.manager_id = b.employee_id
      where a.first_name = 'Lisa';
      

外连接

1.左外连接
  • 基本概念

    • 可以返回左表中所有行和右表中与之匹配的行。

    • 左表中的所有行都会被保留,而右表中只有符合条件的行才会被保留。

    • 如果右表中没有匹配的数据,则填充 NULL 值。

  • 示例

    • 查询任职部门名为 sal 和 it 的员工信息(应将部门信息全部保留)

      select e.*
      from departments as d
      left join employees as e
      on d.department_id = e.department_id
      where d.department_name in ('sal', 'it');
      
    • 查询所有员工的名字和所属部门的名称(应将员工名字全部保留)

      select first_name, department_name
      from employees as e
      left join departments as d
      on e.department_id = d.department_id;
      
    • 查询所有部门的名称以及该部门的平均工资 average_salary (不要小数部分),并按平均工资降序排序。(应将部门名称全部保留)

      select department_name, truncate(avg(salary), 0) as average_salary
      from departments as d
      left join employees as e
      on d.department_id = e.department_id
      group by department_name
      order by average_salary desc;
      
2.右外连接
  • 基本概念

    • 它可以返回右表中所有行和左表中与之匹配的行(与左外相反)。

    • 如果左表中没有匹配的数据,则填充 NULL 值。

  • 示例(将左外中的例子以右外的方式实现)

    • 查询任职部门名为 sal 和 it 的员工信息(应将部门信息全部保留)

      select e.*
      from employees as e
      right join departments as d
      on d.department_id = e.department_id
      where d.department_name in ('sal', 'it');
      
    • 查询所有员工的名字和所属部门的名称(应将员工名字全部保留)

      select first_name, department_name
      from departments as d
      right join employees as e
      on e.department_id = d.department_id;
      
    • 查询所有部门的名称以及该部门的平均工资 average_salary (不要小数部分),并按平均工资降序排序。(应将部门名称全部保留)

      select department_name, truncate(avg(salary), 0) as average_salary
      from employees as e
      right join departments as d
      on d.department_id = e.department_id
      group by department_name
      order by average_salary desc;
      
3.全外连接
  • 基本概念
    • 返回两个表中所有行的组合,并将它们按照共同的列进行匹配。
    • 在一个全外连接中,即使没有匹配的数据,也会保留两个表中的所有行。

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

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

相关文章

二阶低通滤波器(通用滤波器)

一阶低通滤波器的详细算法介绍请参看下面文章: 一阶RC算法公式和梯形图代码 PLC信号处理系列之一阶低通(RC)滤波器算法_反馈信号低通滤波器_RXXW_Dor的博客-CSDN博客1、先看看RC滤波的优缺点 优点:采用数字滤波算法来实现动态的RC滤波,则能很好的克服模拟滤波器的缺点; 1…

学院课程功能使用说明书

引子 越来越多的讲师入驻csdn&#xff0c;也有很多学员通过学院平台进行课程学习&#xff0c;我们收到越来越多用户的反馈&#xff0c;现在通过本帖子来对课程功能做一个介绍&#xff0c;简称课程功能使用说明书1.0版&#xff0c;有任何问题均可在帖子下留言。 讲师 如何成为…

Centos7部署项目

Centos7部署项目 Centos7部署项目Centos7安装gitCentos7从github拉取代码配置git配置用于提交代码的用户名配置用户邮箱生成公钥效果如下 github添加SSH key打开你的GitHub获取ssh key公钥内容验证 拉取项目新建空白文件夹拉取项目 使用Docker Compose创建项目容器创建docker-c…

DC LAB8SDC约束四种时序路径分析

DC LAB 1.启动DC2.读入设计3. 查看所有违例的约束报告3.1 report_constraint -all_violators (alias rc)3.2 view report_constraint -all_violators -verbose -significant_digits 4 (打印详细报告) 4.查看时序报告 report_timing -significant_digits 45. 约束组合逻辑(adr_i…

1句代码,挽回1000万损失

前言&#xff1a; 在企业中&#xff0c;出于数据安全和应用高可用&#xff0c;很多软件和企业会对工程文件、数据库等做自动备份和应用容灾等。一份数据或者文件会保留到很多地方&#xff0c;虽然满足了安全性的需求&#xff0c;但是会因为保存数据区间太久造成占用大量的存储成…

chatgpt赋能python:Python快速入门神器:入门教程

Python快速入门神器&#xff1a;入门教程 Python作为一种高级的编程语言&#xff0c;在近年来逐渐成为编程语言领域里面的一匹黑马&#xff0c;在数据科学、人工智能、自动化测试和WEB开发等领域都得到了广泛的应用。Python极易入门&#xff0c;使用简单&#xff0c;代码质量较…

UnityVR--组件8--Avatar骨骼映射遮罩

什么是Avatar 模型中的人物都具有结构相似的骨架&#xff0c;如果建立一个模型骨架结构的映射&#xff0c;就能将同一个动画应用于不同的模型中&#xff0c;这就是Avatar&#xff0c;实现了一种动画重定向的功能。一般使用3DMax、Maya制作并导出为.fbx的人物模型&#xff0c;在…

【MySQL】MySQL在Linux中的环境安装与基本使用

目录 一、MySQL环境的安装 1、MySQL环境安装 2、安装MySQL出现的问题 3、登录MySQl 3.1方案一 3.2方案二 4、修改MySQL配置文件 5、可选设置&#xff1a;开机自启动MySQL&#xff08;云服务器没事一般不会关机&#xff09; 二、MySQL数据库基础 1、一些概念 2、基本…

Java中进制转换的两种方法你知道吗?

目录 十进制转其他进制 其他进制转十进制 实战&#xff1a; A进制转B进制 关于大数运算可以参考躲不掉的高精度计算&#xff0c;蓝桥杯必考_高精度算法在哪些比赛考_无忧#的博客-CSDN博客 十进制转其他进制 使用 Integer.toString(int n,int radix) 方法&#xff0c;该方法…

【LeetCode】739. 每日温度

739. 每日温度&#xff08;中等&#xff09; 思路 我们可以维持一个单调递减的栈&#xff0c;表示每天的温度&#xff1b;为了方便计算天数差&#xff0c;这里存放位置&#xff08;下标&#xff09;&#xff0c;而非温度本身。因为温度可以通过访问数组下标获取。 从左向右遍历…

书接上文,基于藏文手写数字数据开发构建yolov5n轻量级藏文手写数字检测识别系统

在上一篇文章中&#xff1a;《python基于轻量级CNN模型开发构建手写藏文数字识别系统》 开发实现了轻量级的藏文手写数字识别系统&#xff0c;这里主要是想基于前文的数据&#xff0c;整合目标检测模型来进一步挖掘藏文手写数字数据集的可玩性&#xff0c;基于yolov5n开发构建…

Android kotlin序列化之@Parcelize详解与使用

一、介绍 在Android开发过程中&#xff0c;序列化使用概率一直很高。在页面之间传递的对象&#xff0c;需要要使用序列化&#xff0c;常见的序列化&#xff1a;Parcelable、Serialization。 由于Parcelable在传递压缩比高&#xff0c;效率高&#xff0c;一直被Google官方推荐。…

可调电阻器

1、可调电阻&#xff08;Trimming Potentiometer&#xff0c;Variable Resistor&#xff09; 1.1、电气特性&#xff08;Electrical Characteristics&#xff09; ItemSpec ExampleDescriptionTotal Resistance&#xff08;TR&#xff09;&#xff0c;总和阻抗200K端子1和3之间…

独立按键检测短按、长按,松手后响应操作

背景 有项目使用独立按键检测&#xff0c;短按、长按。根据使用效果&#xff0c;发现松手后&#xff0c;也就是按键弹起后响应操作比较好操作。 记得之前&#xff0c;博主写过一篇关于按键的检测的文章&#xff0c;但是过于复杂了。可能很难懂&#xff0c;这里就简单一点&…

Flask学习-环境配置

目录 一.环境部署 二.Flask基本结构 三.完整代码 四.运行效果 一.环境部署 在安装好python&#xff0c;pip环境的基础上在命令行输入如下指令&#xff1a; pip install flask flask框架即安装完毕。 二.Flask基本结构 flask的使用通过创建实例实现。创建方法如下&…

ArgoCD(五)----ArgoCD 各CRD资源配置文件规范

3.4.1 Application资源规范 Application CRD的spec字段主要嵌套如下几个字段&#xff1a; source &#xff1a;配置仓库及相关的配置访问及使用方法&#xff1b;支持如下几种类型&#xff1a; kubernetets的原生配置文件Helm chartkustomize&#xff1a;由kustomize字段进行定义…

软件测试实战,支付二维码测试-测试点汇总,全面覆盖...

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

递归——先递后归——平衡二叉树

目录 1.什么是递归 &#xff08;1&#xff09;问问无所不能的chatgpt。 ​&#xff08;2&#xff09;我的理解 2.递归的应用之——树 &#xff08;1&#xff09;二叉树的录入与打印 &#xff08;2&#xff09;举个例子&#xff1a;将有序的数组转化为平衡二叉树 1.什么是递…

ffmpeg中的avs解码器综述

最近拿了一个avs的视频流&#xff0c;用硬件可以解码&#xff0c;但是ffmpeg自带的却无法解码。 所以研究了一下&#xff0c;首先看ffmpeg的avs解码器&#xff1a; 可以看到avs有两个&#xff0c;第一个是avs 第二个是cavs. 我们先用avs来解码&#xff0c;解码的视频是通过【a…

浅谈医院能耗监控平台研究与应用

摘要&#xff1a;综合性医院作为大型公共机构&#xff0c;能耗高的问题日益突出&#xff0c;构建能耗监控平台对医院能耗量化管理以及效果评估已经成为迫切需要。建立智能能耗监控平台&#xff0c;对采集的能耗数据进行分析&#xff0c;实现对医院能耗平台监控&#xff0c;为医…