[JavaWeb]SQL介绍-DQL查询数据
SQL介绍-DQL查询数据
- 一.基础查询
- 二.条件查询
- 三.排序查询
- 1.聚合函数
- 2.分组查询
- 四.分页查询
DQL查询基础的语法结构如下:
SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段
HAVING分组后条件
ORDER BY排序字段
LIMIT分页限定
一.基础查询
说明 | 语法 |
---|---|
查询多个字段 | SELECT 字段列表 FROM 表名; SELECT * FROM 表名; -- 查询所有数据 |
去除重复记录 | SELECT DISTINCT 字段列表 FROM 表名; |
起别名 | 列名 AS 别名 (AS也可以省略) |
-- 先建立新的表
drop table if exists stu;
-- 创建stu表
CREATE TABLE stu (
id int,-- 编号
name varchar(20),-- 姓名
age int,-- 年龄
sex varchar(5),-- 性别
address varchar(100),-- 地址,
math double(5,2),-- 数学成绩,
english double(5,2),-- 英语成绩
hire_date date -- 入学时间
);-- 添加数据
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'马运',55,'男','杭州',66,78,'1995-09-01'),
(2,'马花疼',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'柳白',20,'女','湖南',76,65,'1997-09-05'),
(5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'),
(6,'刘德花',57,'男','香港',99,99,'1998-09-01'),
(7,'张学右',22,'女','香港',99,99,'1998-09-01'),
(8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');
SELECT * FROM stu;
-- 基础查询
-- 查询name age两列
SELECT name,age FROM stu;-- 查询所有列的数据,用*指代所有列的数据,但是不推荐使用
SELECT * FROM stu;-- 查询地址信息,这时候查询出来的信息有重复记录
SELECT address FROM stu;-- 去除重复可以通过DISTINCT关键字
SELECT DISTINCT address FROM stu;-- 查询姓名,数学成绩,英语成绩,并用别名代替原有列名
-- 可以通过AS关键字来起别名,也可以省略
SELECT name AS 姓名,math 数学成绩,english 英语成绩 FROM stu;
二.条件查询
- 条件查询的语法很简单但是要结合不同的条件表达式去使用
SELECT 字段列表 FROM 表名 WHERE 条件列表;
符号 | 功能 |
---|---|
\>, \< | 大于, 小于 |
\>=, \<= | 大于等于, 小于等于 |
= | 等于 |
\<\> 或 != | 不等于 |
BETWEEN ... AND ... | 在某个范围内(都包含) |
IN(...) | 多选一 |
LIKE 占位符 | 模糊查询 _单个任意字符 %多个任意字符 |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
AND 或 && | 并且 |
OR 或|| | 或者 |
NOT 或 ! | 非 |
解下来通过实际的需求来体验这些语句的作用
SELECT * FROM stu;
-- 查询年龄大于20岁的学院的信息
SELECT * FROM stu WHERE age > 20;-- 查询年龄大于等于20的学员的信息
SELECT * FROM stu WHERE age >= 20;-- 查询年龄大于等于20岁但是小于等于30岁的学员信息
SELECT id,name 姓名,age 年龄 FROM stu WHERE age>=20 AND age<=30;
SELECT * FROM stu WHERE age BETWEEN 20 AND 30;-- 查询入学日期在1998-09-01到1999-09-01之间的学员信息
SELECT * FROM stu WHERE hire_date BETWEEN '1998-09-01' and '1999-09-01';-- 查询年龄等于18岁的信息
SELECT * FROM stu WHERE age=18;-- 查询年龄不等于18的学员信息
SELECT * FROM stu WHERE age != 18;
SELECT * FROM stu WHERE age <> 18;-- 查询年龄等于18,20,22的信息
SELECT * FROM stu WHERE age=18 OR age=20 OR age=22;
SELECT * FROM stu WHERE age IN(18,20,22);-- 查询英语成绩为NULL的信息(NULL值的比较不能使用=或!=)
SELECT * FROM stu WHERE english IS NULL;-- 查询英语成绩不为NULL的信息
SELECT * FROM stu WHERE english IS NOT NULL;
- 模糊查询
LIKE 占位符
-- 模糊查询LIKE
-- 通配符 _ 代表单个任意字符
-- 通配符 % 代表多个任意字符-- 查询姓马的学员信息
SELECT * FROM stu WHERE name LIKE '马%';-- 查询名字第二个字是花的学员信息
SELECT * FROM stu WHERE name LIKE '_花%';-- 查询名字中包含 德 的学员信息
SELECT * FROM stu WHERE name LIKE '%德%';
三.排序查询
- 具体语法
SELECT 字段列表 FROM 表名 ORDER BY 排序字段1 [排序方式1],排序字段2 [排序方式2] ...;
- 排序方式
ASC: 升序排列(默认值)
DESC: 降序排列 当有多个条件时,只有前边的条件一样的时候,才会根据后边的条件进行排序
-- 查询学员信息,按年龄进行升序排列
SELECT * FROM stu ORDER BY age ASC;
SELECT * FROM stu ORDER BY age; -- ASC是默认的,不进行指定也可以打到效果-- 查询信息,按照数学成绩降序排列
SELECT * FROM stu ORDER BY math DESC;-- 查询信息,按数学成绩降序排列,如果成绩一样,按英语成绩升序排列
SELECT * FROM stu ORDER BY math DESC,english ASC;
1.聚合函数
- 聚合函数是把一列作为一个整体,进行纵向计算的.
SELECT 函数名(列名) FROM 表;
函数名 | 作用 |
---|---|
count(列名) | 统计数量(一般选用不为NULL的列) |
max(列名) | 统计最大值 |
min(列名) | 统计最小值 |
sum(列名) | 求和 |
avg(列名) | 求平均 |
-- 聚合函数
-- 查班上一共有多少个学生 COUNT(expr)统计的列名不能为NULL
/*count推荐的取值:1.主键2.*(新版MySQL中会计算效率最高的一列)
*/
SELECT COUNT(id) FROM stu;
SELECT COUNT(name) FROM stu;
-- COUNT(expr)统计的列名不能为NULL,空值是统计不到的会出错!!!
SELECT COUNT(english) FROM stu;-- 查询数学成绩的最高分
SELECT MAX(math) FROM stu;
-- 查询数学成绩的最低分
SELECT MIN(math) FROM stu;
-- 查询数学成绩的平均分
SELECT AVG(math) FROM stu;-- 查询英语成绩的最低分 注意NULL值不参与聚合函数的运算
SELECT MIN(english) FROM stu;
2.分组查询
- 基本语法
SELECT 字段列表 FROM 表名 [WHERE 分组前限定条件] GROUP BY 分组字段名 [HAVING 分组后条件过滤]
注意分组之后,查询的字段为聚合函数和分组字段,查询其他的字段无任何意义
WHERE
和HAVING
的区别
– 执行时机不一样:WHERE
是分组之前进行限定,不满足WHERE
条件则不参与分组,HAVING
是分组之后对结果进行过滤
– 可判断的条件不一样:WHERE
不能对聚合函数进行判断,HAVING
可以
– 执行顺序:WHERE
> 聚合函数 >HAVING
-- 查询男同学和女同学各自的数学平均分
SELECT sex 性别,AVG(math) 平均分 FROM stu GROUP BY sex;-- 查询男女各自的平均分以及各自的人数
SELECT sex 性别,AVG(math) 平均分,COUNT(*) 人数 FROM stu GROUP BY sex;-- 查询男女各自的数学平均分,统计人数. 要求分数低于70分的人不参与分组
SELECT sex 性别,AVG(math) 数学均分,COUNT(*) 人数 FROM stu WHERE math>70 GROUP BY sex;-- 查询男女各自的数学平均分,统计人数. 要求分数低于70分的人不参与分组,分组后人数大于2人的数据
SELECT sex 性别,AVG(math) 平均分,COUNT(*) 人数 FROM stu WHERE math>70 GROUP BY sex HAVING COUNT(*)>2;
四.分页查询
- 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
- 起始索引: 从零开始
计算公式:起始索引=(当前页码-1) * 每页显示的条数
- 分页查询是MySQL的方言
Oracle分页查询使用rownumber
SQL Server分页查询使用top
-- 从0开始查询3条数据
SELECT * FROM stu LIMIT 0,3;-- 每页显示3条数据,查询第一页
SELECT * FROM stu LIMIT 0,3;-- 每页显示3条数据,查询第二页
SELECT * FROM stu LIMIT 3,3;-- 每页显示3条数据,查询第三页
SELECT * FROM stu LIMIT 6,6;
B站视频课程
笔记与源码文件
相关文章:
[JavaWeb]SQL介绍-DQL查询数据
SQL介绍-DQL查询数据 一.基础查询二.条件查询三.排序查询1.聚合函数2.分组查询 四.分页查询 DQL查询基础的语法结构如下: SELECT字段列表 FROM表名列表 WHERE条件列表 GROUP BY分组字段 HAVING分组后条件 ORDER BY排序字段 LIMIT分页限定一.基础查询 说明语法查询…...

[containerd] 在Windows上使用IDEA远程调试containerd, ctr, containerd-shim
文章目录 1. containerd安装2. 源码编译3. 验证编译的二进制文件是否含有调试需要的信息3.1. objdump工具验证3.2. file工具验证3.3. dlv工具验证 4. debug 1. containerd安装 [Ubuntu 22.04] 安装containerd 2. 源码编译 主要步骤如下: 1、从github下载containe…...

Verilog语法学习——LV4_移位运算与乘法
LV4_移位运算与乘法 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述: 已知d为一个8位数,请在每个时钟周期分别输出该数乘1/…...
打卡力扣题目九
#左耳听风 ARST 打卡活动重启# 目录 一、问题 二、解题方法一 三、解题方法二 四、两种方法的区别 关于 ARTS 的释义 —— 每周完成一个 ARTS: ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个…...

Python零基础入门(九)——函数,类和对象
系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不…...
在linux上面部署activemq
1、下载 网址:ActiveMQ 注意:新版本5.17起 要求jdk11, 5.16兼容jdk8, 所以,确保已经安装 java11 或以上的版本 这里安装较新版:5.18.2,已经安装了java17 如何安装jdk17,请详见我的另一篇文章:linux…...
mysql的sql语句优化方法面试题总结
mysql的sql语句优化方法面试题总结 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 10 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t…...

小程序 获取用户头像、昵称、手机号的组件封装(最新版)
在父组件引入该组件 <!-- 授权信息 --><auth-mes showModal"{{showModal}}" idautnMes bind:onConfirm"onConfirm"></auth-mes> 子组件详细代码为: authMes.wxml <!-- components/authMes/authMes.wxml --> <van-popup show…...
【Linux】简易shell外壳的制作
#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h>#define NUM 1024 #define SIZE 32 #define SEP " "// 保存完整的命令行字符串 char cmd_line…...

TenserRT(四)在 PYTORCH 中支持更多 ONNX 算子
第四章:在 PyTorch 中支持更多 ONNX 算子 — mmdeploy 0.12.0 文档 PyTorch扩充。 PyTorch转换成ONNX: PyTorch有实现。PyTorch可以转化成一个或者多个ONNX算子。ONNX有相应算子。 如果即没有PyTorch实现,且缺少PyTorch与ONNX的映射关系&…...
前端高级面试题-浏览器
1 事件机制 事件触发三阶段 document 往事件触发处传播,遇到注册的捕获事件会触发 传播到事件触发处时触发注册的事件 从事件触发处往 document 传播,遇到注册的冒泡事件会触发 事件触发⼀般来说会按照上⾯的顺序进⾏,但是也有特例&#x…...
Mongodb 多文档聚合操作处理方法三(聚合管道)
聚合 聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来: 将多个文档中的值分组在一起。 对分组数据执行操作以返回单个结果。 分析数据随时间的变化。 要执行聚合操作,您可以使用: 聚合管道 单一目的聚合方法 Map-reduce 函…...

Zabbix分布式监控配置和使用
目录 1 Zabbix监控的配置流程2 添加主机组3 添加模板4 添加主机5 配置图形6 配置大屏7 新建监控项7.1 简介7.2 添加监控项7.3 查看数据7.4 图表 8 新建触发器8.1 概述8.2 添加触发器8.3 显示触发器状态 1 Zabbix监控的配置流程 在Zabbix-Web管理界面中添加一个主机,…...

XCTF_very_easy_sql
简单的进行sql注入测试后发现不简单尝试一下按照提示 结合这句提示应该是内部访问,所以采用的手段应该是ssrf顺便看看包 唯一值得关注的是set-cookie说回ssrf唯一能使用的方式应该是Gopher协议找到了一个POST的python脚本 import urllib.parsepayload ""…...
[React]useMemoizedFn和useCallback对比
useMemoizedFn文档地址:https://ahooks.js.org/zh-CN/hooks/use-memoized-fn hooks组件内什么时候会更新自定义函数 在 React 中,自定义的 Hooks 内部的函数在以下常见的几种情况下会被重新赋值,导致更新引用: 组件重新渲染&…...

计算机毕设 深度学习人体跌倒检测 -yolo 机器视觉 opencv python
文章目录 0 前言1.前言2.实现效果3.相关技术原理3.1卷积神经网络3.1YOLOV5简介3.2 YOLOv5s 模型算法流程和原理4.数据集处理3.1 数据标注简介3.2 数据保存 5.模型训练 6 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题…...
完全背包
动态规划解题步骤 : 动态规划问题一般从三个步骤进行考虑。 步骤一:集合和集合的状态 所谓的集合,就是一些方案的集合。 用 g[i][j] 表示从前 i 种物品中进行选择,且总体积不大于 j 的各个选法获得的价值的集合。注意:g[i][j] 不是一个数…...

【软件测试】webdriver常用API演示(Java+IDEA+chrome浏览器)
1.元素定位方法 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名…...

Linux安装MySQL 8.1.0
MySQL是一个流行的开源关系型数据库管理系统,本教程将向您展示如何在Linux系统上安装MySQL 8.1.0版本。请按照以下步骤进行操作: 1. 下载MySQL安装包 首先,从MySQL官方网站或镜像站点下载MySQL 8.1.0的压缩包mysql-8.1.0-linux-glibc2.28-x…...
多线程面试相关的一些问题
面试题 1. 常见的锁策略相关的面试题 2. CAS相关的面试题 3. Synchronized 原理相关的面试题 4. Callable 接口相关的面试题 1. 常见的锁策略 乐观锁 vs 悲观锁 悲观锁: 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都…...
RAG应用:交叉编码器(cross-encoder)和重排序(rerank)
文章目录 Sentence Transformers交叉编码器交叉编码器使用示例检索和重排序Sentence Transformers Sentence Transformers 支持两种类型的模型: Bi-encoders 和 Cross-encoders。Bi-encoders 更快更可扩展,但 Cross-encoders 更准确。虽然两者都处理类似的高水平任务,但何时…...

XCTF-web-easyphp
解析 第一个条件( k e y 1 ): i s s e t ( key1):isset( key1):isset(a) && intval(KaTeX parse error: Expected EOF, got & at position 14: a) > 6000000 &̲& strl…...
gbase8s数据库+mybatis问题记录
在实际使用中一般都是mybatis数据库连接池组合使用,单独使用mybatis 连接数据库时,在循环使用PreparedStatement 时 会发生内存泄漏,PreparedStatement资源得不到释放 测试代码片段如下 drawMapper sqlsession.getMapper(DrawMapper.class…...

Github上一些使用技巧(缩写、Issue的Highlight)自用
1. GIthub中的一些缩写 LGTM ! 最近经常看到一些迷之缩写,感觉挺有意思的,但是有时候看到一些没见过的缩写还是有点懵逼,不过缩写确实也是很方便去review,这里就记录汇总一下;顺便加了一些git的基操单词(加…...

Allegro X PCB设计小诀窍--05.如何在Allegro X中实现隐藏电源飞线效果
背景介绍:在PCB设计过程中,布线初期印制板上的飞线错综复杂,信号线和电源线混合交错,但是实际上对于多层板来说,电源的网络一般是通过电源层铺铜连接的,很少需要走线,这样混乱的情况会严重影响设…...
【Elasticsearch】使用脚本删除索引中的某个字段
在 Elasticsearch 中,删除索引中的某个字段可以通过以下几种方式实现,具体取决于你的需求和场景。以下是几种常见的方法: 方法 1:使用 _update_by_query API 删除字段 _update_by_query API 可以对索引中的文档执行批量更新操作&…...

网络编程学习笔记——TCP网络编程
文章目录 1、socket()函数2、bind()函数3、listen()4、accept()5、connect()6、send()/write()7、recv()/read()8、套接字的关闭9、TCP循环服务器模型10、TCP多线程服务器11、TCP多进程并发服务器 网络编程常用函数 socket() 创建套接字bind() 绑定本机地址和端口connect() …...

数据分析案例-基于红米和华为手机的用户评论分析
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...

从“被动养老”到“主动健康管理”:平台如何重构代际关系?
在老龄化与数字化交织的背景下,代际关系的重构已成为破解养老难题的关键。 传统家庭养老模式中,代际互动多表现为单向的“赡养-被赡养”关系。 而智慧养老平台的介入,通过技术赋能、资源整合与情感连接,正在推动代际关系向“协作…...
英语科研词汇现象及语言演变探讨
一、词汇形态学的进化困境 希腊-拉丁语系遗存 "Pneumoconiosis"(πνεύμωνκονίαωσις)和"electroencephalogram"(ηλεκτρονεγκέφαλοςγράμμα)的构词方式反映了欧洲学者对古…...