MySQL语句查询——子查询和三表查询

news/2025/2/28 20:36:53/文章来源:https://www.cnblogs.com/zz0124/p/18744042

一、子查询

1、定义:一个查询中嵌套另一个查询 

2、子查询的分类

(1)标量子查询

(2)列子查询

(3)行子查询

(4)表子查询(运用多)

3、子查询详解

(1)标量子查询(返回一个值)

-把一个sql 执行返回的一个值,作为另一个sql的条件,得到的结果是一行一列,一般出现在where之后-

备注:

标量子查询允许使用的比较运算符号:=,!=,>,<,>=,<=,<>

案例:财务部门的收入总和

步骤1:查询财务部门的编号

select dept1 from   dept  where   dept_name='财务'; 

步骤2:将查询出来的一行一列作为条件

select sum(incoming) from emp where dept2=(select dept1 from dept where dept_name='财务' );

-注意点:判断能不能使用子查询,查看结果是否涉及两个表的字段

如:a、不能用子查询

b、可以用子查询

(2)列子查询(返回的结果是一个列)

定义:返回的是一列值

注意点:通常在where 之后使用,使用是in 或not  in   ,不运行使用比较运算符,因为它有多个值

案例:It技术部和财务部门入职员工的员工号

步骤1:SELECT dept1 from dept where dept_name='财务' or dept_name='销售';

步骤2:SELECT sid from emp where dept2 in (SELECT dept1 from dept where dept_name='财务' or dept_name='销售') 

(3)行子查询

定义:返回的结果是一行多列,一般出现在where 的后面

案例:找出与牛八 年龄和入职时间一样的员工姓名

步骤1:找老九的年龄 和入职时间  :

select age,woektime_start from emp where name="老九" ;

步骤2:在emp中找到年里和入职时间相同的数据

select name from emp where (age,woektime_start) in (select age,woektime_start from emp where name="牛八" ) ;

(4)表子查询

-定义:返回的是多行多表 (返回的就是一个表),一般接在from 的后面,返回的是一个表

-临时表:as    临时表名

-步骤:

a、select   * from (合表) where  条件

案例1:

select a.name from (select  * from  dept  INNER JOIN  emp on dept.dept1=emp.dept2) as a WHERE a.dept_name="财务"

案例2:

SELECT name,dept_name from emp left join dept on emp.dept2 = dept.dept1 where (age,dept1) in  (SELECT max(age),dept2 from emp GROUP BY dept2);

b、select   *   from   表1  inner  join  ( )

案例:It技术部和财务部门入职员工的员工号

select sid from emp INNER JOIN (select * from dept where dept_name='财务' or dept_name='IT技术' )c ON emp.dept2=c.dept1


二、三表查询

1、三表连接

格式:select  *   from  表1,表2,表3 where   表1.关联字段1=表3.关联字段3  AND  表2.关联字段2=表3.关联字段 3;

案例:select  *   from  student  as a ,course  as b,sc as  c where   a.stu_no=c.stu_no  AND  b.c_no=c.c_no ;

2、三表内连接

格式:select * from 表1 INNER JOIN   表3     on   表1.关联字段1=表3.关联字段3   INNER JOIN表2   on  表2.关联字段2=表3.关联字段3 

案例:select * from student as a INNER JOIN sc as c on a.stu_no=c.stu_no INNER JOIN course as b on b.c_no=c.c_no

 3、三表左连接

格式:select * from 表1 left JOIN   表3     on   表1.关联字段1=表3.关联字段3  left  JOIN表2   on  表2.关联字段2=表3.关联字段3 

案例:select * from student as a left JOIN sc as c on a.stu_no=c.stu_no left JOIN course as b on b.c_no=c.c_no

4、三表右连接

格式:格式:select * from 表1  right JOIN   表3     on   表1.关联字段1=表3.关联字段3  right  JOIN表2   on  表2.关联字段2=表3.关联字段3 

案例:select  *   from  student  as a  right JOIN  sc as  c   on  a.stu_no=c.stu_no  right JOIN  course  as b on  b.c_no=c.c_no

 5、先合两表在和一表

格式:select   *  from  (select * from 表1  right JOIN   表3     on   表1.关联字段1=表3.关联字段3 ) 临时表s   iner join 表2  on   临时表. 字段3=表2.字段2

案例:select  * from (select  a.*,c.sc_No,c.c_no,c.score  from student AS a right JOIN sc c on a.stu_no=c.stu_no)as s INNER JOIN   course as b on s.c_no=b.c_no

-注意:重复列的错误-

6、去除重复字段

案例:select  * from (select  a.* ,b.*,c.sc_no,c.score  from student AS a right JOIN sc c on a.stu_no=c.stu_no right JOIN  course as b on b.c_no=c.c_no) s

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

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

相关文章

leetcode hot 14

解题思路:这题思路有很多,动态规划,前缀和等,前缀和就是遍历一遍,将每个前缀和与前面最小的前缀和相减,就能得到最大值,然后比较与记录最大值。(还有一种思路就是首先明确最大子串内部一定不会存在某个边缘子串小于0,所以可以遍历一遍先记录继续记录前缀和,然后比较ma…

如何在React.js中使用Shadcn/UI

如何在React.js中使用Shadcn/UI 学习如何在React.js中使用Shadcn/UI构建可自定义且轻量的界面。了解如何将其与Apipost集成,以实现高效的API管理和测试。非常适合希望提升React.js项目的开发者!使用Shadcn/UI构建现代化界面 创建简洁的用户界面是前端开发者的主要目标之一。随…

若依开发遇到的问题五

今天在写pdf上传文件接口的时候发生以下的情况:路径很明确,所以直接找过来:是这个类没有下载完成,顶端有提示下载,点击下载,问题解决

[深度学习] 大模型学习2-提示词工程指北

在文章大语言模型基础知识里,提示词工程(Prompt Engineering)作为大语言模型(Large Language Model,LLM)应用构建的一种方式被简要提及,本文将着重对该技术进行介绍。 提示词工程就是在和LLM聊天时,用来让模型回答得更好的一种方法。LLM的工作原理是猜下一个字或词是什…

20250228打卡

大创项目初版完工

Meta 无预警发布新一代 AI 眼镜 Aria Gen 2;腾讯混元 Turbo S 模型将长短思维链融合丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

关于我在使用Steamlit中碰到的问题及解决方案总结

Steamlit 并不支持一个可以预览本地文件的路径选择器(并不上传文件) 解决方案:使用 Python 自带的 tkinter 来完成 参考:【Streamlit 选择文件夹的曲折方案】Streamlit选择文件夹-CSDN博客 import streamlit as st from tkinter import filedialog, Tk# Set up tkinter roo…

day10 管道符grep 和 find

day10 管道符grep 和 find grep 命令 grep 是对于数据进行查找的关键词 源数据可以是文件内容 grep hello /opt/hello.txt,找出存在hello的那一行 命令的执行结果 ,这个需要结合管道符使用,cat /etc/passwd | grep root测试数据I teach linux.I like python.My qq is 877…

[豪の学习笔记] JavaReStudy#07

IDEA常用快捷键、包、访问修饰符、OOP封装、OOP继承、super关键字、方法重写/覆盖、OOP多态、Object类详解面向对象编程-进阶部分 1 - IDEA常用快捷键 1.删除当前行 ctrl+Y 2.查看一个类的层级关系 ctrl+H 3.定位方法 ctrl+B 4.自动分配变量名,在后面加 .var 5.导入该行需要的…

HTB GreenHorn (源码审计、PDF修复) 随笔

一、端口信息扫描 Spawn Machine后拿到了IP,先nmap扫一下,输入nmap -sV -sC -v 10.10.11.25 -Pn探到了22,80,3000端口,并且可以发现80端口重定向到了http://greenhorn.htb/页面 输入vim /etc/hosts打开一下hosts文件,添加10.10.11.25 greenhorn.htb再探测一下子域名,看看…

CS144 Lab2

CS144 Lab2 开始有点痛苦了,因为文档给的并不全面,光读文档是没法覆盖所有的test case的,有太多的业务逻辑要自己考虑。接下来分别就几个难点总结一下: SYN/FIN 有几种情况要特判:当前没收到过SYN,要拒绝所有的segment 当前收到过SYN了,又收到了新的SYN,这得拒绝 当前收…

msyql三表命令

一、建表 create table student( stu_no int, stu_name varchar(10), sex char(1), age int(3), edit varchar(20) ) DEFAULT charset=utf8; insert into student values (1,wang,男,21,hello), (2,小明,女,22,haha2), (3,hu,女,23,haha3), (4,li,男,25,haha4); create table …