SQL 数据查询

文章目录

        • 3.4.1 单表查询
          • 定义
          • 特点
          • 单表无条件查询
          • 单表带条件查询
          • 对查询结果进行排序
          • 限制查询结果数量
        • 3.4.2 分组查询
          • 定义
          • 特点:
          • 聚集函数
          • GROUP BY短语
          • HAVING子句
          • 分组查询小结
        • 3.4.3 连接查询
          • 定义
          • 特点:
          • 等值连接与非等值连接查询
          • 自然连接(内连接)查询
          • 外连接查询
          • 自身连接查询
        • 3.4.4 嵌套查询
          • 定义
          • 特点:
          • 嵌套查询的分类
          • 嵌套查询的执行过程
          • 带比较运算符的子查询
          • 带IN(或NOT IN)谓词的子查询
          • 带ANY/ALL谓词的子查询
          • 带EXISTS(或NOT EXISTS)谓词的子查询
          • 用存在量词实现全称量词
          • 用存在量词实现蕴涵逻辑
        • 3.4.5 集合查询
          • 定义
          • 特点:
          • 并运算
          • 交运算
          • 差运算
        • 3.4.6 多表查询的等价形式
          • 定义
          • 多表查询的肯定形式
          • 多表查询的否定形式
      • 总结

3.4.1 单表查询
  1. 定义
    1. 单表查询是指从单个基本表中选择满足条件的字段和元组。
  2. 特点
    1. 无条件查询:从表中选择所有字段或部分字段,不加条件。
    2. 带条件查询:根据特定条件筛选满足条件的字段和元组。
    3. 查询结果排序:使用ORDER BY短语对查询结果进行排序。
    4. 限制查询结果数量:使用LIMIT短语限制查询结果的行数。
  3. 单表无条件查询
    • 查询所有字段:

      SELECT * FROM Department;
      

      image

    • 查询部分字段:

      SELECT dno, dname FROM Department;
      

      image

    • 查询没有重复行数据的字段:

      SELECT DISTINCT dno FROM Student;
      

      image

    • 查询含有表达式的字段:

      SELECT sname 姓名, YEAR(CURRENT_DATE()) - YEAR(birth) 年龄 FROM Student;
      

      image

  4. 单表带条件查询
    • 比较判断:

      SELECT sname, birth FROM Student WHERE dno = 'D1';
      SELECT sno, cno FROM SC WHERE score < 60;
      SELECT sno, sname FROM Student WHERE dno <> 'D2';
      
    • 确定范围:

      SELECT * FROM SC WHERE score BETWEEN 60 AND 90;
      SELECT * FROM SC WHERE score NOT BETWEEN 60 AND 90;
      
    • 确定集合:

      SELECT sno, sname, sex, birth, dno FROM Student WHERE dno IN ('D1', 'D2');
      SELECT sno, sname, sex, birth, dno FROM Student WHERE dno NOT IN ('D1', 'D2');
      
    • 空值查询:

      SELECT * FROM SC WHERE score IS NULL;
      SELECT * FROM SC WHERE score IS NOT NULL;
      
    • 多重条件查询:

      SELECT * FROM SC WHERE score >= 60 AND score <= 90;
      SELECT * FROM SC WHERE score < 60 OR score > 90;
      
    • 字符匹配:

      SELECT * FROM Course WHERE cname LIKE '数据库';
      SELECT * FROM Course WHERE cname LIKE '%数据库%';
      
  5. 对查询结果进行排序
    • 按单个字段排序:

      SELECT sno, score FROM SC WHERE cno = 'C1' ORDER BY score DESC;
      

      image

    • 按多个字段排序:

      SELECT sno, sname, sex, birth, dno FROM Student ORDER BY dno, birth DESC;
      
  6. 限制查询结果数量
    • 限制查询结果数量:

      SELECT sno, sname, dno FROM Student LIMIT 1, 3;
      SELECT * FROM SC ORDER BY score DESC LIMIT 5;
      

      image

    • image

3.4.2 分组查询
  1. 定义
    1. 分组查询是将基本表中满足条件的元组按指定字段的值分成若干组,每组返回一个结果。
  2. 特点:
    • 聚集函数:COUNT、SUM、AVG、MAX、MIN等,用于对每组数据进行汇总和统计。
    • GROUP BY短语:根据指定字段的值对查询结果中的元组进行分组。
    • HAVING子句:对分组后的查询结果再进一步选择满足条件的分组。
  3. 聚集函数
    • 定义:COUNT、SUM、AVG、MAX、MIN等,用于对每组数据进行汇总和统计。

    • 常用聚集函数:

      • | 聚集函数 | 功能 |
        | --------------------------- | ------------------------------------------ |
        | COUNT() | 统计元组的个数,包括值为NULL 的元组 |
        | COUNT([DISTINCTALL] 字段名) | 统计某一字段值的个数,忽略NULL 值 |
        | SUM([DISTINCTALL] 字段名) | 计算某一字段值的总和(此列必须是数值型) |
        | AVG([DISTINCTALL] 字段名) | 计算某一字段值的平均值(此列必须是数值型) |
        | MAX([DISTINCTALL] 字段名) | 返回某一字段值中的最大值 |
        | MIN([DISTINCTALL] 字段名) | 返回某一字段值中的最小值 |

      • 统计学生总人数:SELECT COUNT(*) 学生总人数 FROM Student;

        • image
      • 统计学生来自几个学院:SELECT COUNT(DISTINCT dno) 学院数 FROM Student;

        • image
      • 计算所有学生的平均成绩、最高分和最低分:SELECT ROUND(AVG(score), 2) 平均成绩, MAX(score) 最高分, MIN(score) 最低分 FROM SC;

        • image
      • 按学院分组查询每名学生的学号及其成绩的最高分和最低分:SELECT sno 学号, MAX(score) 最高分, MIN(score) 最低分 FROM SC GROUP BY sno;

        • image
  4. GROUP BY短语
    • 定义:根据指定字段的值对查询结果中的元组进行分组。

    • 按单字段分组:

      SELECT sno 学号, MAX(score) 最高分, MIN(score) 最低分 FROM SC GROUP BY sno;
      

      image

    • 按多字段分组:

      SELECT dno 学院编号, YEAR(CURRENT_DATE()) - YEAR(birth) 年龄, COUNT(*) 人数 FROM Student GROUP BY dno, YEAR(CURRENT_DATE()) - YEAR(birth) ORDER BY dno;
      

      image

  5. HAVING子句
    • 定义:对分组后的查询结果再进一步选择满足条件的分组。

    • 筛选分组:

      SELECT sno FROM SC GROUP BY sno HAVING COUNT(*) > 3;
      

      image

  6. 分组查询小结
    • 完整的分组查询语法:

      SELECT 分组字段, 聚集函数表达式 FROM 表名 [WHERE 查询条件] [GROUP BY 字段名1, 字段名2..] [HAVING 分组条件表达式] [ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC],..];
      
3.4.3 连接查询
  1. 定义
    1. 连接查询是指对两个或两个以上的基本表或视图进行的查询,包括等值连接查询、非等值连接查询、自然连接(内连接)查询、外连接查询和自身连接查询。
  2. 特点:
    • 等值连接与非等值连接:根据两个表中的字段值进行比较,确定当前的两条元组是否可以连接。
    • 自然连接(内连接):去掉重复列的等值连接。
    • 外连接:包括左外连接、右外连接和全外连接,确保某个表的所有元组都出现在结果中。
    • 自身连接:一个表与其自身进行连接。
  3. 等值连接与非等值连接查询
    • 等值连接查询:

      SELECT Student.sno, sname, sex, birth, dno, SC.cno, score FROM Student, SC WHERE Student.sno = SC.sno;
      
    • 非等值连接查询:

      SELECT sno, score, grade FROM SC, SG WHERE score BETWEEN minscore AND maxscore;
      
  4. 自然连接(内连接)查询
    • 显式内连接查询:

      SELECT sname, score FROM Student INNER JOIN SC ON Student.sno = SC.sno WHERE sex = '男';
      
    • 隐式内连接查询:

      SELECT sname, score FROM Student, SC WHERE Student.sno = SC.sno AND sex = '男';
      
  5. 外连接查询
    • 左外连接查询:

      SELECT dname, tname FROM Department LEFT JOIN Teacher ON Department.dno = Teacher.dno;
      
    • 右外连接查询:

      SELECT dname, tname FROM Department RIGHT JOIN Teacher ON Teacher.dno = Department.dno;
      
    • 全外连接查询:

      SELECT dname, tname FROM Department LEFT JOIN Teacher ON Department.dno = Teacher.dno UNION SELECT dname, tname FROM Department RIGHT JOIN Teacher ON Teacher.dno = Department.dno;
      
  6. 自身连接查询
    • 自身连接查询:

      SELECT First.cno, Second.cpno FROM Course First INNER JOIN Course Second ON First.cpno = Second.cno;
      
3.4.4 嵌套查询
  1. 定义
    1. 嵌套查询是将一个查询块嵌套在另一个查询块的WHERE子句或HAVING子句的条件中的查询。
  2. 特点:
    • 单行子查询和多行子查询:根据子查询返回的行数分类。
    • 相关子查询和不相关子查询:根据子查询的查询条件是否依赖于父查询分类。
    • 带比较运算符的子查询:父查询与子查询之间用比较运算符进行连接。
    • 带IN/NOT IN谓词的子查询:用谓词IN/NOT IN引出子查询。
    • 带ANY/ALL谓词的子查询:用谓词ANY/ALL引出子查询。
    • 带EXISTS/NOT EXISTS谓词的子查询:用谓词EXISTS/NOT EXISTS引出子查询。
  3. 嵌套查询的分类
    • 按子查询返回元组的行数:单行子查询、多行子查询
    • 按子查询的查询条件是否依赖于父查询:相关子查询、不相关子查询
    • 按引出子查询的谓词的不同:由比较运算符引出的子查询、由IN/NOTIN谓词引出的子查询、由ANY/ALL谓词引出的子查询、由EXISTS/NOT EXISTS谓词引出的子查询
  4. 嵌套查询的执行过程
    • 不相关子查询的执行过程:从内向外依次执行
    • 相关子查询的执行过程:循环往返执行
  5. 带比较运算符的子查询
    • 比较运算符引出的子查询:

      SELECT sno, sname FROM Student WHERE dno = (SELECT dno FROM Student WHERE sname = '贾哲');
      

      image

  6. 带IN(或NOT IN)谓词的子查询
    • IN谓词引出的子查询:

      SELECT sname FROM Student WHERE sno IN (SELECT sno FROM SC WHERE cno = 'C3');
      

      image

    • NOT IN谓词引出的子查询:

      SELECT sname FROM Student WHERE sno NOT IN (SELECT sno FROM SC WHERE cno = 'C3');
      

      image

  7. 带ANY/ALL谓词的子查询
    • ANY谓词引出的子查询:

      SELECT sname, birth FROM Student WHERE birth > ANY (SELECT birth FROM Student WHERE dno = 'D3') AND dno <> 'D3';
      

      image

    • ALL谓词引出的子查询:

      SELECT sname, birth FROM Student WHERE birth > ALL (SELECT birth FROM Student WHERE dno = 'D3') AND dno <> 'D3';
      
  8. 带EXISTS(或NOT EXISTS)谓词的子查询
    • EXISTS谓词引出的子查询:

      SELECT sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE cno = 'C3' AND sno = Student.sno);
      
    • NOT EXISTS谓词引出的子查询:

      SELECT sname FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE cno = 'C3' AND sno = Student.sno);
      
  9. 用存在量词实现全称量词
    • 全称量词的表达:

      SELECT sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE sno = Student.sno AND cno = Course.cno));
      

      image

  10. 用存在量词实现蕴涵逻辑
    • 蕴涵逻辑的表达:

      SELECT DISTINCT sno FROM SC SCX WHERE SCX.sno <> 'S3' AND NOT EXISTS (SELECT * FROM SC SCY WHERE SCY.sno = 'S3' AND NOT EXISTS (SELECT * FROM SC SCZ WHERE SCZ.sno = SCX.sno AND SCZ.cno = SCY.cno));
      

      image

3.4.5 集合查询
  1. 定义
    1. 集合查询是对两个或多个SELECT查询结果的集合进行并、交、差等集合运算。
  2. 特点:
    • 并运算:包括两个查询语句结果的所有元组。
    • 交运算:包括两个查询结果中共有的元组。
    • 差运算:包括属于第一个结果集但不属于第二个结果集中的元组。
  3. 并运算
    • 并运算:

      SELECT sno FROM SC WHERE cno = 'C1' UNION SELECT sno FROM SC WHERE cno = 'C3';
      

      image

  4. 交运算
    • 交运算:

      SELECT sno FROM SC WHERE cno = 'C1' AND sno IN (SELECT sno FROM SC WHERE cno = 'C3');
      

      image

  5. 差运算
    • 差运算:

      SELECT sno FROM SC WHERE cno = 'C1' AND sno NOT IN (SELECT sno FROM SC WHERE cno = 'C3');
      

      image

3.4.6 多表查询的等价形式
  1. 定义
    1. 多表查询的等价形式指的是通过不同的查询方法实现相同的查询结果。常见的等价形式包括自然连接、带有IN谓词的子查询、带有比较运算符的子查询、ANY/ALL引出的子查询、EXISTS/NOT EXISTS引出的子查询以及多种混合形式。
  2. 多表查询的肯定形式
    • 自然连接(显式内连接和隐式内连接)

      • 显式

        • SELECT sno, sname
          FROM Student
          INNER JOIN SC ON Student.sno = SC.sno
          INNER JOIN Course ON Course.cno = SC.cno
          WHERE score < 60 AND cname = '数据库';
          
      • 隐式

        • SELECT Student.sno, sname
          FROM Student, SC, Course
          WHERE Student.sno = SC.sno 
          AND Course.cno = SC.cno 
          AND score < 60 
          AND cname = '数据库';
          
    • IN嵌套

      • SELECT sno, sname
        FROM Student
        WHERE sno IN (SELECT snoFROM SCWHERE score < 60AND cno IN (SELECT cnoFROM CourseWHERE cname = '数据库')
        );
        
    • ANY/ALL嵌套及其等价的表达

      • SELECT sno, sname
        FROM Student
        WHERE sno = ANY (SELECT snoFROM SCWHERE score < 60AND cno = ANY (SELECT cnoFROM CourseWHERE cname = '数据库')
        );
        
    • EXISTS嵌套

      • SELECT sno, sname
        FROM Student
        WHERE EXISTS (SELECT *FROM SCWHERE score < 60AND SC.sno = Student.sno AND EXISTS (SELECT *FROM CourseWHERE cname = '数据库'AND Course.cno = SC.cno)
        );
        
    • 多种混合形式

      • SELECT sno, sname
        FROM Student
        WHERE sno IN (SELECT snoFROM SC, CourseWHERE SC.cno = Course.cno AND score < 60 AND cname = '数据库'
        );
        
  3. 多表查询的否定形式
    • NOT IN嵌套

      • SELECT cno, cname
        FROM Course
        WHERE cno NOT IN (SELECT cnoFROM SCWHERE sno IN (SELECT snoFROM StudentWHERE sname = '陈茹')
        );
        
    • <>ALL嵌套

      • SELECT cno, cname
        FROM Course
        WHERE cno <> ALL (SELECT cnoFROM SCWHERE sno IN (SELECT snoFROM StudentWHERE sname = '陈茹')
        );
        
    • NOT EXISTS嵌套

      • SELECT cno, cname
        FROM Course
        WHERE NOT EXISTS (SELECT *FROM SCWHERE EXISTS (SELECT *FROM StudentWHERE sname = '陈茹'AND sno = SC.snoAND SC.cno = Course.cno)
        );
        

总结

SQL数据查询功能强大,能完成各种复杂的查询操作。通过单表查询、分组查询、连接查询、嵌套查询和集合查询,可以实现对数据库的全面查询和分析。不同类型的查询可以通过多种等价形式表示,选择合适的查询方式可以提高查询效率。

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

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

相关文章

SQL的高级查询练习知识点(day24)

目录 1 学习目标 2 基础查询 2.1 语法 2.2 例子 3 条件查询 3.1 含义 3.2 语法 3.3 条件表达式 3.3.1 条件运算符 3.3.2 例子 3.4 逻辑表达式 3.4.1 逻辑运算符 3.4.2 例子 3.5 模糊查询 3.5.1 概述 3.5.2 例子 4 DISTINCT关键字 4.1 含义 4.2 例子 5 总结…

2024 年高教社杯全国大学生数学建模竞赛B题第二问详细解题思路(终版)

示例代码&#xff1a; import numpy as np import pandas as pd# 参数设定 params {p1: 0.10, p2: 0.10, c1: 4, c2: 2, d1: 2, d2: 3,pf: 0.10, a: 6, df: 3, s: 56, l: 6, r: 5 }# 决策变量 decisions [0, 1]# 利润计算函数 def calculate_profit(D1, D2, C, R, params):c…

Spring-@Bean的处理流程

Bean前置知识 1 需要再Configuration Class中才能被解析 2 静态Bean也就是标注在static方法上的 实例Bean标注在普通方法上的 所有的Bean在创建之前都会变成BeanDefinition,其中有这样两个属性&#xff1a; setFactoryMethodName&#xff1a;静态方法 setFactoryBeanName&…

Hive SQL基础语法及查询实践

目录 基础语法 1. 官网地址 2. 查询语句语法 基本查询&#xff08;Select…From&#xff09; 数据准备 &#xff08;0&#xff09;原始数据 &#xff08;1&#xff09;创建部门表 &#xff08;2&#xff09;创建员工表 &#xff08;3&#xff09;导入数据 全表和特定列查…

2024年四川省安全员B证证考试题库及四川省安全员B证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年四川省安全员B证证考试题库及四川省安全员B证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

使用 EMQX 开源版的 Webhook 机制处理消息并存储数据

1、前言 EMQX 是一款强大的开源 MQTT 消息代理&#xff0c;它支持大量的连接和高吞吐量&#xff0c;适用于各种物联网应用。Webhook 是 EMQX 提供的扩展功能之一&#xff0c;用于将消息推送到外部的 HTTP 服务。在本文中&#xff0c;我们将介绍如何使用 EMQX 开源版的 Webhook …

蜜罐网络MHN安装过程中的坑

蜜罐网络MHN安装过程中的坑 1. 相当的资源在github上&#xff0c;下不下来 科学上网&#xff0c;直接sudo proxychains4 ./install.sh是不行的&#xff0c;修改不了sh脚本里面的访问 配置好proxychains4以后&#xff0c;直接修改系统别名&#xff1a; alias wgetproxychai…

Java+Swing+sqlserver学生成绩管理系统

JavaSwingsqlserver学生成绩管理系统 一、系统介绍二、系统展示1.登陆2.课程分配3.选课管理4.学生打分--教师4.查询个人成绩--学生 三、其他1.其它系统 一、系统介绍 管理员:登陆页面、课程管理、选课管理 老师&#xff1a;给学生打分 学生&#xff1a;查询个人成绩 二、系…

node.js、php、Java、python校园点餐与数据分析系统 校园食堂订餐系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

日本IT编程语言对比分析-Python /Ruby /C++ /Java

在日本IT行业中&#xff0c;Python、Ruby、C和Java是几种广泛使用的编程语言&#xff0c;它们各自具有独特的优势和适用场景。以下是对这四种编程语言的对比分析&#xff1a; 1. Python 优势&#xff1a; 简洁易读&#xff1a;Python的语法简洁清晰&#xff0c;易于学习和使用…

五,Spring Boot中的 Spring initializr 的使用

五&#xff0c;Spring Boot中的 Spring initializr 的使用 文章目录 五&#xff0c;Spring Boot中的 Spring initializr 的使用1. 方式1&#xff1a;IDEA创建2. 方式2&#xff1a;start.spring.io 创建3. 注意事项和细节4. 最后&#xff1a; 需要&#xff1a;使用 Spring initi…

电器维修系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;客服聊天管理&#xff0c;基础数据管理&#xff0c;公告管理&#xff0c;新闻信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;新闻信息&#xff0c;我的 开发系…

OpenCV绘图函数(15)图像上绘制矩形函数 rectangle()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 绘制一个简单的、粗的或填充的直立矩形。 这个函数 cv::rectangle 绘制一个矩形轮廓或一个填充的矩形&#xff0c;其两个相对的顶点分别是 pt1 和…

Arcgis字段计算器:随机生成规定范围内的数字

选择字段计算器在显示的字段计算器对话框内&#xff0c;解析程序选择Python&#xff0c;勾选上显示代码块&#xff0c; 半部分输入&#xff1a; import random; 可修改下半部分输入&#xff1a; random.randrange(3, 28) 表示生成3-28之间的随机数 字段计算器设置点击确定…

Java+Swing可视化图像处理软件

JavaSwing可视化图像处理软件 一、系统介绍二、功能展示1.图片裁剪2.图片缩放3.图片旋转4.图像灰度处理5.图像变形6.图像扭曲7.图像移动 三、系统实现1.ImageProcessing.java 四、其它1.其他系统实现 一、系统介绍 该系统实现了图片裁剪、缩放、旋转、图像灰度处理、变形、扭曲…

[Go]-抢购类业务方案

文章目录 要点&#xff1a;1. 抢购/秒杀业务的关键挑战2. 技术方案3.关键实现点4.性能优化建议5.其他考虑因素 细节拆分&#xff1a;1. **高并发处理**2.**限流与防护**3.**库存控制**4. **异步处理**5. **数据一致性**6. **常用架构设计**7. **代码示例**8. 进一步优化9. 注意…

谈一谈MVCC

一 MVCC的定义 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是一种用于数据库管理系统&#xff08;DBMS&#xff09;中的并发控制方法&#xff0c;它允许数据库读写操作不加锁地并发执行&#xff0c;从而提高了数据库系统的并发性…

苹果手机突然黑屏打不开怎么办?

苹果手机作为市场上备受欢迎的智能手机之一&#xff0c;其稳定性和流畅性一直备受赞誉。然而&#xff0c;偶尔遇到手机突然黑屏无法打开的情况&#xff0c;也会让不少用户感到困扰。今天&#xff0c;我们就来详细探讨一下苹果手机突然黑屏打不开的解决方法&#xff0c;帮助大家…

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…

【RabbitMQ之一:windows环境下安装RabbitMQ】

目录 一、下载并安装Erlang1、下载Erlang2、安装Erlang3、配置环境变量4、验证erlang是否安装成功 二、下载并安装RabbitMQ1、下载RabbitMQ2、安装RabbitMQ3、配置环境变量4、验证RabbitMQ是否安装成功5、启动RabbitMQ服务&#xff08;安装后服务默认自启动&#xff09; 三、安…