数据库(mysql)-连接嵌套查询-2

子查询

MySQL中的子查询(Subquery)是嵌套在其他SQL查询中的查询。子查询可以出现在SELECT、FROM或WHERE子句中,并用于返回将被用于外部查询的数据。子查询的结果可以是一个单一的值、一行、一列或多行多列的数据集。

单行单列查询 

 实例

#查询比齐雷老师工资高的有哪些 
SELECT name FROM teacher WHERE salary>(SELECT salary FROM teacher WHERE name='齐雷');
//注意需要写(查询语句) 查询齐雷工资的就是子查询

注意子查询需要用()括起来

聚合函数 查询结果集只有一个值

实例

#查询哪些老师工资高于平均水平
SELECT name,salary FROM teacher WHREE salary> (SELECT AVG(salary) FROM teacher );

多行单列查询

子查询的查询的结果集有多个值

进行等值判断是要配合: IN 或 NOT IN 使用

如果 进行关系的计算

 ANY 用于在查询中筛选符合特定条件的任意一个数据

 ALL 它通常用于指定某个操作应适用于所有相关的行或值。

>ANY 即只要大于多行数据任意一个就行 (>最小值)

<ANY 即只要小于多行数据任意一个就行 (<最大值)

>ALL 即必须全部大于所有值 (>最大值)

<ALL 即必须全部小于所有值(<最小值)

 实例

#查看与'祝雷'和李费水同班的同学有哪些
# 这边是符合其中之一就行 ANY
SELECT name,age,gender,class_id FROM student WHERE class_id IN (SELECT class_id FROM student WHERE name IN ('祝雷','李费水'))
#查看比教科目2和教科目4老师工资都高的老师都有谁
多行单子列进行关系运算
SELECT name,salary FROM teacher WHERE salary>ALL(SELECT MAX(salary) FROM teacher WHERE subject_id IN(2,4));

更改数据

#将同李伟老师的科目的老师工资加500
UPDATE teacher SET salary=salary+500 WHERE subject_id=(SELECT subject_id FROM teacher WHERE name='李伟');
#将李伟的工资改成和李建明一样
UPDATE teacher SET salary =(SELECT salary FROM teacher WHERE name='李建明') WHERE name ='李伟';

 删除数据

#删除同李明老师教同一科目的所有老师
DELETE FROM teacher WHERE subject_id =(SELECT subject_id FROM teacher WHERE name='李明')

联表查询

联表查询在关系型数据库中非常常见,用于从多个表中检索相关数据

内连接

在SQL中, JOIN关键字默认执行的是内连接。内连接返回两个表中满足连接条件的记录。如果不明确指定连接类型, JOIN 就相当于  INNER JOIN。

SELECT   
    -- 选择要显示的列,可以是来自一个表的列,也可以是两个表通过JOIN操作关联后的列  
    table1.column1,   
    table1.column2,   
    table2.columnA,   
    table2.columnB  
FROM   
    -- 第一个表名  
    table1  
INNER JOIN   
    -- 第二个表名  
    table2   
ON   
    -- 指定JOIN条件,即两个表中用于匹配的列  
    table1.matching_column = table2.matching_column  
WHERE   
    -- 可选的WHERE子句,用于进一步过滤结果  
    some_condition;

实例 

#查询教语文老师的名字(这边teacher表有老师姓名和subject表要科目名称)
SELECT teacher.name,subject.name FROM teacher JOIN subject ON teacher.subject_id = subject.id  WHERE subject.name='语文';
SELECT teacher.name,subject.name FROM subject JOIN teacher ON  subject.id = teacher.subject_id WHERE subject.name='语文';

注意如果两个表中都要字段需要加对应的表名

否则 会报字段名模糊

外连接

外连接(Outer Join)是一种连接两个或多个表的方式,它返回包括匹配行和非匹配行的结果集。与内连接(Inner Join)不同,内连接只返回匹配的行,而外连接会返回一侧表中的所有行,即使另一侧表中没有匹配的行。

左外连接(Left Outer Join)

左外连接返回左表中的所有行,以及右表中匹配的行。如果右表中没有匹配的行,则结果集中对应的列将包含NULL值。

SELECT A.*, B.*FROM TableA a

LEFT OUTER JOIN TableB b ON a.key = b.key;

#查询所有班的老师,班级全部列出,班级中没有老师用null填补
SELECT * FROM class c LEFT JOIN teacher t ON c.teacher_id = t.id;

右外连接(Right Outer Join)

右外连接返回右表中的所有行,以及左表中匹配的行。如果左表中没有匹配的行,则结果集中对应的列将包含NULL值。

SELECT A.*, B.*FROM TableA a

RIGHT OUTER JOIN TableB b ON a.key = b.key;

#查询所有老师教的班,老师全部列出,老师没任教的班用null填补
SELECT * FROM class c RIGHT JOIN teacher t ON c.teacher_id = t.id;
全外连接(Full Outer Join)

全外连接返回左表和右表中的所有行。如果某侧表中没有匹配的行,则结果集中对应的列将包含NULL值。

SELECT A.*, B.*FROM TableA a

FULL OUTER JOIN TableB b ON a.key = b.key;

 在某些数据库系统中,可能需要使用UNION操作符来模拟全外连接的行为。

SELECT A.*, B.*FROM TableA a

LEFT OUTER JOIN TableB b ON a.key = b.key;

UNION

SELECT A.*, B.*FROM TableA a

RIGHT OUTER JOIN TableB b ON a.key = b.key;

 实例

#查看姓张和姓李的学生各有多少人
SELECT Count(*) '人数','姓张' AS '姓氏'  FROM student s
WHERE  name  LIKE '张%'
UNION
SELECT Count(*) '人数','姓李' AS'姓氏' FROM student s
WHERE   name  LIKE '李%';

自连接

自连接(Self-Join)是一种特殊的连接操作,它涉及到一个表与其自身进行连接。自连接通常用于比较表内的行,找出满足特定条件的行之间的关系。自连接通常通过使用别名来区分同一个表在查询中的不同实例

 模版

SELECT A.*, B.*FROM TableA a,TableA b

WHERE a.key = b.key

#查询教师表中的领导
SELECT t.name ,t1.name FROM teacher t1,teacher t
WHERE t1.id = t.manager

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

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

相关文章

弱口令入侵FE企业管理平台【附口令】

漏洞描述 飞企互联-FE企业运营管理平台 druid路径弱口令&#xff0c;攻击者可能通过尝试弱口令&#xff0c;非法进入系统&#xff0c;恶意操作或者收集信息进一步攻击利用。 漏洞复现 1、Fofa app"飞企互联-FE企业运营管理平台"2、零零信安 (html_banner360浏览…

基于ssm作业提交与查收系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本作业提交与查收系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信…

1.Spring的核心思想 —— IOC和DI

1. Spring是什么&#xff1f; 简单的说&#xff0c;Spring其实指的是Spring Framework&#xff08;Spring框架&#xff09;&#xff0c;是一个开源框架。 如果要用一句话概括&#xff1a;它是包含众多工具方法的IOC&#xff08;Inverse of Control控制反转&#xff09;容器。…

字节码文件的组成

字节码文件的组成 字节码文件的组成1 以正确的姿势打开文件2 字节码文件的组成2.1 基本信息2.2 常量池2.3 字段2.4 方法2.5 属性 3 字节码常用工具3.1 javap3.2 jclasslib插件3.3 Arthas 4 字节码常见指令 字节码文件的组成 1 以正确的姿势打开文件 字节码文件中保存了源代码…

RPA实战演练UiBot6.0新食堂一楼问卷星(类似于之前的网页表单提交)

要使用RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;帮助新食堂进行调查问卷&#xff0c;我们可以结合UiBot 6.0来实施具体的计划。以下是一个大致的实战演练计划&#xff1a; 一、目标与需求分析 明确调查目标&#xff1a;了解新食堂…

jdk17 你还想用ScriptEngineManager来执行js代码?

今天要用java来执行配置表的js代码&#xff0c;用 ScriptEngine javaScriptEngine new ScriptEngineManager().getEngineByName(“javascript”); 一直抛异常&#xff1a;Cannot invoke “javax.script.ScriptEngine.eval(String)” because “javaScriptEngine” is null 网上…

5.Hexo为页面标记标签和类别

Hexo的标签和类别基本上是可以在Hexo中将内容分组的两种方式 如果在网站上有一堆内容&#xff0c;有不同的博客文章 将博客文章分类为不同的类别会很有帮助 用特定的关键词为博客文章标记 如果可以同时分类和标记页面&#xff0c;会使网站用户更轻松地找到他们想要的页面类型 …

文章分享:《二代测序临床报告解读指引》

&#xff3b;摘要&#xff3d; 二代测序&#xff08;next generation sequencing&#xff0c;NGS&#xff09;已成为中国临床肿瘤医生常用检测工具&#xff0c;而中国超 90%临床医生需要 NGS 报告解读支持。因此&#xff0c;为提升临床医生 NGS 报告解读能力&#xff0c;特编写…

Traefik的EntryPoints是什么?

在探索 Traefik —— 这款极受欢迎的现代反向代理和负载均衡器时&#xff0c;理解其核心组件是非常重要的。其中&#xff0c;EntryPoints 是 Traefik 中一个关键概念&#xff0c;它直接关系到如何接收和处理进入的网络流量。&#x1f511;&#x1f6a6; 1. Traefik 的 EntryPo…

蓝桥杯基础18——第13届省赛真题与代码详解

目录 0.心得体会 1.题目如下 2.代码实现的思路 键值扫描 数码管窗口切换 数码管的动态扫描 继电器工作时L3闪烁&#xff0c;整点时刻L1灯光亮5秒 3.变量列表 定义的常量和数组 功能控制和状态变量 定时器和计数变量 4.代码参考 4.1 头文件 onewire.h ds1302.h 4…

react使用npm i @reduxjs/toolkit react-redux

npm i reduxjs/toolkit react-redux 创建一个 store文件夹&#xff0c;里面创建index.js文件和子模块文件夹 index,js文件写入以下代码 import {configureStore} from reduxjs/toolkit // 导入子模块 import counterReducer from ./modules/one import two from ./modules/tw…

Acwing.1375 奶牛回家(最短路朴素dijkstra)

题目 晚餐时间马上就到了&#xff0c;奶牛们还在各自的牧场中悠闲的散着步。 当农夫约翰摇动铃铛&#xff0c;这些牛就要赶回牛棚去吃晚餐。 在吃晚餐之前&#xff0c;所有奶牛都在自己的牧场之中&#xff0c;有些牧场中可能没有奶牛。 每个牧场都通过一条条道路连接到一个…