数据库(SQL语句:DMLDQL)
目录
有关数据表的DML操作
1.1 INSERT 语句
1.2 REPLACE 语句
replace语句的语法格式(三种)
REPLACE 语句 和 INSERT 语句的区别
1.3 DELETE 语句 | | TRUNCATE 语句
DELETE
TRUNCATE
DROP
1.4 UPDATE 数据
1.5 SELECT 语句 (DQL数据查询语句)
1.5.1 基础语法
语法解释
1.5.2 SELECT 语句中的算数表达式
1.5.3 运算符优先级
1.5.4 NULL值的使用
补充
1.5.5 祛除重复的记录
1.5.6 WHERE 限制所选择的横向区域
1.5.7 WHERE 中的比较运算符
1.5.8 LIKE 关键字
1.5.9 GROUP BY 分组查询
语法
分组函数的重要规则
1.5.10 ORDER BY 排序查询
语法
1.5.11 LIMIT 区间查询
语法
1.5.12 GROUP_CONCAT 分组数据合并
注意事项
1.6 多表关联查询
1.6.1交叉连接查询
1.6.2 等值连接查询
语法
1.6.3 内连接查询
语法
有关数据表的DML操作
INSERT
针对于数据的插入
DELETE
针对于数据的删除
UPDATE
针对于数据的修改
1.1 INSERT 语句
INSERT INTO 表名 [(列名1,列名2,......)] VALUES (值1,值2,......);
默认情况下,一条插入命令只针对一行进行影响
INSERT INTO 表名 [(columnName,[columnName...])] VALUES
(value[,value.....]),(value[,value.....]),
(value[,value.....]).....;
一次性插入多条记录
注意:
如果我们为每一列都要指定注入的值,那么表名后面就不需要罗列 插入的列名
INSERT INTO 表名 VALUES (值1,值2,值3,......)
1.2 REPLACE 语句
replace语句的语法格式(三种)
语法格式1 | replace into 表名 [(字段列表)] values (值列表); |
语法格式2 | replace [into] 目标表名 [(字段列表1) select (字段列表2) form 源表] [where 条件表达式]; |
语法格式3 | replace [into] 表名 set 字段1=值1,字段2=值2; |
REPLACE 语句 和 INSERT 语句的区别
replace 语句的功能 和 insert 语句的功能 基本相同,不同之处在于:使用 replace语句向表插入新纪录时,如果新记录的 主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件) 然后再插入新记录
使用 replace 的最大好处是可以将 delect 和 insert 合二为一(效果相当于更新),形成一个原子操作,这样就无需将 delect 操作与 insert 操作置于事务中了
1.3 DELETE 语句 | | TRUNCATE 语句
DELCET (TRUNCATE) FRON 表名 [WHERE 条件];
DELETE
删除数据,保留表结构,必要时可以回滚,但是如果数据量较大,运行速度不及 TRUNCATE
TRUNCATE
删除所有数据,保留表结构,不能够回滚,一次全部删除所有数据,速度相对很快
DROP
删除数据和表结构,删除速度最快
1.4 UPDATE 数据
UPDATE 表名 SET 列名 = 值 [,列名 = 值, 列名 = 值, 列名 = 值,......]
[WHERE 条件];
1.5 SELECT 语句 (DQL数据查询语句)
1.5.1 基础语法
SELECT {*,列名,函数}
FROM 表名
[WHERE 条件];
语法解释
1、SELECT 检索关键字,* 匹配所有列 , 匹配指定列
2、FROM 所提供的数据源(表,视图,另一个查询机制反馈的结果)
3、WHERE 条件(控制查询的区域)
示例:
#查询学生表的所有列以及所有行
SELECT *
FORM student;#查询指定三列的内容所有行(学生表的姓名、住址、邮箱)
SELECT StudentName,Adress,Email
FROM student;#查询生日在2002-09-06 2010-09-06 的 男生 的 姓名
SELECT StudentName
FROM student
WHERE BornDate>'2002-09-06' AND BornDate<'2010-09-06' AND sex = 1;
1.5.2 SELECT 语句中的算数表达式
对数值型数据列、变量、常量可以使用算数操作符创建表达式 | (+ - * /) |
对日期型数据列、变量、常量可以使用部分算数操作符创建表达式 | (+ -) |
运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算
示例:
SELECT 100+80;
SELECT '300'+80; #只要其中一个是数值类型,而另一个能够转成数值,则自动转换并计算
SELECT 'ABC'+20; #若转换不成功,则将其认为是数字0对待
SELECT 'Hello'+'World'; #若转换不成功,则将其认为是数字0对待
SELECT NULL+80; #只要有一个为NULL,则结果为NULL
1.5.3 运算符优先级
乘除 优先级 高于 加减 |
同级运算 时 运算顺序 由左到右 |
表达式内 使用括号,可以改变优先级的运算顺序 |
1.5.4 NULL值的使用
String str = null;
String str = "";
null指的是 不可用、未分配的值
null不等于 零或者空格
任意数据类型都支持 null 这种表达式
包括 null 的任何算数表达式结果都等于 空
字符串 和 null 进行连接运算,结果也为 空
补充
<==> 安全等于 等价于 = 和 IS 两者的结合 |
示例:
#查询学号为001的学生
SELECT *
FROM student
WHERE StudentNo <==> 001; # WHERE StudentNo = 001;#查询邮箱为空的学生的信息
SELECT *
FROM student
WHERE Email <==> NULL; # WHERE Email IS NULL;
1.5.5 祛除重复的记录
可以使用 关键字 DISTINCT 清除查询记录中的重复的数据
示例:
#查看学生表的性别
#缺省情况下查询显示所有行,包括重复行
SELECT sex "性别"
FROM student;
#可以使用关键字DISTINCT清除查询记录中的重复数据
SELECT DISTINCT sex "性别"
FROM student;
1.5.6 WHERE 限制所选择的横向区域
WHERE 中的 字符串 或者 日期格式的内容,需要使用 单引号 进行专门的标识
正确标识:
StudentName = ‘张三’
错误标识:
StudentName = 张三
字符串内的数据,对大小写很敏感
如果所查询记录中有 Zhang123@163.com 那么我们在检索的时候,就不能表示为:zhang123@163.com
日期值对格式是敏感的
如果所查询记录中有 2002-09-06 00:00:00 那么我们在检索的时候,就不能表示为:2002年09月06日
示例:
#查询姓名是张三的学生信息
SELECT *
FROM student
WHERE StudentName = '张三';#查询生日是1986-12-31的学生信息
SELECT *
FROM student
WHERE BornDate = '1986-12-31';#查询学号是0001的学生信息
SELECT *
FROM student
WHERE StudentNo = 0001;
1.5.7 WHERE 中的比较运算符
< > <= >= != =
示例:
#查询生日在2000-01-01之后的学生信息
SELECT *
FROM student
WHERE BornDate > '2000-01-01';
#WHERE中逻辑运算符 AND OR NOT
#AND需要所有条件都满足#查询班级编号是1,并且生日在1980-01-01之后,并且性别是1的学生信息
SELECT *
FROM student
WHERE GradeId = 1 AND BornDate > '1980-01-01' AND sex = 1;
#OR只要满足多条件之一即可#查询班级编号是1,或者生日在1980-01-01之后,或者性别是1的学生信息
SELECT *
FROM student
WHERE GradeId = 1 OR BornDate > '1980-01-01' OR sex = 1;
#NOT表示取反#查询邮箱不为空的学生的姓名,邮箱地址
SELECT StudentName "姓名",Email "邮箱地址"
FROM student
WHERE Email IS NOT NULL;#查询生日在2000-2010之间的学生姓名
SELECT StudentName "姓名"
FROM student
WHERE BornDate >= '2000-01-01' AND BornDate <= '2010-01-01';#使用BETWEEN关键字实现范围查询
SELECT StudentName "姓名"
FROM student
WHERE BornDate BETWEEN '2000-01-01' AND '2010-01-01';#班级是1或2或3班的学生姓名
SELECT StudentName "姓名"
FROM student
WHERE GradeId = 1 OR GradeId = 3 OR GradeId = 2;#使用IN关键字进行匹配
SELECT StudentName "姓名"
FROM student
WHERE GradeId IN (1,2,3);
1.5.8 LIKE 关键字
LIKE关键字主要用于:
执行模糊查询,查询条件可以包含 文字字符 或 占位符
通过 % 表示匹配 0 或者 多个字符
_ 表示匹配一个字符
示例:
#查询学生姓名 姓名以张开始,后面字符数量不定
SELECT StudentName "姓名"
FROM student
WHERE StudentName LIKE '张%';
LIKE '%张' | 以 张 字结束 |
LIKE '%张%' | 包含 张 字 |
LIKE '张_' | 以张开始而且后方匹配一个字符 |
1.5.9 GROUP BY 分组查询
GROUP BY 真正作用在于 与各种聚合函数配合使用,用来对查询出来的数据进行 行分组
分组的含义:将表中列值相同的多条记录,当成是一条记录进行处理,最终也只能输出一条记录,分组函数 忽略空值
语法
SELECT {*,列名,函数}
FROM 表名
[WHERE 基础条件]
[GROUP BY 分组条件]
[HAVING 过滤条件]
示例:
#统计各班人数
SELECT COUNT(*) "人数",GradeID "班级编号"
FROM student
WHERE sex = 1
GROUP BY (GradeID);#统计每个学生的考试总分,平均分,最高分,最低分
SELECT StudentNo "学号", SUM(StudentResult) "总分",AVG(StudentResult) "平均分",MAX(StudentResult) "最高分",MIN(StudentResult) "平最低分"
FROM result
GROUP BY (StudentNo);#考试时间在 2012年01月01日后 统计每个学生的考试总分,平均分,最高分,最低分
SELECT StudentNo "学号", SUM(StudentResult) "总分",AVG(StudentResult) "平均分",MAX(StudentResult) "最高分",MIN(StudentResult) "平最低分"
FROM result
WHERE ExamDate >= '2012-01-01'
GROUP BY (StudentNo);#考试时间在 2012年01月01日后 统计每个学生的考试总分,平均分,最高分,最低分 过滤掉 总分在650以下的
SELECT StudentNo "学号", SUM(StudentResult) "总分",AVG(StudentResult) "平均分",MAX(StudentResult) "最高分",MIN(StudentResult) "平最低分"
FROM result
WHERE ExamDate >= '2012-01-01'
GROUP BY (StudentNo)
HAVING SUM(StudentResult) >= 650;
分组函数的重要规则
如果使用了分组函数,或者是使用了GROUP BY(字段1,字段2,......)执行查询,那么出现在SELECT 列表后的字段,要么必须 是聚合函数,要么出现过在 GROUP字句里面 |
GROUP BY 子句的字段可以不出现在 SELECT 内 |
使用聚合函数但不使用分组查询时,那么所有的数据会作为一组进行显示 |
GROUP BY 前面的 WHERE 表示:分组前执行的条件过滤 |
GROUP BY 后面的 HAVING 表示:分组后执行的条件过滤 |
1.5.10 ORDER BY 排序查询
语法
SELECT {*,列名,函数}
FROM 表名
[WHERE 基础条件]
[GROUP BY 分组条件]
[HAVING 过滤条件]
[ORDER BY (需要排序的字段) ASC||DESC]; #ASC升序(升序) DESC(降序)
示例:
#查询平均成绩在80以上的学生(学号)信息,同时成绩还需要按照降序排列
SELECT StudentNo "学号",AVG(StudentResult) "成绩"
FROM result
GROUP BY (StudentNo)
HAVING AVG(StudentResult) > 80;
ORDER BY(AVG(StudentResult)) DESC;
1.5.11 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 | 第十一行---第十五 |
LIMIT 15,5 | 第十六---第二十 |
技巧:
LIMIT (当前页码数-1)*容量,容量
示例:
#求学校学生中 三甲学生的信息
#分析 学生总分 降序排列 区间取前三
SELECT StudentNo "学号",SUM(StudentResult) "总成绩"
FROM result
GROUP BY (StudentNo)
ORDER BY(SUM(StudentResult)) DESC
LIMIT 0,3;
1.5.12 GROUP_CONCAT 分组数据合并
示例:
#根据班级进行分组,要求查看各班人数,以及各班学员姓名。
SELECT GradeID "班级编号",COUNT(*) "班级人数",GROUP_CONCAT(StudentName) "学员姓名"
FROM student
GROUP BY(GradeID);
注意事项
使用GROUP_CONCAT()函数时必须要对数据源进行分组,如果不分组,所有数据都将合并成一行 |
对结果集排序 查询语句执行的查询结果,数据是按照插入时顺序进行排序 |
实际上需要按照某列大小值进行拍讯的话,建议只针对于数值或日期通过 ORDER BY函数进行排序 |
在语句最后也可以通过LIMIT控制容量大小 |
1.6 多表关联查询
1.6.1交叉连接查询
示例:
#查询所有的学生+所有的班级信息
SELECT *
FROM student,grade;
1.6.2 等值连接查询
语法
SELECT * FROM 表1,表2,... WHERE 表1.列 = 表2.列 [AND...];
示例:
#查询所有的学生姓名,住址,班级名称
SELECT StudentName "姓名",Address "住址",GradeName "班级名称"
FROM student,grade
WHERE student.GradeID = grade.GradeID;
1.6.3 内连接查询
语法
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;
相关文章:
数据库(SQL语句:DMLDQL)
目录 有关数据表的DML操作 1.1 INSERT 语句 1.2 REPLACE 语句 replace语句的语法格式(三种) REPLACE 语句 和 INSERT 语句的区别 1.3 DELETE 语句 | | TRUNCATE 语句 DELETE TRUNCATE DROP 1.4 UPDATE 数据 1.5 SELECT 语句 (DQL数…...

AnimatedDrawings:让绘图动起来
老样子,先上图片和官网。这个项目是让绘制的动画图片动起来,还能绑定人体的运动进行行为定制。 快速开始 1. 下载代码并进入文件夹,启动一键安装 git clone https://github.com/facebookresearch/AnimatedDrawings.gitcd AnimatedDrawingspip…...

红黑树浅浅学习
红黑树浅浅学习 红黑树概念红黑树平衡性调整 红黑树概念 二叉树:二叉树是每个节点最多有两个子树的树结构。二叉查找树:又称“二叉搜索树”,左孩子比父节点小,右孩子比父节点大,还有一个特性就是”中序遍历“可以让结…...
QGraphicsView 如何让图形大小适配窗口
1. setSceneRect 做什么用? setSceneRect是一个Qt中的函数,用于设置QGraphicsView中的场景矩形(QRectF)。 QGraphicsView是一个用于显示和编辑图形场景的控件,而setSceneRect函数用于设置场景矩形,即指定…...

sqlmap使用教程(3)-探测注入漏洞
1、探测GET参数 以下为探测DVWA靶场low级别的sql注入,以下提交方式为GET,问号(?)将分隔URL和传输的数据,而参数之间以&相连。--auth-credadmin:password --auth-typebasic (DVWA靶场需要登录…...

期待已久!阿里云容器服务 ACK AI 助手正式上线
作者:行疾 大模型技术的蓬勃发展持续引领 AI 出圈潮流,各行各业都在尝试采用 AI 工具实现智能增效。 2023 年云栖大会上,阿里云容器服务团队正式发布 ACK AI 助手,带来大模型增强智能诊断,帮助企业和开发者降低 K8s …...

[BUG] Authentication Error
前言 给服务器安装了一个todesk,但是远程一直就是,点击用户,进入输入密码界面,还没等输入就自动返回了 解决 服务器是无桌面版本,或者桌面程序死掉了,重新安装就好 sudo apt install xorg sudo apt inst…...
23种设计模式概述
学习设计模式对我们有什么帮助? 1.提高代码质量和可维护性:设计模式是经过验证的解决方案,有助于解决常见的设计问题。使用设计模式可以减少代码冗余,增强代码的可读性和可维护性,并提高代码的可靠性。 2.提升开发效率…...
英文阅读-LinkedIn‘s Tips for Highly Effective Code Review
LinkedIn的CR技巧 LinkedIn团队CodeReview经验与方法,原文来自https://thenewstack.io/linkedin-code-review/ 总结 Do I Understand the “Why”? 在提交pr的同时需要描述本次修改的“动机”,有助于提高代码文档质量。 Am I Giving Positive Feedbac…...

性能优化-高通的Hexagon DSP和NPU
原文来自【 Qualcomm’s Hexagon DSP, and now, NPU 】 本文主要介绍Qualcomm Hexagon DSP和NPU,这些为处理简单大量运算而设计的硬件。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能…...

第137期 Oracle的数据生命周期管理(20240123)
数据库管理137期 2024-01-23 第137期 Oracle的数据生命周期管理(20240123)1 ILM2 Heat Map3 ADO4 优点5 对比总结 第137期 Oracle的数据生命周期管理(20240123) 作者:胖头鱼的鱼缸(尹海文) Orac…...

电脑的GPU太强了,pytorch版本跟不上,将cuda驱动进行降级
我的情况: 我买的电脑的GPU版本为rtx4060,但是装上相应的驱动后,cuda的版本为12.3,而现在pytorch中cuda安装命令的最新版本为12.1,所以我将电脑的驱动进行降级为cuda版本为10.1的。 最后成功安装cuda10.1版本的驱动 …...

1 认识微服务
1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构:将业务的所有…...
PHP+SOCKET 服务端多进程处理多客户端请求 demo
服务端 $socket socket_create(AF_INET,SOCK_STREAM,SOL_TCP); socket_bind($socket,0,95012) or die( server bind fail: . socket_strerror(socket_last_error())); socket_listen($socket,5);$child 0; //初始化子进程数 while(true){$client socket_accept($socket);$pi…...

Matplotlib笔记:安装Matplotlib+常用绘图
Matplotlib Python的2D绘图库 安装Matplotlib 打开Anaconda Prompt切换环境(默认是base,无需切换)输入命令行安装pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib3.5.2 绘图 导入import matplotlib.pyplot as plt …...

Confluence6+mysql5.7安装避坑详细记录
目录 一、前言 二、下载与安装 1、版本和安装环境 2、安装数据库 3、配置数据库 4、安装confluence 三、Pj confluence 1、选择语言和产品安装 2、Pj 3、上传mysql驱动 4、重启Confluence服务继续安装 四、Confluence重启卸载方法 重启方法 方法一 方法二 卸载…...

YTM32的HSM模块在信息安全场景中的应用
YTM32的HSM模块在信息安全场景中的应用 文章目录 YTM32的HSM模块在信息安全场景中的应用引言应用场景:一点点密码学基础硬件:YTM32的信息安全子系统HCU外设模块硬件特性基本的应用操作流程,以计算AES-ECB为例硬件上对处理多块数据上的一些设计…...

时间序列大模型:TimeGPT
论文:https://arxiv.org/pdf/2310.03589.pdf TimeGPT,这是第一个用于时间序列的基础模型,能够为训练期间未见过的多样化数据集生成准确的预测。 大规模时间序列模型通过利用当代深度学习进步的能力,使精确预测和减少不确定性成为…...

CloudPanel RCE漏洞复现(CVE-2023-35885)
0x01 产品简介 CloudPanel 是一个基于 Web 的控制面板或管理界面,旨在简化云托管环境的管理。它提供了一个集中式平台,用于管理云基础架构的各个方面,包括虚拟机 (VM)、存储、网络和应用程序。 0x02 漏洞概述 由于2.3.1 之前的 CloudPanel 具有不安全的文件管理器 cook…...

WPF多值转换器
背景:实现Slider拖动可以调整rgb 单转换器:WPF中数据绑定转换器Converter-CSDN博客 在View中: <StackPanel Orientation"Vertical"><Slider x:Name"slider_R" Minimum"0" Maximum"255" Wi…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...

Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...

动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...