SQL语句详解四-DQL(数据查询语言-多表查询二)

文章目录

    • 多表查询
      • 内连接查询
        • 隐式内连接
        • 显示内连接
        • 注意事项
      • 外连接查询
        • 左外连接
        • 右外连接
      • 子查询
        • 子查询单行单列
        • 子查询多行单列
        • 子查询多行多列

多表查询

  • 接下来需要用到的表

    -- 创建公司数据库
    CREATE DATABASE IF NOT EXISTS company CHARACTER SET utf8;-- 使用数据库
    USE company;-- 创建部门表
    CREATE TABLE dept(did INT PRIMARY KEY AUTO_INCREMENT,		-- 部门编号dname VARCHAR(40)				-- 部门名称 
    );-- 向部门表插入数据
    INSERT INTO dept(dname) VALUES('开发部'),('市场部'),('财务部');-- 创建员工表
    CREATE TABLE emp(eid INT PRIMARY KEY AUTO_INCREMENT,		-- 员工编号ename VARCHAR(40),				-- 员工姓名gender CHAR(1),					-- 性别salary DOUBLE,					-- 工资join_date DATE,					-- 入职日期dept_id INT,					-- 部门外键FOREIGN KEY (dept_id) REFERENCES dept(did)	-- 外键,关联部门表		
    );-- 插入数据
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2018-01-24',1);
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2019-12-02',2);
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2018-08-08',2);
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2019-10-07',3);
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2020-03-14',1);
    
  • 查询语法

    SELECT列名列表
    FROM表名列表
    WHERE限定条件
    
  • 注意:多表查询要 消除无用的数据


内连接查询

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

  • 标准格式

    SELECTt1.ename,						-- 员工表的姓名t1.gender,						-- 员工表的性别t2.dname						-- 部门表的名称
    FROMemp t1,							-- 起别名,替换表名,更加方便dept t2
    WHEREt1.dept_id = t2.did;			-- 员工表外键等于部门表的did键
    
  • 示例代码

    • 查询所有员工信息和对应的部门信息
    SELECT* 
    FROMemp e,dept d
    WHEREe.dept_id = d.did;
    
    • 查询员工表的名称、性别,部门表的名称
    SELECTt1.ename,						-- 员工表的姓名t1.gender,						-- 员工表的性别t2.dname							-- 部门表的名称
    FROMemp t1,							-- 起别名,替换表名,更加方便dept t2
    WHEREt1.dept_id = t2.did;
    
显示内连接
  • 语法

    SELECT字段列表
    FROM表名1
    [INNER] JOIN						-- 这里的 INNER 可以去掉的表名2
    ON条件;
    
  • 示例代码

    • 查询所有员工信息和对应的部门信息
    -- 方式一
    SELECT*
    FROMemp t1
    INNER JOINdept t2
    ONt1.`dept_id` = t2.`did`;		-- 员工表部门外键等于部门表主键-- 方式二
    SELECT*
    FROMemp t1
    JOIN								-- 	这里的 INNER 可以去掉的dept t2
    ONt1.`dept_id` = t2.`did`;		-- 员工表部门外键等于部门表主键
    
    • 查询所有员工姓名和所属部门信息
    SELECT t1.`ename` "员工姓名",t2.`dname` "员工部门"
    FROMemp t1
    JOIN dept t2
    ONt1.`dept_id` = t2.`did`;		-- 员工表部门外键等于部门表主键
    
注意事项
  • 内连接查询
    • 明确从哪些表中查询什么数据
    • 查询的限制条件是什么
    • 我们要查询哪些字段

外连接查询

左外连接
  • 语法

    SELECT字段列表
    FROM1
    LEFT [OUTER] JOIN						-- 左外连接2
    ON条件;
    
  • 左外连接查询什么?

    • 查询的是左表所有数据及其交集部分
  • 代码示例

    • 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
    SELECTt1.*,								-- 员工表所有信息t2.`dname`							-- 部门名称
    FROMemp t1
    LEFT OUTER JOIN							-- 左外连接dept t2
    ONt1.`dept_id`=t2.`did`;
    
    • 查询开发部员工信息
    SELECTt1.*,t2.`dname`
    FROMemp t1
    LEFT JOINdept t2
    ONt1.`dept_id`=t2.`did`
    WHERE t2.`dname`='开发部';
    
右外连接
  • 语法

    SELECT字段列表
    FROM1
    RIGHT [OUTER] JOIN						-- 右外连接2
    ON条件;
    
  • 右外连接查询什么?

    • 查询的是右表所有数据以及其交集部分
  • 代码示例

    • 查询所有员工信息,及部门信息,右表在前
    SELECT*
    FROMdept t2
    RIGHT JOINemp t1
    ONt1.`dept_id`=t2.`did`;
    

子查询

  • 概述:查询中嵌套查询,称嵌套查询为子查询
子查询单行单列
  • 概述:子查询的结果可以作为条件,使用运算符(> >= < <= <>)进行判断

  • 代码示例

    • 查询员工工资小于平均工资的人
    SELECT*
    FROMemp
    WHEREemp.`salary`<(SELECT AVG(salary) FROM emp);				-- 子查询的条件作为判断结果-- 子查询结果,单行单列的。显示 平均工资是5860
    SELECT AVG(salary) FROM emp;
    
    • 查询员工属于市场部的人
    SELECT*
    FROMemp
    WHEREemp.`dept_id`=(SELECT dept.`did` FROM dept WHERE dept.`dname`='市场部');-- 子查询结果,单行单列,显示 2
    SELECT dept.`did` FROM dept WHERE dept.`dname`='市场部';
    

    注意:如果根据需要,发现需要使用子查询,一定要看需求中子查询结果是否是单行单列

子查询多行单列
  • 概述:子查询的结果可以作为条件,使用运算符 in 进行判断

  • 示例代码

    • 查询 财务部 和 市场部 所有的员工信息
    SELECT*
    FROMemp
    WHEREemp.`dept_id` IN(SELECT did FROM dept WHERE dname IN('市场部','财务部'));-- 子查询结果,多行单列
    SELECT did FROM dept WHERE dname IN('市场部','财务部');
    
子查询多行多列
  • 概述:子查询可以作为一张虚拟表参与查询(第三张表)

  • 示例代码

    • 查询员工入职日期是2018-11-11日之后的员工信息和部门信息
    SELECT*
    FROMdept t1,(SELECT * FROM emp WHERE join_date>'2018-11-11') t2			-- 子查询多行多列
    WHEREt1.did=t2.dept_id;
    
  • 注意

    • 多表查询的时候,需要分析,查询那几个表,条件是什么即可。

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

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

相关文章

leetocode 15 三数之和

题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例…

Linux网络引导自动安装centos7

目录 一、部署PXE远程安装服务 1. 系统装机的三种引导方式 2. pxe概述 3. 实现过程 4. 搭建过程中服务介绍 4.1 TFTP服务 4.2 vsftp&#xff1a;安装系统镜像文件获取方式 4.3 syslinux 4.4 DHCP服务 5. 操作过程 二、实现Kickstart无人值守安装 1. 安装Kickstart图…

计算机三级(网络技术)——应用题

第一题 61.输出端口S0 &#xff08;直接连接&#xff09; RG的输出端口S0与RE的S1接口直接相连构成一个互联网段 对172.0.147.194和172.0.147.193 进行聚合 前三段相同&#xff0c;将第四段分别转换成二进制 11000001 11000010 前6位相同&#xff0c;加上前面三段 共30…

Spring面试题目

参考网络整理一些面试题目 1、IOC 控制反转 IoC&#xff08;Inverse of Control:控制反转&#xff09;是⼀种设计思想&#xff0c;就是将原本在程序中⼿动创建对象的控制权&#xff0c;交由Spring框架来管理。IoC 在其他语⾔中也有应⽤&#xff0c;并⾮ Spring 特有。 IoC…

AI图片物体移除器:高效、便捷的AI照片物体擦除工具

在我们的日常生活中&#xff0c;照片是一种重要的记录和表达方式。然而&#xff0c;有时候我们会遇到需要将照片中的某些物体和元素去除的情况。这时候&#xff0c;传统的图像处理软件可能过于复杂&#xff0c;让人望而却步。为了解决这个问题&#xff0c;AI图片物体移除器的软…

数据结构——用Java实现数组

一、什么是数据结构&#xff1f; 概念&#xff1a; 数据结构是一门基础的学科&#xff0c;是研究数据如何在计算机中进行组织和存储&#xff0c;使得我们可以高效的获取数据和修改数据的。 数据结构可以分为三类&#xff1a; 1.线性结构&#xff1a;数组、队列、栈、链表、…

运筹说 第104期 | 2023全球高被引科学家名单发布!

2023年11月15日&#xff0c;全球领先的专业信息服务提供商科睿唯安发布2023年度“全球高被引科学家”名单&#xff0c;遴选全球高校、研究机构和商业组织中对所在研究领域具有重大和广泛影响的顶尖科学人才。最终&#xff0c;来自全球67个国家和地区1300多个机构的6849名科学家…

第二百六十四回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverPadding组件相关的内容&#xff0c;本章回中将介绍Sliver综合示例.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在前面的章回中介绍了各种Sliver相关的组件&#xff1a;SliverList,SliverGr…

linux配置DNS主从服务器

实验设备 主服务器:OpenElur Linux IP地址为192.168.188.129 从服务器:RedHat Linux IP地址为192.168.188.128 实验步骤 1.进行主服务器的基础配置 #安装DNS对应工具 [rootlocalhost ~]# yum install bind -y#编辑DNS系统配置信息 [rootlocalhost ~]# vim /etc/named.conf…

【算法题】55. 跳跃游戏

题目 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff…

Node cool 跨域问题的解决

1.问题 自己在写后端接口的时候 发现一个接口在抖音小程序上可以调用 浏览器上也可以直接打开 但是在H5 的请求中 一直就是cors error 前端报这个跨域问题 在后端 报not Found 一开始以为是找不到 经过确定 发现是跨域问题 2.解决 在全局 configuration.ts 文件里有个全局…

申请开启|成为亚马逊云科技 Community Builder,共建云端社区!

在探索由技术打造的云端世界时&#xff0c;和同行者一起学习&#xff0c;与技术专家共同探讨是开发者成长的最佳助力&#xff01; 亚马逊云科技开发者社区 Community Builders 为技术爱好者和新兴思想领袖提供技术资源、学习和交流机会&#xff0c;帮助开发者探索、分享技术相关…

详解SpringCloud微服务技术栈:Gateway网关(断言、过滤器、跨域问题)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;Feign远程调用、最佳实践、错误排查 &#x1f4da;订阅专栏&#xff1a;微服务技术全家…

学习记录1.13

闭包&#xff1a; 可以访问外部函数的变量&#xff0c;在内层函数中访问到外层函数的作用域. 她可以创建私有变量&#xff0c;延长变量的生命周期。 function father() { Var name “baiyun”; function son() { Console.log(name,”name”); } son() } father(); 柯里…

用springboot mybatis写一个增删改查

首先&#xff0c;在pom.xml文件中添加Spring Boot、MyBatis和MySQL的相关依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency&g…

PuTTY的ppk密钥与OpenSSH密钥之间的相互转换

几个概念说明&#xff1a;id_rsa、id_rsa.pub、ppk、pem 目前有两个主流的密钥格式&#xff1a;OpenSSH格式的密钥 和 PuTTY格式的密钥。 id_rsa和id_rsa.pub 都是OpenSSH格式的密钥。 id_rsa是OpenSSH格式的SSH私钥。 id_rsa.pub是OpenSSH格式的SSH公钥。ppk文件 ppk文件是P…

c++基础2

一、c的引用 引用和指针的的区别&#xff1f; 引用是一种更安全的指针&#xff1a; 1. 引用必须初始化&#xff0c;指针可以不用初始化 int a 10; int *p; // 指针可能是野指针 int &b a;//引用赋值"&#xff0c;通常指的是直接修改引用所引用的对象的值&#xff0…

【每日随笔】远离美女 ② ( 各个时代的择偶需求 | 美女的社交溢价 | 颜值保质期 )

文章目录 一、各个时代的择偶需求1、原始社会择偶需求2、古代社会择偶需求3、现代社会择偶需求 二、美女的社交溢价与颜值保质期1、美女的社交溢价2、颜值保质期 一、各个时代的择偶需求 1、原始社会择偶需求 在之前提到过 , 美女 基因稳定 , 原始社会 婴儿 夭折率太高 , 只有…

JavaScript之视频相关API

目录 一、视频标签基本API1. play(开始)2.muted(静音)3. pause(暂停)4. volume(声音控制)5. webkitRequestFullScreen(全屏) 二、视频标签进度条API1. 总时间API&#xff08;duration&#xff09;2.当前时间API&#xff08;currentTime&#xff09; 二、进度条拉动效果 一、视频…