【MySQL】数据查询——DQL基本数据库查询
目录
- 查询
- 语法
- 1. 查询表中所有的数据行和列,采用“*”符号
- 2. 查询表中指定列的数据。
- 3. 在查询中使用别名,使用“AS”关键字。
- 4. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常量列
- 5. DISTINCT关键字的使用:去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条
- WHERE条件
- NULL空值条件查询
- 语法
- BETWEEN AND范围查询
- 语法
- LIKE模糊查询
- 使用IN进行范围查询
- 语法
- 排序
- 分页
- 分组查询
- 子查询
- 语法
- 案例
- IN子查询
- 语法
- SQL示例
- 综合案例
- EXISTS 子查询
- 语法
- SQL示例
查询

- 查询产生一个虚拟表。
- 看到的是表形式显示的结果,但结果并不真正存储。
- 每次执行查询只是从数据表中提取数据,并按照表格的形式显示出来。
语法
SELECT [ALL | DISTINCT]
{ * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] }
FROM table_name [ as table_ alias ][ left|out|inner join table_name2 ] #多表连接查询[ WHERE … ] #指定结果需满足的条件[ GROUP BY …] #指定结果按照哪几个字段来分组[ HAVING …] #过滤分组的记录必须满足的次要条件[ ORDER BY… ] #指定查询记录按一个或者多个条件排序[ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ; #分页查询
- 括号代表可选的;
- { } 括号代表必须的;
- #MySQL语句中的注释符,也可以用 /**/
1. 查询表中所有的数据行和列,采用“*”符号
SELECT * FROM 表名;
SELECT * FROM student;
2. 查询表中指定列的数据。
SELECT 字段名1,字段名2,…字段名n FROM 表名;
SELECT studentno, studentname, phone FROM student;
3. 在查询中使用别名,使用“AS”关键字。
- 可给数据列取一个新别名
- 可给表取一个新别名
- 可把经计算或总结的结果用另外一个新名称来代替
SELECT field1 [ AS alias1] [,field2 [AS alias2]] […,fieldn [AS aliasn]]
FROM table_name [ AS table_ alias ];
SELECT studentno AS “学号” FROM student;
SELECT s.studentno FROM student AS s;
SELECT CONCAT("S",studentno) FROM student;
4. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常量列
SELECT studentno AS “学号”, studentname AS “姓名”,phone AS “手机号”,address AS “家庭住址”,‘郑州’ AS “市区”FROM student;
5. DISTINCT关键字的使用:去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条
SELECT DISTINCT field1 [ AS alias1] [,field2 [AS alias2]] […,fieldn [AS aliasn]] FROM table_name [ AS table_ alias ];
#查询学生表中所包含的年级IDSELECT DISTINCT gradeid FROM student;
WHERE条件
- WHERE条件:用于检索数据表中符合条件的记录
- 搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
- 搜索条件的组成
-
逻辑操作符

-
比较操作符
数值数据类型的记录之间才能进行算术运算
相同数据类型的数据之间才能进行比较
-
NULL空值条件查询
- NULL代表“无值”
- 区别于零值0和空符串“”
- 只能出现在定义允许为NULL的字段
- 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较
语法
SELECT 字段1,字段2 ,…FROM 表名 WHERE 字段x IS NULL
BETWEEN AND范围查询
- BETWEEN AND范围查询:根据一个范围值来检索
- 等同于 >= 和 <= 联合使用
语法
SELECT 字段1,字段2 ,…FROM 表名 WHERE 字段x BETWEEN 值1 AND 值2
#查询课程表中课时在110和120之间的所有记录SELECT * FROM subject WHERE classhour BETWEEN 110 AND 120;
#等同于:SELECT * FROM subject WHERE classhour >= 110 AND classhour <=120;
LIKE模糊查询
- 在WHERE子句中,使用LIKE关键字进行模糊查询
- 与“%”一起使用,表示匹配0或任意多个字符
- 与“_”一起使用,表示匹配单个字符
#查询包含“数学”的所有课程
SELECT * FROM subject WHERE SubjectName LIKE "%数学%";
#查询所有姓名为“李**”三个字的学生信息
SELECT StudentNo,StudentName FROM student
WHERE StudentName LIKE "李__";
使用IN进行范围查询
- 在WHERE子句中使用IN进行范围查询
- 查询的字段x的值,至少与括号中的一个值相同
- 多个值之间用英文逗号隔开
语法
SELECT 字段1,字段2 ,…FROM 表名 WHERE 字段x IN ( 值1,值2,值3…值n)
SELECT * FROM subject where ClassHour = 100 OR ClassHour =110 OR ClassHour = 120; #普通处理方式
SELECT * FROM subject where ClassHour IN ( 100, 110,120 );
#使用IN进行查询方式,更为简洁,效率更高
排序
- ORDER BY子句:实现按一定顺序显示查询结果。
- 排序可以是升序(ASC)或者降序(DESC),如果不指定ASC或DESC,结果集默认按ASC升序排序
#把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC;#把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序,如果成绩
#相同,再按照课程编号进行排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC,subjectno;
分页
LIMIT 子句:MySQL查询语句中使用LIMIT子句限制结果集
- 应用1:限制显示的结果集的行数(小说排行榜 新闻只显示最新的5条)
#查询课程编号为1的,考试日期为2019年的考试的前5名同学的学号和成绩
SELECT studentno,studentresult
FROM result
WHERE subjectno=1 AND YEAR(examdate)=2019
ORDER BY studentresult DESC
LIMIT 5
- 应用2:分页查询(分页显示数据)
limit后跟连个数字时,第一个表示偏移量(索引),第二个显示条数
#查询学生表的学号、姓名、电话 ,每页显示2条记录
#第一条记录的偏移量为0
#第一页
#偏移量 0 1
SELECT studentno,studentname,phone FROM student
LIMIT 0,2
分组查询
- [ GROUP BY …] #指定结果按照哪几个字段来分组
- [ HAVING …] #过滤分组的记录必须满足的次要条件
- 对所有的数据进行分组统计
- 分组的依据字段可以有多个,并依次分组
- 与HAVING结合使用,进行分组后的数据筛选
- GROUP BY子句经常和聚合函数结合使用完成分组统计功能
#查询每门课程及格总人数和及格学生的平均分
SELECT SUBJECTNO,COUNT(1),AVG(STUDENTRESULT) FROM RESULT
WHERE STUDENTRESULT >= 60
GROUP BY SUBJECTNO;#查询每门课程及格总人数和及格平均分在80分以上的记录
SELECT SUBJECTNO,COUNT(1),AVG(STUDENTRESULT) FROM RESULT
WHERE STUDENTRESULT >= 60
GROUP BY SUBJECTNO
HAVING AVG(STUDENTRESULT) > 80;#查询每门课程的平均分,并按照降序排列
SELECT SUBJECTNO,AVG(STUDENTRESULT) AVG FROM RESULT
GROUP BY SUBJECTNO
ORDER BY AVG DESC;#查询每个学生参加的所有考试的总分,并按照降序排列
SELECT STUDENTNO,SUM(STUDENTRESULT) SUM FROM RESULT
GROUP BY STUDENTNO
ORDER BY SUM DESC;#查询每个年级学生的平均年龄
SELECT GRADEID,AVG(YEAR(NOW())-YEAR(BORNDATE)) FROM STUDENT
GROUP BY GRADEID;#查询考试不及格的学生学号和不及格的次数
SELECT STUDENTNO,COUNT(STUDENTRESULT) FROM RESULT
WHERE STUDENTRESULT < 60
GROUP BY STUDENTNO;
子查询
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。
语法
SELECT … FROM 表名 WHERE 字段X 比较运算符(子查询)
- 习惯上,外层查询称为父查询,圆括号中嵌入的查询称为子查询。
- 执行SQL语句时,先执行子查询,返回所有来自子查询的结果,再执行外围的父查询,返回查询的最终结果(即求解方式为由里及外)。
- 将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个(否则会出现提示信息:错误代号1242 Subquery returns more than 1 row)。
案例
编写SQL语句,查看年龄比“李斯文”小的学生,要求显示这些学生的信息(学号、姓名、出生日期)
SELECT studentno, studentname,borndate FROM student WHERE borndate >
(SELECT borndate FROM student WHERE studentname= '李斯文’);
IN子查询
查询课程名称为”JavaOOP”且考试分数大于60分的学生信息(学号、姓名和联系电话)。
- IN后面的子查询可以返回多条记录。
- 常用IN替换等于(=)的子查询。
语法
SELECT … FROM 表名 WHERE 字段X IN(子查询)
SQL示例
#查询课程名称为”JavaOOP”且考试分数大于60分的学生信息(学号、姓名和联系电话)。
SELECT studentno,studentname,phone FROM student WHERE studentno IN
(SELECT studentno FROM result WHERE studentresult>60 AND
subjectno=(SELECT subjectno FROM `subject`WHERE subjectname='JAVAOOP'))
综合案例
#查询年级名称为"大一"开设的课程信息(课程编号、课程名称、课时数)
SELECT SUBJECTNO,SUBJECTNAME,CLASSHOUR FROM `SUBJECT`
WHERE GRADEID = (SELECT GRADEID FROM GRADE WHERE GRADENAME='大一');#查询课程名称为”高等数学-1”最近一次考试的学生信息(学号、姓名和联系电话)。
SELECT STUDENTNO,STUDENTNAME,PHONE FROM STUDENT
WHERE STUDENTNO IN (SELECT STUDENTNO FROM RESULT WHERE SUBJECTNO = (SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME = '高等数学-1') AND EXAMDATE = (SELECT MAX(EXAMDATE) FROM RESULTWHERE SUBJECTNO = (SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME = '高等数学-1'))
);#查询没有参加课程名称为”高等数学-1”最近一次考试的学生信息(学号、姓名和联系电话)。
SELECT STUDENTNO,STUDENTNAME,PHONE FROM STUDENT
WHERE STUDENTNO NOT IN (SELECT STUDENTNO FROM RESULT WHERE SUBJECTNO = (SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME = '高等数学-1') AND EXAMDATE = (SELECT MAX(EXAMDATE) FROM RESULTWHERE SUBJECTNO = (SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME = '高等数学-1'))
);
EXISTS 子查询
EXISTS 子查询:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”。
- 子查询有返回结果: EXISTS子查询结果为TRUE,执行外层查询;
- 子查询无返回结果: EXISTS子查询结果为FALSE, 外层查询不执行;
语法
SELECT …… FROM 表名 WHERE EXISTS(子查询);
SQL示例
# 检查“Logic Java”课程最近一次考试成绩,如果有 80分以上的成绩,显示分数排在前5名的学员学号和分数
SELECT sujectNo FROM `subjectl` WHERE subjectName='Logic Java'
SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM`subject` WHERE subjectName='Logic Java')
SELECT studentNO,studentResult
FROM result
WHERE EXISTS(SELECT * FROM resultWHERE studentResult>80AND subjectNo=(SELECT subjectNO FROM `subject` WHERE subjectName='Logic Java')AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java'))
)
AND subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java')
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java'))
ORDER BY studentResult DESC
LIMIT 5# 检查“Logic Java”课程最近一次考试成绩,如果全部未通过考试(60分及格),认为本次考试偏难,计算的该次考试平均分加5分
SELECT AVG(studentResult)+5
FROM result
WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java')
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java'))
AND NOT EXISTS(SELECT * FROM resultWHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java')AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java'))AND studentResult>100
)
相关文章:
【MySQL】数据查询——DQL基本数据库查询
目录 查询语法1. 查询表中所有的数据行和列,采用“*”符号2. 查询表中指定列的数据。3. 在查询中使用别名,使用“AS”关键字。4. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常…...
机器人持续学习基准LIBERO系列9——数据集轨迹查看
0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo机器人持续学习基准LIBERO系列5——…...
uniapp中canvas的基础使用
canvas简介 canvas是uniapp中提供的一个组件,用于生成自定义的图形界面。通过canvas,我们可以通过JavaScript代码在页面上绘制各种图形和图像。 使用canvas 在页面中添加canvas 首先需要在页面的template中添加一个canvas组件: <template><view><canvas ca…...
中科大计网学习记录笔记(十七):拥塞控制原理 | TCP 拥塞控制
前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…...
老隋蓝海项目有人盈利的吗?怎么做比较好些呢?
在互联网创业的浪潮中,蓝海项目总是令人心动。老隋,作为一位经验丰富的创业者,近期分享了他所发现的蓝海项目。但不少人可能会有疑问:老隋分享的蓝海项目真的有人盈利了吗?如果真的盈利了,又该怎么做才能确保成功呢?…...
递归与递推(蓝桥杯 c++)
目录 题目一: 代码: 题目二: 代码: 题目三: 代码: 题目四: 代码: 题目一: 代码: #include<iostream> #include<cstring> using namespace std; int …...
ArduinoTFTLCD应用
ArduinoTFTLCD应用 ArduinoTFTLCD应用硬件连接软件导入库显示数字、字符显示汉字方案1方案2 显示图片 总结 ArduinoTFTLCD应用 对于手工喜欢DIY的人来说,Arduino驱动的TFTLCD被很多人使用,此处就总结一下,使用的是VScode的PlatformIO插件驱动…...
《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!
在IP产业风起云涌的今天,如何以创意和匠心为传统文化注入新的活力,成为了摆在每一位文化工作者面前的重要课题。近日,《秦时明月》作为一部深受观众喜爱的国产动画IP,在迎来其十七周年之际,联手陕西历史博物馆…...
2、事件机制、DOM操作、jquery对尺寸操作、jquery添加和删除
一、事件机制 1、事件源.事件类型(事件处理程序) $(this)中的this不能加引号 $(#box).click(function () {$(this).css(background-color,blue)//点击颜色变为蓝色 })2、事件源.on/bind(事件类型,事件处理程序) $("#box").on(dbclick,function () {$(…...
YOLOv6-Openvino和ONNXRuntime推理【CPU】
1 环境: CPU:i5-12500 Python:3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包,主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…...
C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)
和黛玉学编程呀,大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道,在C语言中,对于一些数据是必须初始化的,但是结构体怎么创建并且初始化呢࿱…...
springboot240基于Spring boot的名城小区物业管理系统
基于Spring boot的名城小区物业管理系统的设计与实现 摘要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于物业信息的管理和控制,采用人工登记的方式保存相关数…...
Day13:信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目
目录 JS前端架构-识别&分析 JS前端架构-开发框架分析 前端架构-半自动Burp分析 前端架构-自动化项目分析 思维导图 章节知识点 Web:语言/CMS/中间件/数据库/系统/WAF等 系统:操作系统/端口服务/网络环境/防火墙等 应用:APP对象/API接…...
AJAX 学习笔记(Day1)
「写在前面」 本文为黑马程序员 AJAX 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。 目录 0 课程介绍 1 AJAX 入门 1.1 AJAX 概念和 axios 使用 1.2 认识 URL 1.3 URL 查询参数 1.4 常用请求方法和数据提交 1.5 HT…...
leetcode 740.删除并活得点数
这道题和打家劫舍得思路很像。 思路:首先我们看到题目的意思,就是说我们如果选择了一个数,那么它相邻的数就会不得选入,也就是删除。这就是上一个题那个相邻的家不能偷的问题呗! 我们从那个地方转换一下,…...
寻找峰值[中等]
优质博文IT-BLOG-CN 一、题目 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] nums[n] -∞。 你…...
【ESP32 IDF】key按键与EXTI中断
文章目录 前言一、按键的使用1.1 按键的简介1.2 读取按键的高低电平1.3 读取按键具体代码 二、中断二、EXIT外部中断2.1 EXIT外部中断简介2.2 外部中断基础知识2.3 设置外部中断注册外部中断服务函数设置触发方式添加中断函数 2.4 示例代码 总结 前言 在嵌入式系统开发中&…...
Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位
运动相机设计用于在各种运动和极限环境中使用,如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等,它们通常具有防抖防震、深度防水和高清画质的特点,能够适应颠簸剧烈的环境,甚至可以承受一定程度的摔落,一些运动相…...
零拷贝技术深入分析
一、零拷贝 在前面的文章“深浅拷贝、COW及零拷贝”中对零拷贝进行过分析,但没有举例子,也没有深入进行展开分析。本文将结合实际的例程对零拷贝进行更深入的分析和说明。 在传统的IO操作中,以文件通过网络传输为例 ,一般会经历以…...
Android 基础入门 基础简介
1. 观察App运行日志 2.Android 开发设计的编程语言 koltin Java c c 3.工程目录结构 4.Gradle 5.build.gradle 文件解析 plugins {id("com.android.application")//用了哪些插件 主配置文件版本控制 所以这里不用写版本 }android {namespace "com.tiger.myap…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
