mysql基础教程四 --连接查询

MySQL—连接查询、子查询 什么是笛卡尔积?笛卡尔积,又叫cross join,是SQL中两表连接的一种方式。假如A表中的数据为m行,B表中的数据有n行,那么A和B做笛卡尔积,结果为m*n行需求:查询所有的员工和所有部门结果如下:如果左表是部门表,右表是员工表,左表中每一行记录与右表中的每一行记录全都匹配一次。结果的行数=左表中行数x右表中行数。 阅读详情

/*
含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行

发生原因:没有有效的连接条件
如何避免:添加有效的连接条件

分类:

按年代分类:
sql92标准: mysql  仅仅支持内连接
sql99标准【推荐】:mysql  支持内连接+外连接(左外和右外)+交叉连接

按功能分类:
	内连接:
		等值连接
		非等值连接
		自连接
	外连接:
		左外连接
		右外连接
		全外连接
	
	交叉连接

*/

SELECT * FROM beauty;

SELECT * FROM boys;


SELECT NAME,boyName FROM boys,beauty
WHERE beauty.boyfriend_id= boys.id;

#一、sql92标准
#1、等值连接
/*

① 多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③ 多表的顺序没有要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

*/

#案例1:查询女神名和对应的男神名

SELECT NAME,boyName 
FROM boys,beauty
WHERE beauty.boyfriend_id= boys.id;

#案例2:查询员工名和对应的部门名

SELECT last_name,department_name
FROM employees,departments
WHERE employees.`department_id`=departments.`department_id`;

#2、为表起别名
/*
①提高语句的简洁度
②区分多个重名的字段

注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定

*/
#查询员工名、工种号、工种名

SELECT e.last_name,e.job_id,j.job_title
FROM employees  e,jobs j
WHERE e.`job_id`=j.`job_id`;

3、两个表的顺序是否可以调换(结果:可以调换)

#查询员工名、工种号、工种名

SELECT e.last_name,e.job_id,j.job_title
FROM jobs j,employees e
WHERE e.`job_id`=j.`job_id`;

4、可以加筛选

#案例:查询有奖金的员工名、部门名

SELECT last_name,department_name,commission_pct

FROM employees e,departments d
WHERE e.`department_id`=d.`department_id`
AND e.`commission_pct` IS NOT NULL;

#案例2:查询城市名中第二个字符为o的部门名和城市名

SELECT department_name,city
FROM departments d,locations l
WHERE d.`location_id` = l.`location_id`
AND city LIKE '_o%';

#5、可以加分组

#案例1:查询每个城市的部门个数

SELECT COUNT(*) 个数,city
FROM departments d,locations l
WHERE d.`location_id`=l.`location_id`
GROUP BY city;

#案例2:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资

SELECT department_name,d.`manager_id`,MIN(salary)
FROM departments d,employees e
WHERE d.`department_id`=e.`department_id`
AND commission_pct IS NOT NULL
GROUP BY department_name,d.`manager_id`;

#6、可以加排序

#案例:查询每个工种的工种名和员工的个数,并且按员工个数降序

SELECT job_title,COUNT(*)
FROM employees e,jobs j
WHERE e.`job_id`=j.`job_id`
GROUP BY job_title
ORDER BY COUNT(*) DESC;

#7、可以实现三表连接?

#案例:查询员工名、部门名和所在的城市

SELECT last_name,department_name,city
FROM employees e,departments d,locations l
WHERE e.`department_id`=d.`department_id`
AND d.`location_id`=l.`location_id`
AND city LIKE 's%'

ORDER BY department_name DESC;

#2、非等值连接

#案例1:查询员工的工资和工资级别

SELECT salary,grade_level
FROM employees e,job_grades g
WHERE salary BETWEEN g.`lowest_sal` AND g.`highest_sal`
AND g.`grade_level`='A';

/*
select salary,employee_id from employees;
select * from job_grades;
CREATE TABLE job_grades
(grade_level VARCHAR(3),
 lowest_sal  int,
 highest_sal int);

INSERT INTO job_grades
VALUES ('A', 1000, 2999);

INSERT INTO job_grades
VALUES ('B', 3000, 5999);

INSERT INTO job_grades
VALUES('C', 6000, 9999);

INSERT INTO job_grades
VALUES('D', 10000, 14999);

INSERT INTO job_grades
VALUES('E', 15000, 24999);

INSERT INTO job_grades
VALUES('F', 25000, 40000);

*/

#3、自连接

#案例:查询 员工名和上级的名称

SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM employees e,employees m
WHERE e.`manager_id`=m.`employee_id`;
MySql基础四之【终篇复杂查询】 本系列为MySql基础,本篇为第四篇MySQL的复杂查询的了解,前篇我们了解了单表查询的相关操作,这篇将学习子查询与多表联查,快来一探究竟 阅读详情

相关推荐

杰理的蓝牙芯片的key是什么?以及该如何添加key?杰理key文件原理

很多的工程师,在开发杰理蓝牙芯片的第一步就会有一个很深的疑惑,关于key的 1、什么是key文件? 2、Key文件是如何产生的? 3、为什么需要他key文件? 4、如何添加key文件? 5、以及实际开发中的一些报错该如何处理?

qyvhome的博客 4095

join和子查询效率_深入理解mysql数据库join查询

我们在日常开发中,时常会面临sql优化的问题,通常情况下,我们总会说join查询比普通的关联查询效率会高很多,话虽如此,但是为何join查询效率通常情况下比关联查询效率高呢,我们一起探究一下。我们知道,关联查询,会将符合条件的查询结果显示出来;而join查询,不光显示符合条件的数据,还会将符合左表但是不符合右表的全部数据都查询出来。假如我有两张数据库表,分别是h_user(7条数据) 和 h_us...

weixin_39730587的博客 3118

Android息屏后台任务保活实战:从定时器失效到厂商白名单破解

本文深入探讨了Android应用在息屏后定时任务失效的根源,即系统为省电而触发的休眠机制。文章提供了从传统方案失效分析到实战破解的完整路径,核心在于引导用户将应用加入电池优化白名单并开启自启动权限,从而合法绕过限制。同时,结合WorkManager、AlarmManager等可靠定时方案,实现稳定的后台任务执行。

weixin_28475533的博客 423

联接与子查询:哪个更快?

虽然联接和子查询在 SQL 语句中都各有所长,但我个人建议你尽量尝试仅使用联接编写查询。只有在没有子查询的情况下无法获取你想要的数据时,才应使用子查询。

Navicat 官方账号 3986

深入解析MSPM0系列Keil开发中‘ti_msp_dl_config.h‘缺失问题的根源与修复

本文深入解析TI MSPM0系列Keil开发中'ti_msp_dl_config.h'文件缺失问题的根源与修复方法。该错误常见于编译时提示file not found,主要因SysConfig工具未正确生成或工程路径配置错误导致。文章提供了从环境检查、手动生成文件到工程配置调整的系统化解决方案,帮助开发者快速解决这一常见KEIL开发难题。

gold的博客 970

EtherCAT-1 技术概述

1.EtherCAT简介①开放的技术EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。②快速性相比传统现场总线,EtherCAT的数据传输速率有了极大的提升,可选10Mbit/s或100Mbit/s,甚至依托补充

tianya_xuan的博客 3543

sql limit用法_头发一天天的掉,你知道MySQL的Limit有性能问题吗?

你知道MySQL的Limit有性能问题吗?MySQL的分页查询通常通过limit来实现。MySQL的limit基本用法很简单。limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。为了与PostgreSQL兼容,limit也支持limit # offset #。问题:对于小的偏移量,直接使用limit来查询没有...

weixin_39583013的博客 2393

OpenHarmony-AI调研

基于OpenHarmony-5.0.0版本以及laval社区等网络资料调研当前OH上的AI发展情况。

qqq1112345的博客 1369

10个案例告诉你mysql不使用子查询的原因

通过上述分析和案例,我们可以看到,在实际业务场景中,替代子查询和JOIN的高效编程方法能够在不同场景下显著提升MySQL数据库的查询性能。在实际应用中,应根据具体业务需求和数据特点,灵活选择合适的优化方案。关注威哥爱编程,痴迷技术咱是认真滴。

2403_88969259的博客 1000

一根同轴线,真的扛得住 4K 吗? ——从摄像头带宽算起,聊透车载 SerDes 接口选型

如果你记住这三句话,这篇文章就值了:🎯摄像头带宽 = 分辨率 × 位深 × fps × 开销4K RAW 摄像头 ≈ 3.7Gbps,是现实不是理论SerDes 选型,宁可多留 20%,不要刚刚好。

weixin_43199439的博客 193

Vue 前端导出页面A4大小pdf,Vue前端导出pdf自动切割换页不切割内容 Vue导出页面pdf自动分页和添加页码 导出的pdf提高清晰度

【代码】Vue 前端导出页面A4大小pdf,Vue前端导出pdf自动切割换页不切割内容 Vue导出页面pdf自动分页和添加页码 导出的pdf提高清晰度。

weixin_41346436的博客 1799

【MySQL基础教程】多表查询

本文为【MySQL基础教程】多表查询相关知识,下边将对多表关系,多表查询概述,内连接,外连接,自连接,子查询,多表查询案例等进行详尽介绍~

小新要变强的博客 3047

基于Spring Boot 3 + Vue 3 + UniApp的全栈高校社团管理小程序设计与实现

requestMatchers("/api/auth/**", "/doc.html", "/webjars/**", "/v3/api-docs/**").permitAll() // 公开接口。<u-search placeholder="搜索活动" v-model="searchKeyword" @search="loadActivities" :showAction="false"></u-search>R.success("活动创建成功") : R.error("活动创建失败");

2201_76125393的博客 369

MySQL连接查询——MySQL 基础查询你会了吗?

前言: 由于大一学习数据库不扎实,学到后面有点吃力,所以回过头来认真学习一边,写一些学习总结,提醒自己。也要告诫读者,把基础打扎实。读者觉得有用的话可以收藏点赞哦! 上一篇:MySQL函数查询——MySQL 基础查询你会了吗? 文章目录2、MySql连接查询2.1、内连接(sql92 和sql99)2.1.1、sql92`1、等值连接`2、 为表起别名6、可以加排序吗?7、可以实现三表连接吗?2、非等值连接3、自连接2.1.2、sql99标准1、等值连接2、非等值连接3、 自连接2.2、外连接左外连接右.

weixin_44689277的博客 4849

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

MySQL连接查询

首先创建两个表 fruits表,包含水果 id、名字、价格 orders表,包含 id 和订单号(num) 1.内连接查询(INNOR JOIN) 使用普通sql语句 select fruits.id,name,price,num from fruits,orders where fruits.id=orders.id; 使用内连接查询语句(结果与上图相同) s...

health的博客 9728

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL连接查询—自身连接

若一个查询同时涉及两个表及以上的表,则称之为连接查询。 连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件查询等 1.等值于非等值连接查询 连接查询的where子句中用来连接两个表的条件成为连接条件或连接谓词,一般格式为 表名1.列名1 {比较运算符} 表名2.列名2 当连接运算符为“=”时,称之为等值连接。使用其他运算...

孤岛的鲸 9400

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Mysql连接查询详解

记得刚工作几年的时候,就写了一篇关于Mysql连接查询的博客文章,里面简单的认为先对关联表的记录进行笛卡尔积,然后再根据where条件过滤,现在看来有点贻笑大方了。正好最近看了《mysql是怎样运行的》这本书,所以对Mysql连接查询的原理和过程重新做下总结。

弹指天下 7183

【MySQL】多表连接查询

多表连接查询是关系型数据库中最重要的特性之一,它允许我们从多个相关表中检索数据,将它们按照指定的关系组合在一起显示。MySQL支持多种连接类型,使开发者能够灵活地进行数据检索和分析。

Guiat的博客 2026

MySQL -- 连接查询

MySQL使用连接查询(JOIN)是为了从多个相关表中获取数据。

Afison的博客 3930

MySQL基础教程:从入门到进阶

本文从MySQL的基础概念讲起,逐步深入到查询、函数、分组、连接查询以及子查询等内容。通过这些内容的学习,你可以掌握MySQL的基本操作和高级特性,为实际开发和数据分析打下坚实的基础。如果你对MySQL还有其他问题,或者希望了解更多的高级特性,欢迎在评论区留言,我会尽力解答!

weixin_73833086的博客 1379

MySQL (四):连接查询和索引

虽然两种方法结果一样,但是,在示例 1 中,MySQL 会在连接过程中直接过滤掉状态非 active 的客户,可能减少连接的数据量;这里的 “小表” 指的是。内连接的最终结果是 “两张表中匹配的记录”,因此当过滤条件只涉及其中一张表时(如只过滤 B 表),最左前缀原则和复合索引的顺序设计的要求都是因为查询子句中必须包含复合索引创建时的。,会先连接 A 和 B 的所有匹配记录,再从中间结果中删掉。)完成全量连接,生成临时的中间结果集,再对这个结果集应用。内连接是最常用的连接类型,它基于连接条件。

2301_76564925的博客 1625

mysql数据分段查询_MySQL基础教程——查询数据

点击上方SQL数据库开发,关注获取SQL视频教程SQL专栏SQL基础知识汇总SQL高级知识汇总MySQL 数据库沿用SQL的SELECT语句来查询数据。语法SELECTcolumn_name1,column_name2FROMtable_name[WHEREclause][LIMITN][OFFSETM]示例数据我们以Customers表为例,来讲解MySQL中的数据查询...

weixin_35904873的博客 2509

mysql 连接查询和子查询

连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。通过连接运算符可以实现多个表查询。在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当查询数据时,通过连接操作查询出存放在多个表中的不同实体的信息。当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询。本节将介绍多表之间的内连接查询、外连接查询以及复合条件连接查询。

一路向前 1323

MySQL的连接查询

MySQL的连接查询类型有:内连接、左外连接、右外连接,自连接 1. 内连接 关键字:inner join......on 说明:组合两个表中的记录,返回关联字段符合查询条件的记录,也就是返回两个表的交集(阴影)部分。 select * from table1 inner join table2 where table1.id = table2.id 2. 左外连接 关键字:left outer join......on 说明:左(外)连接,左表(table1)的记录将会全部表示出来,而

燕然一勒的博客 1592

MySQL 实验 11:数据查询(4)—— 连接查询与子查询

介绍 MySQL 的连接查询以及子查询

睿思达DBA 2633

MySQL多表查询操作、内连接查询、外连接查询、子查询

操作适用场景关键语法INNER JOIN只要匹配数据LEFT JOIN保留左表全部EXISTS判断是否存在派生表先聚合再关联关联子查询行间比较子查询引用外部字段黄金法则“能用 JOIN 解决的,不用子查询;能用 EXISTS 的,不用 IN。

silver90239的博客 1332
上一篇: select from where group by having order by的执行顺序
下一篇: mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
T-OPEN
T-OPEN 新星创作者: Java技术领域 新星创作者: Java技术领域
博客等级 码龄9年 2万+粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T-OPEN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值