当前位置: 首页 > news >正文

(四)DQL数据查询语言

基础语法

SELECT {*,列名,函数} 
FROM 表名 
[WHERE 条件];

说明:
-SELECT检索关键字  *匹配所有列  ,  匹配指定列  
-FROM  所提供的数据源(表,视图,另一个查询机制反馈的结果)
-WHERE 条件(控制查询的区域)

结论:

SELECT 关键字 和 FROM 关键字之间的语句控制结果的列数
WHERE后面跟的语句控制结果的行数

SELECT 语句中的算数

运算符优先级:括号>乘除>加减

运算顺序:从左往右

null:不可用、未分配的值,不等于零或空格

将两个变量使用运算符进行运算时会自动将字符串转回为数值进行计算,如果字符串中不是数字则会转为数值0

当有一个变量值为null进行运算时,则计算结果为null

补充:

<==>:安全等于,等价于  =  和  IS 两者的结合

1、定义字段的别名

关键字:AS

位置:SELECT后接的列名后面

SELECT StudentName,Address,Email 
FROM student;

SELECT StudentName AS '学生姓名',Address AS '家庭住址',Email AS '电子邮箱' 
FROM student;
或
SELECT StudentName “学生姓名”,Address “家庭住址”,Email “电子邮箱” 
FROM student;

2、祛除重复的记录

关键字:DISTINCT

位置:SELECT后

例:

SELECT DISTINCT sex "性别" 
FROM student;

3、WHERE 限制

比较运算符

  • <
  • >
  • <=
  • >=
  • !=

逻辑运算符

  • AND
  • OR
  • NOT

BETWEEN关键字:实现范围查询

IN关键字

LIKE关键字:用于执行模糊查询,查询条件可以包含文字字符或占位符

  • %:匹配0或多个字符
  • _:匹配一个字符

例:

1、比较符、逻辑符
SELECT *
FROM student
WHERE GradeId = 1 AND BornDate > '1980-01-01' AND sex = 1;2、BETWEEN AND关键字
SELECT StudentName "姓名"
FROM student
WHERE BornDate BETWEEN '2000-01-01' AND '2010-01-01';3、IN关键字
SELECT StudentName "姓名"
FROM student
WHERE GradeId IN (1,2,3);4、LIKE关键字
SELECT StudentName "姓名"
FROM student
WHERE StudentName LIKE '李%';

4、GROUP BY 分组查询

作用:与聚合函数组合使用,将查询的记录进行分组

含义:把表中列值相同的多条记录,当成是一条记录进行处理,最终也只输出一条记录,分组函数忽略空值

语法:

SELECT {*,列名,函数} 
FROM 表名 
[WHERE 基础条件]
[GROUP BY 分组条件]
[HAVING 过滤条件]

分组函数的重要规则:

  1. 如果使用了分组函数或GROUP BY (字段1,字段2,...)执行查询,那么出现在SELECT 列表后的字段必须是聚合函数或出现过在GRUOP字句内。
  2. GRUOP BY子句的字段可以不出现在SELECT内。
  3. 使用聚合函数但不使用分组查询时,那么所有的数据会作为一组进行显示
  4. GROUP BY前面的 WHERE 表示 分组前执行的条件过滤
  5. GROUP BY后面的 HAVING表示 分组后执行的条件过滤

4.1排序查询ASC||DESC

SELECT {*,列名,函数} 
FROM 表名 
[WHERE 基础条件]
[GROUP BY 分组条件]
[HAVING 过滤条件]
[ORDER BY (需要排序的字段) ASC||DESC];  #ASC升序(升序)  DESC(降序)

例:

#示例1、查询平均成绩在80以上的学生(学号)信息,同时成绩还需要按照降序排列
SELECT StudentNo "学号",AVG(StudentResult) "成绩"
FROM result
GROUP BY (StudentNo)
HAVING AVG(StudentResult) > 80;
ORDER BY(AVG(StudentResult)) DESC;

4.2区间查询LIMIT

SELECT {*,列名,函数} 
FROM 表名 
[WHERE 基础条件]
[GROUP BY 分组条件]
[HAVING 过滤条件]
[ORDER BY (需要排序的字段) ASC||DESC]  #ASC升序(升序)  DESC(降序)
[LIMIT A,B];

LIMIT 连续区间查询
LIMIT A,B      A表示需要查询的行的索引位    B所查询的容量
LIMIT 0,5      第一行---第五
LIMIT 5,5      第六行---第十
LIMIT 10,5     第十一---第十五
分页查询的前置
以baidu热搜为例
 >>>>>>>>>>>>>    第一页    LIMIT 0,6
 >>>>>>>>>>>>>    第二页    LIMIT 6,6
 >>>>>>>>>>>>>    第三页    LIMIT 12,6
 >>>>>>>>>>>>>    第四页    LIMIT 18,6
 >>>>>>>>>>>>>    第五页    LIMIT 24,6
 >>>>>>>>>>>>>    第六页    LIMIT 30,6
 >>>>>>>>>>>>>             LIMIT (当前页码数-1)*容量,容量

例:

 #示例1:求学校学生中 三甲学生的信息#分析 学生总分 降序排列 区间取前三SELECT StudentNo "学号",SUM(StudentResult) "总成绩"FROM resultGROUP BY (StudentNo)ORDER BY(SUM(StudentResult)) DESCLIMIT 0,3;

4.3分组数据合并GROUP_CONCAT

例:

#示例1 根据班级进行分组,要求查看各班人数,以及各班学员姓名。
SELECT GradeID "班级编号",COUNT(*) "班级人数",GROUP_CONCAT(StudentName) "学员姓名"
FROM student
GROUP BY(GradeID);

注意事项:
1、使用GROUP_CONCAT()时必须要对数据源进行分组,如果不分组,所有数据都将合并成一行
2、对结果集排序 查询语句执行的查询结果,数据是按照插入时顺序进行排序。
3、实际上需要按照某列大小值进行拍讯的话,建议只针对于数值或日期通过 ORDER BY函数进行排序
4、在语句最后也可以通过LIMIT控制容量大小

5、多表关联查询

5.1交叉连接查询

查询多个表的数据

#示例1:查询所有的学生+所有的班级信息
SELECT * 
FROM student,grade; 

5.2等值连接查询

语法:

SELECT * 
FROM 表1,表2,... 
WHERE 表1.列 = 表2.列 [AND...];

例:

示例:查询所有的学生姓名,住址,班级名称
SELECT s.StudentName "姓名",s.Address "住址",g.GradeName "班级名称"
FROM student s,grade g
WHERE s.GradeID = g.GradeID;

等值连接确实能够帮助我们完成表于表之间的联系,但是WHERE这个关键字一开始是作为基础条件关键字出现的,而我们把表与表之间关系的描述通过WHERE去实施,难免大材小用,于是我们决定释放WHERE关于等值连接的操作。

5.3内连接查询

关键字:INNER JOIN

语法:

SELECT * 
FROM 表1 INNER JOIN 表2 ON 表1.列 = 表2.列 [INNER JOIN 表3 ON 关系 .....]
[WHERE 基础条件];

例:

示例:练习查询学生姓名,参考科目,考试时间,考试成绩
SELECT s.StudentName "学生姓名",su.SubjectName "参考科目",r.ExamDate "考试时间",r.StudentResult "考试成绩" 
FROM student s INNER JOIN result r ON r.StudentNo = s.StudentNo
INNER JOIN subject su ON r.SubjectNo = su.SubjectNo;

内连接查询的本质和等值实际上没有区别,但是内连接可以释放WHERE关键字,使表与表之间关系更加清晰

5.4外连接查询

5.4.1 左外连接

关键字:LEFT JOIN  

获取相交数据+左外关键字以左表的全部数据

SELECT s.StudentName "姓名",s.Address "住址",g.GradeName "班级名称"
FROM grade g LEFT JOIN student s ON s.GradeID = g.GradeID;

5.4.2 右外连接

关键字:RIGHT JOIN  

获取相交数据+右外关键字以右的全部数据

SELECT s.StudentName "姓名",s.Address "住址",g.GradeName "班级名称"
FROM student s RIGHT JOIN grade g ON s.GradeID = g.GradeID;

5.5自然连接查询

自己和自己形成主外键关系

SELECT c1.categoryName "父级目录",c2.categoryName "子栏目"
FROM category c1 INNER JOIN category c2 ON c1.categoryId = c2.pid;

6、子查询

  • 1、将一个查询语句的结果充当下一个查询语句的条件
  • 2、核心在于通过小括号以提高优先级别
  • 3、子查询中可以包含的关键字 IN  NOT  ALL
  • 4、子查询中可以包含的运算符 逻辑+算数
#示例1:查询大一的男生姓名及家庭住址
#1--大一对应的班级编号
SELECT GradeID FROM grade WHERE  GradeName = '大一';     ======>    1
#2--以一年级一班对应的班级编号作为线索,去找适配的学生信息
SELECT StudentName "姓名",Address "住址"
FROM student WHERE GradeID = 
(SELECT GradeID FROM grade WHERE  GradeName = '大一');
#3--加入我们的基础条件
SELECT StudentName "姓名",Address "住址"
FROM student WHERE GradeID = 
(SELECT GradeID FROM grade WHERE  GradeName = '大一') AND sex = 1;
#示例2:查询班级名称是大一(学生信息==>学号信息),科目是高等数学-1(科目编号) 的学生的平均分
>>>>需求1 根据班级名 找出班级 编号
SELECT GradeID
FROM grade WHERE GradeName = '大一';
>>>>需求2 根据对应的班级编号 找到适配的学生学号
SELECT StudentNo
FROM student WHERE GradeID = (SELECT GradeID
FROM grade WHERE GradeName = '大一')
>>>>需求3 根据科目名找到对应的科目编号
SELECT subjectNo
FROM subject WHERE subjectName = '高等数学-1';
>>>>编辑最后的命令
SELECT AVG(result.StudentResult)
FROM result
WHERE result.SubjectNo = (SELECT subjectNo
FROM subject WHERE subjectName = '高等数学-1')
AND result.StudentNo IN (SELECT StudentNo
FROM student WHERE GradeID = (SELECT GradeID
FROM grade WHERE GradeName = '大一'));

相关文章:

(四)DQL数据查询语言

基础语法 SELECT {*,列名,函数} FROM 表名 [WHERE 条件]; 说明&#xff1a; -SELECT检索关键字 *匹配所有列 , 匹配指定列 -FROM 所提供的数据源&#xff08;表&#xff0c;视图&#xff0c;另一个查询机制反馈的结果&#xff09; -WHERE 条件&#xff08;控制查询的区…...

网络安全03---Nginx 解析漏洞复现

目录 一、准备环境 二、实验开始 2.1上传压缩包并解压 2.2进入目录&#xff0c;开始制作镜像 2.3可能会受之前环境影响&#xff0c;删除即可 ​编辑 2.4制作成功结果 2.5我们的环境一个nginx一个php 2.6访问漏洞 2.7漏洞触发结果 2.8上传代码不存在漏洞 2.9补充&#…...

第十四届蓝桥杯C组题目 三国游戏

4965. 三国游戏 - AcWing题库 小蓝正在玩一款游戏。 游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z&#xff08;一开始可以认为都为 00&#xff09;。 游戏有 n 个可能会发生的事件&#xff0c;每个事件之间相互独立且最多只会发生一次&#xff0c;当第 i个事件发生时会分…...

【LeetCode-435】无重叠区间(贪心)

题目链接 题目简介 给定一个区间的集合&#xff0c;找到需要移除区间的最小数量&#xff0c;使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”&#xff0c;但没有相互重叠。 示例 1: 输入: [ [1,2], [2,3], [3,4…...

写读后感的时候,可以适当地引用书中的内容吗?

写读后感时&#xff0c;适当地引用书中的内容是可以的&#xff0c;这样可以更好地支持你的观点和感受&#xff0c;增强文章的可信度和说服力。 引用书中的内容可以帮助读者更好地理解你所讨论的主题和人物&#xff0c;同时也可以展示你对原著的深入理解和阅读能力。但是&#…...

RockChip DRM Display Driver

资料来源: 《Rockchip_DRM_Display_Driver_Development_Guide_V1.0.pdf》 《Rockchip_Developer_Guide_DRM_Display_Driver_CN.pdf》 一:DRM概述 DRM(Direct Rendering Manager)直接渲染管理,buffer分配,帧缓冲。对应userspace库位libdrm,libdrm库提供了一系列友好的…...

【数据库】GaussDB数据类型和简单DDL概述

GaussDB是一款华为公司开发的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;提供了多种数据类型用于存储和处理不同类型的数据。以下是GaussDB常见的数据类型&#xff1a; 1、GaussDB常见的数据类型 1.1、数值型&#xff08;Numeric Types&#xff09;&…...

malloc/free和new/delete相关问题:

面试题&#xff1a; 1、两种方式的区别&#xff1a; &#xff08;1&#xff09;malloc需要强制类型转换&#xff0c;new不需要 &#xff08;2&#xff09;malloc需要计算空间大小&#xff0c;new不需要 例如&#xff1a;创建5个int类型的空间 int*p(int *)malloc(sizeof(i…...

设计一套扑克牌

约束和假设 这是一幅用于类似扑克和二十一点等游戏的通用扑克牌吗&#xff1f; 我们可以假设这副牌有52张&#xff08;2-10&#xff0c;杰克&#xff0c;女王&#xff0c;国王&#xff0c;埃斯&#xff09;和4种花色吗&#xff1f; 我们可以假设输入是有效的&#xff0c;还是需…...

ubuntu20.04 外接hdmi没有声音

pulseaudio -k 请尝试执行该命令...

Mybatis 拦截器注册方式

在MyBatis中注册拦截器可以通过以下三种方式&#xff1a; 1. XML配置文件方式 在Mybatis的核心配置文件&#xff08;mybatis-config.xml&#xff09;中的标签下定义拦截器&#xff0c;并指定实现类。 <configuration><!-- ...其他配置... --><plugins><…...

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现SPI控制OLED屏幕

上一篇&#xff1a; [嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…...

个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程

个体诊所电子处方系统设计&#xff0c;社区门诊处方开单管理系统软件教程 一、前言 以下软件程序操作教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 如图&#xff0c;在基本信息设置里&#xff0c;可以设置处方配方模板&#xff0c;这样在开电子处方的时候可以一键导入…...

数据结构(1)--> 顺序表

定义&#xff1a; 顺序表存储定义&#xff1a; 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构&#xff0c;顺序表功能的实现借助于数组&#xff0c;通过对数组进行封装&#xff0c;从而实现增删查改的功能&#xff0c;严格意义上来说&#xff08;数组无法实现…...

排序算法经典模型: 梯度提升决策树(GBDT)的应用实战

目录 一、Boosting训练与预测 二、梯度增强的思想核心 三、如何构造弱学习器和加权平均的权重 四、损失函数 五、梯度增强决策树 六、GBDT生成新特征 主要思想 构造流程 七、梯度增强决策树以及在搜索的应用 7.1 GDBT模型调参 7.1.1 框架层面参数 n_estimators su…...

【揭秘】ForkJoinTask全面解析

内容摘要 ForkJoinTask的显著优点在于其高效的并行处理能力&#xff0c;它能够将复杂任务拆分成多个子任务&#xff0c;并利用多核处理器同时执行&#xff0c;从而显著提升计算性能&#xff0c;此外&#xff0c;ForkJoinTask还提供了简洁的API和强大的任务管理机制&#xff0c…...

如何利用数据压缩提高高性能存储的效率?

在当前信息爆炸的时代&#xff0c;大数据存储和管理成为了各大企业和组织面临的重要挑战之一。高性能存储系统的效率对于数据处理和应用的性能至关重要。而数据压缩技术的应用可以在一定程度上提高高性能存储的效率。 数据压缩技术的作用 数据压缩是通过对数据进行编码和压缩…...

前端工程化之:webpack1-2(安装与使用)

一、webpack简介 webpack中文网 webpack 是基于模块化的打包(构建)工具&#xff0c;它把一切视为模块它通过一个开发时态的入口模块为起点&#xff0c;分析出所有的依赖关系&#xff0c;然后经过一系列的过程(压缩、合并)&#xff0c;最终生成运行时态的文件。 webpack的特点&a…...

MySQL索引类型及数据结构【笔记】

1 索引类型 返回面试宝典 主键索引&#xff08;PRIMARY&#xff09;:数据列不允许重复&#xff0c;不允许为NULL&#xff0c;一个表只能有一个主键。 唯一索引&#xff08;UNIQUE&#xff09;:数据列不允许重复&#xff0c;允许为NULL&#xff0c;一个表允许多个列创建唯一索引…...

成熟的内外网数据交换方案,如何实现跨网传输?

网络迅速发展&#xff0c;我们可以从网络上查找到各式各样的信息&#xff0c;但是同时网络安全问题也随之严重。近几年&#xff0c;各种有关网络安全的新闻不断被报道&#xff0c;数据泄露给很多企业带来了严重打击&#xff0c;不仅是经济损失&#xff0c;严重者还会对企业的声…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...