[MySQL]DQL语句(二)

    (一)里面我们以单表查询为基础,讲了DQL语句的基础,这篇我们来讲多表查询。

联合查询

    联合查询的作用是合并结果集,也就是把两个select语句的查询结果合并到一起。合并结果集的方式有两种,分别是去重和不去重。语法格式为:

SELECT 字段列表 FROM 表1
UNION [ALL]
SELECT 字段列表 FROM 表2;
# 如果不填ALL,则结果会去重合并,填写ALL之后合并时不再会去重

     注意:合并结果集时,需要两个SELECT语句的查询结果列数、数据类型一致,然后会按照列的顺序合并结果集,如果不一致,在执行语句时就会报错。

连接查询

     连接查询的结果是各个表之间的笛卡尔积。通俗地讲,就是表1查询结果*表2查询结果*...

     这里放一个示例,如下是两张表

# 这是连接查询语句
SELECT * FROM 表1,表2,...;

     结果为:

    当然,这只是最初的查询结果。在FROM之后依旧可以像单表查询一样添加WHERE等一系列语句来对这个最初的结果集进行筛选(包括SELECT中指定字段列表)。如果两种表有同名的列,想要用它们作为WHERE条件的话,需要使用   表1名.字段名=表2名.字段名   的格式进行标识

    还可以给表使用别名,在表名较长时,可以简化重复的流程。

SELECT e.字段1,e.字段2,e.字段3,d.字段4 FROM 表1 AS e,表2 AS d
WHERE e.同名字段=d.同名字段;
# 同时注意,这里查询的是e表的3个字段和d表的1个字段,不是两张表的4个同名字段。
# 这就是通过SELECET来筛选结果

内连接

    其实刚刚上面的语句就是内连接,但它不是标准的查询方式,可以当做MySQL的方言。

    标准内连接语句为:

SELECT 字段列表 FROM 表1 INNER JOIN 表2 [ON 连接条件];

    内连接查询的结果必须满足连接条件(也可以不设条件,这时候结果就是笛卡尔积),例如有内连接查询条件为 s.id = t.stu_id ,这里又正好有一条s.id 的值为null,那么它就怎么都不会符合连接条件。

    又因为null值的特殊性,在查询时你希望将其替换掉,可以使用  IFNULL(字段名,替换值) 。

外连接

    与内连接相比,外连接允许查询出的结果不满足条件

# 左外连接
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
# 右外连接
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;

左外连接

# 左外连接
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;

    左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。

    仔细讲,假设连接条件为左表.id = 右表.stu_id,在左表的一条记录中,id字段为6666,而右表中不存在stu_id为6666的记录(NULL值有特殊性),所以左表这条记录,不能满足连接条件。但在左连接中,左表中的记录都会查询出来,即这条id字段值为6666的记录也会查出,但相应的右表部分的内容会全部显示为NULL。

右外连接

# 右外连接
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;

    与左连接相对应。 

自连接

    自连接就是一张表自己连接自己,且可以说一定会使用到别名。

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;

    举例,比如有员工表,一个公司的所有员工信息都在上面,现在想要查询每个员工的所属领导:

# emp就是员工表
select a.name , b.name from emp a , emp b where a.managerid = b.id;

     公司总裁没有领导,managerid字段的值为空,想要显示总裁信息则可使用外连接进行自连接。

子查询

    子查询又叫嵌套查询,即一个SELECT中再包含SELECT查询语句。

    (子查询外部的语句还可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。)

    子查询的位置可以是:

1.WHERE后,作为条件的一部分

2.FROM后,作为被查询的一条表

3.SELECT之后 ,作为被查询的一列

    当子查询出现在WHERE后作为条件时,还可以使用关键字:any/all

    根据查询结果的不同,还可以将子查询分为:

1.结果为单个值 ,叫标量子查询

2.结果为一列 ,列子查询

3.结果为一行 ,行子查询

4.结果为多行多列 ,表子查询

标量子查询

    子查询返回的结果是单个值(数字、字符串、日期等),这种子查询称为标量子查询。

    常用的操作符:=   <>   >   >=   <   <=

# 查询工资高于 所有职位为CLERK员工工资 的员工
SELECT * FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE job='CLERK');

列子查询

    子查询返回的结果是一列,这种子查询称为列子查询

    常用的操作符:IN 、NOT IN 、 ANY 、SOME 、 ALL

操作符说明
IN在指定的集合范围之内,多选一
NOT IN不在指定的集合范围之内
ANY子查询返回列表中,有任意一个满足即可
SOME与ANY等同
ALL子查询返回列表的所有值都必须满足

    为了方便理解,下面是几个使用例子

# 查询所有 所属部门为 "SALES" 和 "ACCOUNTING" 的员工 的信息
select * from emp where dept_id in (select id from dept where name = 'SALES' or name = 'ACCOUNTING');# 查询工资高于 部门id为30的所有人工资 的员工信息
SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30);

行子查询

    子查询返回的结果是一行,这种子查询称为行子查询

    常用的操作符:= 、<> 、IN 、NOT IN

# 查询工作和工资 与MARTIN完全相同 的员工 的信息
SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN');

表子查询

    子查询返回的结果是多行多列,这种子查询称为表子查询

    常用的操作符(在WHERE中时):IN

举例:

    现在有表:emp和dept

     查询员工编号为7369的员工名称、员工工资、部门名称、部门地址  

# 子查询生成的表需要使用别名
# 这种子查询需要与主语句进来联动
SELECT e.ename, e.sal, d.dname, d.loc FROM emp e, (SELECT dname,loc,deptno FROM dept) d WHERE e.deptno=d.deptno AND e.empno=7369;

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

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

相关文章

2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能

基于matlab-GUI的脉冲响应不变法实现音频滤波功能&#xff0c;输入加噪信号&#xff0c;通过巴特沃斯模拟滤波器脉冲响应不变法进行降噪。效果较好。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能…

初学者如何对大模型进行微调?

粗略地说&#xff0c;大模型训练有四个主要阶段&#xff1a;预训练、有监督微调、奖励建模、强化学习。 预训练消耗的时间占据了整个训练pipeline的99%&#xff0c;其他三个阶段是微调阶段&#xff0c;更多地遵循少量 GPU 和数小时或数天的路线。预训练对于算力和数据的要求非…

MySQL—基础学习

对于数据库MySQL的基础学习与Datagrip的使用 1.MySQL概述 &#xff08;1&#xff09;相关概念 数据库 &#xff1a;存储数据的仓库 &#xff08;DB&#xff09; 数据库管理系统&#xff1a;操控和管理数据库的大型软件&#xff08;DBMS&#xff09; SQL&#xff1a;操作关系…

客户案例 | 智原科技利用Ansys多物理场分析增强3D-IC设计服务

Ansys经过认证的半导体解决方案将帮助智原科技缩短2.5D/3D-IC的设计周期&#xff0c;并确保设计符合信号完整性和性能目标 主要亮点 智原科技将使用Ansys RaptorX™片上电磁&#xff08;EM&#xff09;建模解决方案来增强2.5D/3D集成电路&#xff08;IC&#xff09;的先进封装设…

集成框架 -- 自定义二方包 starter

自定义starter 二方包 My-thread-pool-startermy-thread-pool-starter 整体架构 测试 MyTestAppApplication测试工程 my-test-app 结构测试项目的 pom.xml 二方包 My-thread-pool-starter POM 文件 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&…

Spring框架的JDBC模板技术

目录 一、JDBC模板类的使用 1.引入依赖 2.测试类 3.运行&#xff0c;查看数据库 二、使用Spring框架来管理模板类 1.配置文件 2.测试类 3.运行&#xff0c;查看数据库 三、Spring框架管理开源的连接池 1.配置开源的连接池 2.将数据库连接的信息配置到属性文件中 3.核…

头歌答案-分布式文件系统HDFS

目录 第1关&#xff1a;HDFS的基本操作 第2关&#xff1a;HDFS-JAVA接口之读取文件 第3关&#xff1a;HDFS-JAVA接口之上传文件 第4关&#xff1a;HDFS-JAVA接口之删除文件 第1关&#xff1a;HDFS的基本操作 # 1. 启动Hadoop start-all.sh # 启动Hadoop集群 # 或使用以…

mysql设置允许外部ip访问,局域网IP访问

&#xff08;支持MYSQL8版本&#xff09; 1. 登录进入mysql&#xff1b;mysql -uroot -p输入密码进入 2. 输入以下语句&#xff0c;进入mysql库&#xff0c;查看user表中root用户的访问 use mysql; select host,user from user; 3. 更新user表中root用户域属性&#xff0c…

深度学习基础(2024-11-02更新到图像尺寸变换 与 裁剪)

1. 名词解释 FFN FFN &#xff1a; Feedforward Neural Network&#xff0c;前馈神经网络馈神经网络是一种基本的神经网络架构&#xff0c;也称为多层感知器&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;FFN 一般主要是包括多个全连接层(FC)的网络&#xff…

Python | Leetcode Python题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; class Solution:def countArrangement(self, n: int) -> int:f [0] * (1 << n)f[0] 1for mask in range(1, 1 << n):num bin(mask).count("1")for i in range(n):if mask & (1 << i) and (num % (i …

Windows无法访问\\192.168.1.156,错误代码0x800704cf

1.首先要保证网络与共享中心的高级共享设置要打开 2.其他要保证两个机器在一个局域网 最简单的验证方法就是要相互可以ping通 3.如果满足以上条件还是会访问失败 4.可能的原因之一&#xff1a;防火墙设置 你要确保&#xff1a; 网络发现文件传送程序文件和打印机共享 在对应…

蓝桥杯 区间移位--二分、枚举

题目 代码 #include <stdio.h> #include <string.h> #include <vector> #include <algorithm> #include <iostream> using namespace std; struct node{ int a,b; }; vector<node> q; bool cmp(node x,node y){ return x.b <…

华为ENSP--ISIS路由协议

项目背景 为了确保资源共享、办公自动化和节省人力成本&#xff0c;公司E申请两条专线将深圳总部和广州、北京两家分公司网络连接起来。公司原来运行OSFP路由协议&#xff0c;现打算迁移到IS-IS路由协议&#xff0c;张同学正在该公司实习&#xff0c;为了提高实际工作的准确性和…

Java-I/O框架10:File类、文件操作

视频链接&#xff1a;16.26 文件操作_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p26 1.File类概述 概念&#xff1a;代表物理盘符中的一个文件或者文件夹&am…

设计模式之模块方法

定义 模板与方法应该是最常使用的设计模式&#xff0c;在GOF&#xff08;设计模式&#xff09;中的定义&#xff1a;定义一个操作中的算法的骨架 &#xff0c;而将一些步骤延迟到子类中。 Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 …

【面试经典150】day 10

目录 1.验证回文串 2.判断子序列 3.两数之和 II - 输入有序数组 4.盛最多水的容器 5.三数之和 1.验证回文串 class Solution {public boolean isPalindrome(String s) {int i0,js.length()-1;while(i<j){//跳过非数字/字母while(i<j&&!Character.isLetterOrDig…

《双指针篇》---有效三角形的个数(中等)

题目传送门 方法一&#xff1a;排序双指针 1.排序 2.设置一个for循环。用来当做第三边。我们从后往前遍历。直到 i2 时跳出循环。 3.初始化 left 指针0&#xff0c;初始化right 指针等于 i-1。这样我们判断两边之和。 4.在left < right 的情况了&#xff0c;如果两边之和大…

Vue 权限管理

vue 中&#xff0c;比较常见的需要进行权限管控的权限控制实现思路有四条&#xff1a;、 菜单的控制 在登录请求中&#xff0c;会得到权限数据&#xff0c;当然&#xff0c;这个需要后端返回数据的支持&#xff0c;前端根据权限数据&#xff0c;展示对应的菜单&#xff0c;单…

结合自身的实际情况,试描绘一天的活动

结合自身的实际情况&#xff0c;试描绘一天的活动 现在变成了两眼一睁就是看看hcy和sxh发围脖了没

【力扣打卡系列】反转链表

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day12 反转链表 题目描述 解题思路 最开始的头节点为空&#xff0c;可以赋值为nil从前往后依次逆转下一个节点的指向即可 代码参考 /*** Definition for singly-linked list.* type ListNode s…