MySQL——连接查询

news2025/7/15 3:40:11

2023.9.4

        连接查询相关sql92语句笔记:

#连接查询。 又称多表查询,当查询的字段来自多个表时,就会用到连接查询。
#等值连接
/*
①多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③多表的顺序没有要求
④一般需要为表起别名
⑤可以搭配前面的子句使用,如:排序、分组、筛选
*/
#找女神对应的男神名
SELECT NAME,boyName FROM `beauty`,`boys` WHERE `beauty`.`boyfriend_id`=`boys`.`id`;
#查询员工名和对应的部门名
SELECT `last_name`,`department_name` FROM `employees`,`departments` WHERE `employees`.`department_id`=`departments`.`department_id`;
#查询员工名,工种号,工种名
SELECT `last_name`,`jobs`.`job_id`,`job_title` FROM `employees`,`jobs` WHERE `employees`.`job_id`=`jobs`.`job_id`;
#查询有奖金的员工名、部门名
SELECT `last_name`,`department_name` FROM `employees`,`departments` WHERE `employees`.`department_id`=`departments`.`department_id` AND `employees`.`commission_pct` IS NOT NULL;
#查询城市名中第二个字符为o的部门名和城市名
SELECT `department_name`,`city` FROM `departments`,`locations` WHERE `departments`.`location_id`=`locations`.`location_id` AND `locations`.`city` LIKE '_o%';
#查询每个城市的部门个数
 SELECT COUNT(*),`city` FROM `departments`,`locations` WHERE `departments`.`location_id`=`locations`.`location_id` GROUP BY `city`;
#查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
SELECT `department_name`,`departments`.`manager_id`,MIN(salary) FROM `departments`,`employees` WHERE `departments`.`department_id`=`employees`.`department_id` AND `commission_pct` IS NOT NULL GROUP BY `department_name`,`departments`.`manager_id`;
#查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT `job_title`,COUNT(*) FROM `jobs`,`employees` WHERE `jobs`.`job_id`=`employees`.`job_id` GROUP BY `job_title` ORDER BY COUNT(*) DESC;
#查询员工名、部门名和所在的城市
SELECT `last_name`,`department_name`,`city` FROM `employees`,`departments`,`locations` WHERE `employees`.`department_id`=`departments`.`department_id` AND `departments`.`location_id`=`locations`.`location_id`
#内连接 之 非等值连接
#查询员工的工资和工资级别
SELECT salary,`grade_level`
FROM `employees`,`job_grades`
WHERE salary BETWEEN `job_grades`.`lowest_sal` AND `job_grades`.`highest_sal`;     
#内连接 之 自连接
#查询员工名和上级的名称
SELECT e.`employee_id`,e.`last_name`,m.`employee_id`,m.`last_name`
FROM `employees` AS e,`employees` AS m
WHERE e.`employee_id`=m.`manager_id`;

连接查询sql92课后习题:

#1.显示所有员工的姓名,部门号和部门名称。
SELECT e.`last_name`,e.`department_id`,d.`department_name`
FROM `employees` e,`departments` d
WHERE e.`department_id`=d.`department_id`;
#2.查询90号部门员工的job_id和90号部门的location_id
SELECT `job_id`,`location_id`
FROM `employees` e,`departments` d
WHERE e.`department_id`=d.`department_id`
AND e.`department_id`=90;
#3.选择所有有奖金的员工的last_name , department_name , location_id , city
SELECT e.`last_name`,d.`department_name`,l.`location_id`,l.`city`
FROM `employees` e,`departments` d,`locations` l
WHERE e.`department_id`=d.`department_id`
AND d.`location_id`=l.`location_id`
AND e.`commission_pct` IS NOT NULL;
#4.选择city在Toronto工作的员工的last_name , job_id , department_id , department_name 
SELECT e.last_name , e.job_id , d.department_id , d.department_name,l.city
FROM `employees` e,`departments` d,`locations` l
WHERE e.`department_id`=d.`department_id`
AND d.`location_id`=l.`location_id`
AND l.`city`='Toronto';
#5.查询每个工种、每个部门的部门名、工种名和最低工资
SELECT `department_name`,`job_id`,MIN(salary)
FROM `employees` e,`departments` d
WHERE e.`department_id`=d.`department_id`
GROUP BY `job_id`,`department_name`;
#6.查询每个国家下的部门个数大于2的国家编号
SELECT `country_id`,COUNT(*) 部门个数
FROM `locations` l,`departments` d
WHERE d.`location_id`=l.`location_id`
GROUP BY `country_id`
HAVING COUNT(*)>2;
#7、选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式
#employees	Emp#	manager	Mgr#
#kochhar		101	king	100
SELECT e.`last_name` employees,e.`employee_id` 'Emp#',m.`last_name` manager,m.`employee_id` 'Mgr#'
FROM `employees` e,`employees` m
WHERE e.`manager_id`=m.`employee_id`
AND e.`last_name`='kochhar';

 sql99语法的连接查询相关笔记:

#sql92 vs sql99
/*
功能:sql99支持的较多
可读性:sql99实现连接条件和筛选条件的分离,可读性较高
*/

sql99语法
/*
语法:
	select 查询列表
	from 表1 别名 【连接类型】
	join 表2 别名 
	on 连接条件
	【where 筛选条件】
	【group by 分组】
	【having 筛选条件】
	【order by 排序列表】
	

分类:
内连接(★):inner
外连接
	左外(★):left 【outer】
	右外(★):right 【outer】
	全外:full【outer】
交叉连接:cross 

*/


#一、内连接
/*
语法:

select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件;

分类:
等值
非等值
自连接

特点:
①添加排序、分组、筛选
②inner可以省略
③ 筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
④inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
*/

#1、等值连接
#案例1.查询员工名、部门名
SELECT `last_name`,`department_name`
FROM `employees` e
INNER JOIN `departments` d
ON e.`department_id`=d.`department_id`
#案例2.查询名字中包含e的员工名和工种名(添加筛选)
SELECT `last_name`,`job_title`
FROM `employees` e
INNER JOIN `jobs` j
ON e.`job_id`=j.`job_id`
WHERE e.`last_name` LIKE '%e%'
#3. 查询部门个数>3的城市名和部门个数,(添加分组+筛选)
SELECT `city`,COUNT(*) 部门个数
FROM `departments` d
INNER JOIN locations l
ON d.`location_id`=l.`location_id`
GROUP BY city
HAVING COUNT(*)>3;
#案例4.查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)
SELECT `department_name`,COUNT(*)
FROM `employees` e
INNER JOIN `departments` d
ON e.`department_id`=d.`department_id`
GROUP BY `department_name`
HAVING COUNT(*)>3
ORDER BY COUNT(*) DESC;
#5.查询员工名、部门名、工种名,并按部门名降序(添加三表连接)
SELECT `last_name`,`job_title`,`department_name`
FROM `employees` e
INNER JOIN `jobs` j ON e.`job_id`=j.`job_id`
INNER JOIN `departments` d ON d.`department_id`=e.`department_id`
ORDER BY `department_name` DESC;

#2、非等值连接
#查询员工的工资级别
SELECT salary,`grade_level`
FROM `employees` e
JOIN `job_grades` j
ON e.`salary` BETWEEN j.`lowest_sal` AND j.`highest_sal`;
#查询工资级别的个数>20的个数,并且按工资级别降序
SELECT COUNT(*),`grade_level`
FROM `employees` e
JOIN `job_grades` j
ON e.`salary` BETWEEN j.`lowest_sal` AND j.`highest_sal`
GROUP BY `grade_level`
HAVING COUNT(*)>20
ORDER BY `grade_level` DESC;

#3、自连接
#查询员工的名字、上级的名字
SELECT e.`last_name` 员工,m.`last_name` 上级
FROM `employees` e
JOIN `employees` m
ON  e.`manager_id`=m.`employee_id`;
#查询姓名中包含字符k的员工的名字、上级的名字
SELECT e.`last_name` 员工,m.`last_name` 上级
FROM `employees` e
JOIN `employees` m
ON  e.`manager_id`=m.`employee_id`
WHERE e.`last_name` LIKE '%k%'
AND m.`last_name` LIKE '%k%';

#二、外连接
 /*
 应用场景:用于查询一个表中有,另一个表没有的记录
 
 特点:
 1、外连接的查询结果为主表中的所有记录
	如果从表中有和它匹配的,则显示匹配的值
	如果从表中没有和它匹配的,则显示null
	外连接查询结果=内连接结果+主表中有而从表没有的记录
 2、左外连接,left join左边的是主表
    右外连接,right join右边的是主表
 3、左外和右外交换两个表的顺序,可以实现同样的效果 
 4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
 */

#引入:查询男朋友 不在男神表的的女神名
# 左外
SELECT b.name,bo.*
FROM `beauty` b
LEFT OUTER JOIN  `boys` bo
ON b.`boyfriend_id`=bo.`id`
WHERE bo.`id` IS NOT NULL;
# 右外
SELECT b.name,bo.*
FROM `boys` bo
LEFT OUTER JOIN  `beauty` b
ON b.`boyfriend_id`=bo.`id`
WHERE bo.`id` IS NOT NULL;

 
#案例1:查询哪个部门没有员工
SELECT `department_name`,`employee_id`
FROM `departments` d
LEFT OUTER JOIN `employees` e
ON d.`department_id` = e.`department_id`
WHERE e.`employee_id` IS NULL;

#全外连接语法如下  (MySQL不支持)
USE girls;
SELECT b.*,bo.*
FROM beauty b
FULL OUTER JOIN boys bo
ON b.`boyfriend_id` = bo.id;

#交叉连接
SELECT b.*,bo.*
FROM beauty b
CROSS JOIN boys bo;

课后习题 :

#课后习题
#一、查询编号>3的女神的男朋友信息,如果有则列出详细,如果没有,用null填充
SELECT b.`name`,bo.*
FROM `beauty` b
LEFT OUTER JOIN `boys` bo
ON b.`boyfriend_id` = bo.`id`
WHERE b.`id`>3;
#二、查询哪个城市没有部门
SELECT `city`
FROM `locations` l
LEFT OUTER JOIN `departments` d
ON l.`location_id` = d.`location_id`
WHERE d.`department_id` IS NULL;
#三、查询部门名为SAL或IT的员工信息
# 这题我用的内连接,尚硅谷老师用的外连接。
# 外连接会比内连接多两条数据,但这两条数据全是null值。
# 原因是名为‘IT’的部门对应的id有两个没有员工存在。但个人认为内连接更符合题目要求。

#内连接做法
SELECT e.*
FROM `employees` e
JOIN `departments` d
ON e.`department_id` = d.`department_id`
WHERE d.`department_name`='SAL'
OR d.`department_name`='IT';
#外连接做法
SELECT e.*,d.department_name,d.`department_id`
FROM departments  d
LEFT JOIN employees e
ON d.`department_id` = e.`department_id`
WHERE d.`department_name` IN('SAL','IT');

        用尚硅谷的两张图总结一下本章:图一左上是左外连接,右上是右外连接,中间是内连接;

图二左上是左外连接+条件,右上是右外连接+条件,左下是全外连接,右下是全外连接+条件。 

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

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

相关文章

CesiumsJS加载本地离线瓦片影像地图

1.下载并安装91卫图(免费版就可以用) 2.打开软件,从左测选择某个区域,,在地图区双击蓝色区域,开始下载 3.选择影像等级,在【导出设置】中选择导出方式为【导出TMS瓦片】,保存格式为JPEG,坐标投影为【WGS84坐…

激光切割机在现代灯具的生产过程中的应用

灯饰在现代家庭装修中承担着举足轻重的角色,随着人类生活水平的提升,对家居用品的要求愈发严格,作为家庭装饰的必备品,灯饰从满足功能性需求转向追求个性化定制需求。 金属本身具有独特的质感,与个性化激光图案相结合&…

自然语言处理学习笔记(八)———— 准确率

目录 1.准确率定义 2.混淆矩阵与TP/FN/FP/TN 3. 精确率 4.召回率 5.F1值 6.中文分词的P、R、F1计算 7.实现 1.准确率定义 准确率是用来衡量一个系统的准确程度的值,可以理解为一系列评测指标。当预测与答案的数量相等时,准确率指的是系统做出正确判…

Flutter 通过BottomSheetDialog实现抖音打开评论区,内容自动上推、缩放效果

一、先来看下实现的效果 实现上面的效果需要解决俩个问题 当列表进行向下滑动到顶部的时候,继续滑动可以让弹窗向下收起来弹出上下拖动的时候,视图内容跟着上下移动、缩放大小二、实现弹窗上下滑动的时候,动态改变内容区的位置和大小 通过showModalBottomSheet显示底部对话框…

手写签名到背景上合为1张图

手写签名到背景上合为1张图 package.json中 "signature_pad": "3.0.0-beta.3"<template><div class"home"><canvas id"canvas" width"500" height"300"></canvas><button click"…

2.安装opencv报错及解决方法

目录 报错1&#xff1a;anaconda-lab命令不是内部外部指令 报错2&#xff1a; 找不到opencv模块,ModuleNotFoundError: No module named cv2 报错3&#xff1a;python版本号不匹配&#xff0c;Could not find a version that satisfies the requirement 报错1&#xff1a;anac…

我的创作纪念日—谈谈我的学习经历

引言 在这段时间里&#xff0c;我创作了一系列关于Java编程的博客文章。通过这个过程&#xff0c;我不仅增加了对Java编程的理解&#xff0c;还提高了我的博客创作技能。在本文中&#xff0c;我想分享一些我在博客创作过程中学到的心得体会和经验 机缘与巧合 其实很早我就有写笔…

Macs Fan Control 1.5.16 Pro for mac风扇调节软件

Macs Fan Control是一款专门为 Mac 用户设计的软件&#xff0c;它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度&#xff0c;以提高设备的散热效果&#xff0c;减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温度和…

浅谈推进农业水价综合改革的意见解读

摘 要&#xff1a;农业是用水大户&#xff0c;也是节水潜力所在。在我国水资源短缺的背景下&#xff0c;推进农业水价综合改革&#xff0c;建立促使水资源节约的价格政策和准确计量收费机制是农业节水的必然要求&#xff0c;设计一套农田灌溉计量收费管理系统&#xff0c;对改良…

【计算机基础知识8】深入理解OSI七层模型

目录 一、前言 二、OSI七层模型概述 三、第一层&#xff1a;物理层 四、第二层&#xff1a;数据链路层 五、第三层&#xff1a;网络层 六、第四层&#xff1a;传输层 七、第五层&#xff1a;会话层 八、第六层&#xff1a;表示层 九、第七层&#xff1a;应用层 十、O…

公式trick备忘录

增大不同class feature之间的距离用hinge loss 相关&#xff0c; similarity learning, svm https://www.youtube.com/watch?vQtAYgtBnhws https://www.youtube.com/watch?vbM4_AstaBZo&t286s

Achronix与您相约“2023全球AI芯片峰会”

2023全球AI芯片峰会&#xff08;GACS 2023&#xff09;将于9月14-15日在深圳市深圳湾万丽酒店举行。峰会由智一科技旗下芯东西联合智猩猩&#xff08;智东西公开课全新品牌&#xff09;联合发起主办&#xff0c;以「AI大时代 逐鹿芯世界」为主题。 届时&#xff0c;Achronix将…

手把手教程:Deepin 23安装GitLab CE

一、安装GitLab 1.1 准备 系统我选择深度Deepin 23&#xff1a; Index of /releases/23-Beta/https://cdimage.deepin.com/releases/23-Beta/ 注意&#xff1a;Deepin 20.9安装GitLab CE 16.3会报错 GitLab CE选择当前最新版本&#xff1a; gitlab/gitlab-ce …

基因融合与癌症研究gene fusions in cancer

基因融合与癌症研究简历史(截止到2015年) Major discoveries from research on gene fusions and cancer 主要肿瘤亚型涉及的基因融合数量 Number of gene fusions involved in major neoplasia subtypes 恶性疾病中基因融合相关FDA批准药物 FDA-approved drugs targeting…

freeswitch sofia协议栈调试

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 fs内部使用sofia的sip协议栈&#xff0c;本文介绍如何调试跟踪sofia协议栈。 环境 centos&#xff1a;CentOS release 7.0 (Final)或以上版本 freeswitch&#xff1a;v1.10.7 GCC&#xff1a;4.8.5 调试接口 sof…

linux使用stress命令进行压力测试cpu

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

看!亚马逊测评的隐藏宝藏!

亚马逊测评对卖家的优势显著&#xff0c;然而&#xff0c;许多卖家仍仅仅将测评理解为增加销售数量及对产品订单的简要评价。然而&#xff0c;运营高手已将其视为关键的运营工具。 亚马逊测评的功能不仅限于提高销售数量和生成正面评价。它还包括进行QA、点赞、Rating和Feedba…

怎么把pdf合并成一个pdf?认准这几个合并方法

怎么把pdf合并成一个pdf&#xff1f;在许多工作场合&#xff0c;我们需要处理大量的PDF文件。有时&#xff0c;我们需要将这些文件合并成一个文件&#xff0c;以便更好地管理和查看它们。这样可以避免我们在查找特定文件时需要浏览多个文件夹&#xff0c;从而节省时间和提高工作…

spring的事务隔离级别

一&#xff0c;spring支持的常用数据库事务传播属性和事务隔离级别 事务的传播行为&#xff1a;一个方法在运行了一个开启事务的方法中时&#xff0c;当前方法是使用原来的事务还是开启一个新的事务。 事务传播的行为有传播属性指定&#xff0c;Spring定义了7中类传播行为&…

LAN9252芯片控制资料

一&#xff0c;整个ethercat项目开发流程 通过STM32相关学习板&#xff0c;理解EtherCAT协议栈和通信步骤。根据项目需求构建XML&#xff0c;该XML将会由TwinCAT2解析&#xff0c;将相关特STM32程序烧写&#xff0c;修改应用层协议的程序。STM32作为SPI主模式与ZYNQ LAN9252进行…