2、数据库操作语句:多表查询(表employ、department、location)

news2025/1/16 18:47:46

目录

1、多表查询连接条件

1)在employ、department两张表中查询

2)若查询语句中出现了多个表中都存在的字段,必须指明此字段所在的表。

3)如果表名比较长,SQL语句中多次使用表名,可以给表起别名,在select和where中使用表的别名

2、多表查询分类:等值连接VS非等值连接、自连接VS非自连接、内连接VS外连接

1)等值连接VS非等值连接

①非等值连接

2)自连接VS非自连接

①自连接:表本身自我引用

3)内连接VS外连接

①内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行

②外连接:两个表在连接过程中除了返回满足连接条件的行外,还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。没有匹配的行时,结果表中相应的列为空(null)

③外连接分为:左外连接、右外链接和满外连接

3、合并查询结果集:利用关键词UNION关键字,可以给出多条select语句,并将它们结果组成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并互相对应。各个select语句之间使用UNION或UBNION ALL关键字分割。

4、七种JOIN的实现:集合A、B

1)查询A、B的交集(属于内连接)

2)查询A、B的左外连接

3)查询A、B的右外连接

4)左中图实现

5)右中图实现

6)左下图实现(满外连接)

7)右下图:左中图union all右中图

5、SQL99语法的新特性

1)自然连接:它会自动查询两张连接表中所有相同字段,然后进行等值连接

2)using:指定具体的相同的字段名称,using的括号()中填入要指定的同名字段


1、多表查询连接条件

1)在employdepartment两张表中查询

Select employ_id,department_name from employ,department where employ.‘department_id’=department.department_id;(连接条件,多个连接条件使用and)

department_idnull的无法查询)

//查询表employdepartment,显示员工的id以及所在部门名称

2)若查询语句中出现了多个表中都存在的字段,必须指明此字段所在的表。

①条件:employdepartment表中都有department_id字段

Select employ_id,department_name,employ.department_id from employ,department where employ.‘department_id’=department.department_id;

建议:从SQL优化角度(减少查询时间),建议多表查询时,每个字段前指明其所在的表。举例:

Select employ.employ_id,department.department_name,employ.department_id from employ,department where employ.‘department_id’=department.department_id;

3)如果表名比较长,SQL语句中多次使用表名,可以给表起别名,在selectwhere中使用表的别名

Select emp.employ_id,dept.department_name,emp.department_id from employ emp,department dept where emp.‘department_id’=dept.department_id;

注意:如果给表起了别名,一旦在selectwhere中使用表名的话,则必须使用表的别名,而不能在使用表的原名;因为MYSQL限制性From语句,表的别名已经把表的原名覆盖

结论:n个表至少有n-1个连接条件

2、多表查询分类:等值连接VS非等值连接、自连接VS非自连接、内连接VS外连接

1)等值连接VS非等值连接

①非等值连接

Select *from job_gardes

查询结果:

Select e.list_name,e.salary,j.gardes_level from employ e,job_gardes j Where  e.’salary’ between j.’lowest_sal’ and  j.’highest_sal’;

(where e.’salary’>=j.’lowest_sal’ and  e.’salary <=j.’highest_sal’;)

查询结果:

2)自连接VS非自连接

①自连接:表本身自我引用

练习:查询员工id、姓名及管理者的id、姓名

Select emp.employ_idemp.last_namemgr.employ_id, mgr.last_name from employ empemploy mgr where emp.‘manager_id’=mgr.‘employ_id’

3)内连接VS外连接

①内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行

例如:

Select employ_id,department_name from employ,department where employ.‘department_id’=department.department_id;(一共107条记录,只查出来106条记录,有一条空记录没有查出来)

②外连接:两个表在连接过程中除了返回满足连接条件的行外,还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。没有匹配的行时,结果表中相应的列为空(null

③外连接分为:左外连接、右外链接和满外连接

        左外连接:连接条件中左边的表称为主表,右边的表称为从表

        右外连接:链接条件中右边的表称为主表,左边的表称为从表

例如:查询所有的员工的employ_id,deprtment_name信息(使用左外连接)

Sql92语法实现内连接:

Select employ_id,department_name from employ,department where employ.‘department_id’=department.department_id;

Sql92语法实现外连接:使用+   ————————  mysql不支持SQL92语法中外连接的写法

Select employ_id,department_name from employ,department where employ.’department_id’=department.department_id+;

Sql99语法中使用(inner-内或outer-外)JOIN……ON的方式实现多表的查询,这种方式能够解决外连接的问题,同时mysql也支持

Sql99语法实现内连接:

例如两张表:Select employ_id,department_name from employ e inner join department d on e.‘department_id’=d.department_id;

例如三张表:Select employ_id,department_namecity from employ e  inner join department d on e.‘department_id’=d.department_id join locations l on d.‘locations_id’=l.‘locations_id’

Sql99语法实现外连接:

左外连接:

Select employ_id,department_name from employ e left outerjoin department d on e.'department_id'=d.department_id;

右外连接

Select employ_id,department_name from employ e right outerjoin department d on e.'department_id'=d.department_id;

满外连接:mysql不支持full outer join ……on

3、合并查询结果集:利用关键词UNION关键字,可以给出多条select语句,并将它们结果组成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并互相对应。各个select语句之间使用UNIONUBNION ALL关键字分割。

1)UNION关键字:返回两个查询结果集的并集,并去除重复记录

2)UNION ALL关键字:返回两个查询结果集的并集,并不去除重复记录

注意:执行UNION ALL语句时所需要的资源比UNION语句少。如果明确知道合并数据后的结果不存在重复数据,或者不需要去除重复数据,则尽量使用UNION ALL语句,以提高数据查询效率。 

4、七种JOIN的实现:集合AB

1)查询AB的交集(属于内连接)

Select employee_id,department_name from employees e join departments d on e.‘department_id’=d.‘department_id’;

2)查询AB的左外连接

Select employee_id,department_name from employees e left join departments d on e.‘department_id’=d.‘department_id’;

3)查询AB的右外连接

Select employee_id,department_name from employees e right join departments d on e.‘department_id’=d.‘department_id’;

4)左中图实现

Select employee_id,department_name from employees e left join departments d on e.‘department_id’=d.‘department_id’ where d.‘department_id’ is null;

5)右中图实现

Select employee_id,department_name from employees e right join departments d on e.‘department_id’=d.‘department_id’ where d.‘department_id’ is null;

6)左下图实现(满外连接)

方法一:左上图union all 右中图

Select employee_id,department_name from employees e left join departments d on e.‘department_id’=d.‘department_id’ union all select employee_id ,department_name from employees e right join departments d on e.‘department_id’=d.‘department_id’ where e.‘department_id’ is null;

方法二:左中图union all右上图

Select emplotee_id,department_name from employees e left join department d on e.‘department_id’=d.‘department_id’ where d.‘department_id’ is null union all select employee_id,department_name from employees e right join department d on e.‘department_id’=d.‘department_id’

7)右下图:左中图union all右中图

Select employee_id,department_name from employees e left join departments d on e.‘department_id’=d.‘department_id’ where d.‘department_id’ is null union all Select employee_id,department_name from employees e right join departments d on e.‘department_id’=d.‘department_id’ where d.‘department_id’ is null;

5、SQL99语法的新特性

1)自然连接:它会自动查询两张连接表中所有相同字段,然后进行等值连接

传统写法:Select employee_id,department_id from employees e join departments d on e.‘department’=d.‘department_id’ and e.‘manager_id’=d.‘manager_id’;

自然连接写法:Select employee_id,department_id from employees e nature join departments d;

2)using:指定具体的相同的字段名称,using的括号()中填入要指定的同名字段

传统写法:Select employee_id,department_id from employees e join departments d on e.‘department’=d.‘department_id’ and e.‘manager_id’=d.‘manager_id’;

using写法: Select employee_id,department_id from employees e join departments d on using(department_id);

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

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

相关文章

chatgpt赋能python:Python实现Fibonacci数列

Python实现Fibonacci数列 Fibonacci数列是一个非常经典的数列&#xff0c;定义如下&#xff1a; F ( 0 ) 0 , F ( 1 ) 1 F(0)0, F(1)1 F(0)0,F(1)1 F ( n ) F ( n − 1 ) F ( n − 2 ) F(n)F(n-1)F(n-2) F(n)F(n−1)F(n−2) 也就是说&#xff0c;第n个数等于前两个数之和…

开环模块化多电平换流器仿真(MMC)N=6

模型简介&#xff1a; 运行环境MATLAB2021a 开环模块化多电平换流器仿真&#xff08;MMC&#xff09;N&#xff1d;6&#xff0c;连接负载&#xff0c;采用载波移相调制。 可以得到换流器输出N&#xff0b;1&#xff1d;7电平的相电压波形。可考虑线路阻抗。 子模块采用半桥结…

chatgpt赋能python:用Python实现网络工具——Ping

用Python实现网络工具——Ping 网络是现代社会不可或缺的一部分&#xff0c;而网络工具也是每个程序员的必备技能之一。其中&#xff0c;Ping是最常用的网络工具之一&#xff0c;主要用于测试两台计算机之间的网络连接质量。今天&#xff0c;我们将着重讨论如何用Python实现Pi…

【初识C语言(5)】C语言关键字+define定义常量和宏

文章目录 1. 常见关键字2. 关键字 typedef3. 关键字 static3.1 修饰局部变量3.2 修饰全局变量3.3 修饰函数 4. define 定义常量和宏 1. 常见关键字 C语言提供了丰富的关键字&#xff0c;这些关键字都是语言本身预先设定好的&#xff0c;用户自己是不能创造关键字的。 这里先主要…

SD/StableDiffusion模型,ai绘画部署教程,谷歌云端零成本部署,支持中文

目录 前言 准备前提 说明 开始搭建 1、第一步&#xff0c;下载ipynb脚本文件 2、第二步&#xff0c;上传一键脚本文件到谷歌云盘 3、选择该.ipynb文件--右键--打开方式--关联更多应用 4、输入框搜索Colaboratory找到该应用&#xff0c;安装 5、安装过程中&#xff0c;…

chatgpt赋能python:Python的pow()函数-实现快速幂运算

Python的pow()函数 - 实现快速幂运算 Python是一门高级编程语言&#xff0c;具有简单易学、功能强大、代码可读性高等特点。在Python的内置函数中&#xff0c;有一个很有用的函数叫做pow()。pow()函数可以对数字进行快速幂运算&#xff0c;其实现方法很简单&#xff0c;但是在…

chatgpt赋能python:Python画轨迹图:认识、用法与优势

Python画轨迹图: 认识、用法与优势 Python的数据可视化能力十分强大。画图工具虽然千千万&#xff0c;但其中&#xff0c;轨迹图是同时准确又美观的图形表现。本文将向读者介绍Python画轨迹图的好处、如何使用以及如何在项目合适的地方使用轨迹图。 了解Python轨迹图 为了更…

chatgpt赋能python:Python绘制波浪线教程

Python绘制波浪线教程 Python是一种高级编程语言&#xff0c;它广泛应用于各种领域&#xff0c;如数据分析、Web开发、自动化操作以及人工智能等等。在这篇文章中&#xff0c;我们将介绍如何使用Python来绘制漂亮的波浪线。 简介 绘制波浪线是一种在艺术设计、信息图表、数据…

MySQL压测实战

写作目的 最近看到一句话是MySQL的TPS是4000&#xff0c;这句话是不严谨的&#xff0c;因为没有说服务器的配置。所以自己买了个服务器做了一个压测。希望自己对数据有一个概念。 注意&#xff1a;服务器不同结果不同&#xff0c;结果不具有普适性。 服务器配置 配置参数CPU…

MySQL数据库操作篇2(表的增删查改约束)

在数据类型那篇文章里&#xff0c;笔者曾经提到过约束条件&#xff0c;但也只是简单的提了提&#xff0c;并没有展开来说&#xff0c;约束条件是MySQL为确保数据正确性&#xff0c;安全性&#xff0c;以及倒逼程序员规范操作的一大利器&#xff0c;这篇文章笔者详细谈谈有哪些约…

0019-TIPS-2019-tokyowesterns-gnote : switch(jump) Doubule Fetch

漏洞源码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/proc_fs.h> #include <linux/string.h> #include <linux/slab.h> #include <asm/uaccess.h>…

chatgpt赋能python:Python绘制车辆轨迹图

Python绘制车辆轨迹图 在现代交通中&#xff0c;车辆轨迹图是一个广泛应用的技术&#xff0c;它可以被用于道路交通管理&#xff0c;行车安全评估等领域。Python是一种强大的编程语言&#xff0c;它提供了许多绘制数据可视化图表的库。本文将介绍如何使用Python和Matplotlib库…

10.事务消息

4.6 事务消息 4.6.1 流程分析 上图说明了事务消息的大致方案&#xff0c;其中分为两个流程&#xff1a;正常事务消息的发送及提交、事务消息的补偿流程。 1)事务消息发送及提交 (1) 发送消息(half消息)。 (2) 服务端响应消息写入结果。 (3) 根据发送结果执行本地事务(如果写入失…

Golang -> Go 语言快速开发入门

Go 语言快速开发入门 开发一个 hello.go 程序Golang 执行流程分析两种执行流程的方式区别:编译和运行说明 Go 程序开发的注意事项注释行注释多行注释 开发一个 hello.go 程序 package mainimport "fmt"func main() {fmt.Print("hello") }输出: hello对上图…

Cesium 入门

文章目录 一、了解 Cesium二、创建第一个 Cesium 地球三、案例1. Cesium 查看器、场景、实体、数据源介绍2. Cesium 的坐标与转换3. Cesium 相机系统方法一&#xff1a;setView方法二&#xff1a;flyTo方法三&#xff1a;lookAt方法四&#xff1a; viewBoundingSphere 四、案例…

【Leetcode60天带刷】day27回溯算法——39. 组合总和,40.组合总和II,131.分割回文串

​ 题目&#xff1a; 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一…

Redis 实战:逐步指南,让你轻松在 Linux 上安装与部署

目录 前言为什么会出现 Redis&#xff1f;磁盘、内存数据库缓存中间件 安装Redis5Redis6 使用总结 前言 Redis 中文网站&#xff1a;http://redis.cn/ Redis 是一个开源&#xff08;BSD 许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库…

【编译、链接、装载十二】动态链接2

【编译、链接、装载十二】动态链接2 四、延迟绑定&#xff08;PLT&#xff09;五、动态链接相关结构1 “.interp”段2 “.dynamic”段3 .动态符号表——dynsym、动态符号字符串表——.dynstr4、动态链接重定位表 六、动态链接的步骤和实现1、动态链接器自举2、装载共享对象3、重…

2.10 高性能异步IO机制:io_uring

一、io_uring的引入 为了方便说明io_uring的作用&#xff0c;先举一个通俗点的例子 1、通过异步提高读写的效率 假设有一批数量很大的货&#xff0c;需要分批次运到厂里处理。这个时候就有两种方式&#xff1a; 1&#xff09;同步方式&#xff1a;运送一批到厂里&#xff0c…

TypeScript ~ TS 掌握编译文件配置项 ④

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…