5 mysql 查询语句
1.DML:对数据进行增删改查
提示:Execute执行 Execute and Suppress 执行并且抑制这个警告
person表的结构
/*
DML:Data Manipulation Language 数据操作语言,对数据进行 增删改查操作,因为査询的操作太频繁和复杂,将查询的操作独立成为DQL
*/
use db1109;//person表在db1109数据库里
-- 插入数据insert into,对于自增的字段,可以插入0或者null,id会自己增加
-- 在指定的字段里插入数据
insert into person(id,name,married) value(null,'jerry',true);
-- 如果给所有的字段都插入数据,字段列表可以省略,但是注意value的顺序必须要和字段的顺序保持一致,避免数据类型不匹配
insert into person/*(id,name,sex,height,hobbies,married,birthday)*/value(0,'merry","女'1.7,'RAP,篮球",0,'2000-02-14');
-- 修改数据 update
update person set sex='男'; -- 没有条件抑制,将所有人性别修改为男
update person set sex='女' where id=4 or id =6; -- 根据指定的条件修改数据
update person set hobbies='rap' where id between 2 and 5;-- 删除数据 delete
/*
都不推荐用,区别:
delete 删除数据以后,如果再插入数据,主键会在上一次的基础上自增
tuncate 清空数据,可以理解为将表drop,然后再create,表会到初始状态,主键id从0开始增加,truncate不能回滚
*/
delete from person where id =3; -- 条件删除
delete from person; -- person表里所有的数据都删除,但是person表依然存在
truncate person;
drop table person; -- 直接将表删除-- 复制一张表
create table p1 like person;--创建一个和person表结构相同的p1表
insert into p1 select *from person;--将person表里所有的数据都查询出来,然后插入到p1表
2.DQL:对数据进行查询
DQL: DataQueryLanguage 数据查询语言,是整个数据库最主要常用的语句,主要就是 select语句,配合一些子语句完成复杂的查询效果
from子句:用来指定数据源
where子句:用来过滤查询条件
having子旬:和where功能相同,也是用来过滤查询条件
order by子句:排序
limit /offset子句:设置分段查询
group by子句:分组
union子句:用来拼接多个查询结果
join...on子句:用来实现多表联合查询/*
通常情况下,select后面都需要添加from语句(mysql中可以不加,Oracle里必须加),
指定数据源dual是一个虚拟表,为了保证select语句的完整性
from用来指定数据源可以是一个表,也可以是多个表,还可以是一个查询结果
*/
select 1+1 from dual; select 1+1;也是2,oracle中不能用,mysql可以,不推荐
select id,name,sex from person;
select * from person;-- 查所有数据
select * from person where name='merry';`是反引号,如果表名或字段名是关键字,必须加它,其它情况加不加都行
create table `student` (`id` int unsigned primary key auto_increment,`name` char(32) not null unique,`gender` enum('男', '女') not null,`city` char(32) not null,`description` text,`birthday` date not null default '1995-1-1',`money` float(7, 2) default 0,`only_child` boolean-- 是否是独生子
);
-- value插入一行数据 values插入多行数据
insert into `student`
(`name`, `gender`, `city`, `description`, `birthday`, `money`, `only_child`)
values
('张三', '男', '北京', '班长', '1997/10/1', rand() * 100, True),
('李四', '女', '上海', NULL, '1995/3/2', rand() * 100, True),
('王五', '女', '北京', '班花,不骄傲', '1995/4/4', rand() * 100, False),
('刘二', '男', '重庆', '超爱吃火锅', '1998/10/5', rand() * 100, False);create table score(
id int unsigned primary key auto_increment,
math int,
english int
);-- order by 用来对查询结果进行排序
select * from student order by money /*asc*/; --将查询结果按照money升序排序,asc可以省略,默认就是升序排序
select * from student order by money desc;-- 查询结果按照money降序排序-- limit和offset语句 用来对数据进行分段查询 offset元素偏移量
select * from student limit l; -- 查询前l行数据
select * from student limit l offset o;-- 跳过前o行,取后面的前l行
select * from student limit o,l;-- 跳过前o行,取后面的前l行,当offset省略的时候,第一个表示offset,第二个表示limit
# select * from student offset o limit l; 不对,没有这个写法,limit一定要在offset的前面select * from student limit 3; -- 查询3个数据
select * from student limit 3 offset 5; -- 偏移5个,然后再查询3个,前5个不查
# select * from student offset 5 limit 3; limit一定要在offset的前面
select * from student limit 3,5; -- 偏移3个,查询5个 当limit和offset简写时,第一个数字表示offset,第二个表示limit
函数
/*
函数可以理解为方法 面向过程中称为函数,面向对象里称为方法
MySQL两数分为两大类:
单行函数: 输入一个数据,得到一个结果
聚合函数:输入多个数据,得到一个结果
*/
-- 数值相关函数
/*
函数 功能
ABS(x) 返回x的绝对值
CEIL(x) 返回大于x的最大整数值,向上取整
FLOOR(x) 返回小于x的最大整数值,向下取整
MOD(x,y) 返回 x/y 的模
RAND() 返回0到1内的随机值
ROUND(x,y) 返回参数x的四舍五入的有y位小数的值
TRUNCATE(x,y) 返回数字x截断为y位小数的结果
*/
select abs(-45),ceil(3.2),floor(7.9),round(3.141592653,4),rand() from dual;
-- 日期相关的函数 用的比较多 datadiff 返回起始时间 和结束时间 之间的天数
-- unix_timestamp 获取到当前时间的时间戳(单位是秒) 1970-01-01 00:00:00 UTC(国际日期标准时间)距离现在的秒数
-- from_unixtime(0) 距离1970-01-01 00:00:00 UTC(国际日期标准时间) 0秒的时间 ,因为是东八区,快8个小时,所以是8点
select curdate(),curtime(),now(),unix_timestamp(),from_unixtime(0) from dual;
-- 字符串相关的函数
select concat('a','b','c') from dual; -- abc
-- 数据库相关的函数 password()函数在mySQL8.0里废弃了 ma5,返回字符串md5值
select database(),version(),user(),md5('1232423434') from dual;
/*
分组函数: group by 常用单行函数一块使用
group_concat()将分组后的数据,拼接成为字符串,如果不写的话(1.只会显示分组后的第一个 2.有的平台会报错,因为数据被分组后,不能展示全部数据 ,只根据分组名查可以)
使用as '别名’可以给査询结果起一个别名
*/
select group_concat(name) as 'names' , -- 别名可以使用单引号
max(money) as "rich", -- 可以使用双引号
min(money) as poor, -- 可以不使用引号
avg(money) 平均值, -- as可以省略
std(money) "std money", -- 如果别名里有空格(不推荐),引号不能省略
gender from student group by gender;
# count用来统计分组以后每个组里非空数据的个数,如果要准确的统计分组数据个数,推荐count(id),因为id通常是主键不能为空
select count(id) id_count,
count(description),
count(city), -- count默认是不去重的,查改分组下有几个数据
count(distinct city), -- 去重计数
city from student group by city;
有的报错
有的只显示分组后第一个数据
/*
MySQL里的流程控制语句
if(判断条件,语句1,语句2):不像java里的if语句,而像java里的三元表达式
ifnull(值1,值2):如果值1不是null,就显示值1:如果值1是null,就显示值2
*/-- if语句的使用
select if(3 >2,'ok','good') from dual;
select name,money,if(money >60,'较富','较穷') money_level from student;
ifnull 可以认为是给查询结果设置默认值
select ifnull('ok','good') from dual;
select ifnull(description,"帅") from student;
-- 类似于java里的if---else语句结构
select money,casewhen money<60 then '富'when money >=60 and money <80 then '穷' when money >=80 and money <=100 then '最富'else'错误'end as money_level
from student;
-- 类似于java里的switch...case语句
select name,gender,case genderwhen '男' then 'male'when '女' then 'female'else '错误'end as english_gender
from student;
/*
查询语句里设定判断条件时,可以使用where语甸,也可以使用having语句
只能使用where不能使用having的场景:
当判断条件使用的字段不再查询的结果集里时,只能使用where,不能使用having
只能使用having不能使用where的场景:
1.查询条件使用到了字段的别名时,只能使用having,不能使用where
2.查询语句里使用了 group by进行分组,判断条件只能使用 having,不能使用where
*/
-- where和having都能使用的场景
select id,name,gender,birthday from student where id=1;
select id,name,gender,birthday from student having id=1;
-- 只能使用where不能使用naving的场景
select name,gender,birthday from student where id=1;
select name,gender,birthday from student having id=1; --报错。having使用的判断字段(id)不在查询的结果集里
-- 只能使用having不能使用where
select name as n,gender as g,birthday as b from student where n='郭德纲'; -- 不行
select name as n,gender as g,birthday as b from student having n='郭德纲';
select name,gender from student where gender='男';
select group_concat(name),gender from student group by gender where gender='男'; -- 报错
select group_concat(name),gender from student group by gender having gender='男';
/*
多个表格里的数据联合查询
1.union用来纵向拼接两个表格里的数据
2.from后面设置多个数据源,自连接(不推荐)
3.join...on语句用来实现多表查询
*/
/*
一;union:用来将多个表格的查询结果纵向拼接
特点:
1、两个表里的字段个数必须要一样
2.两个表字段的类型可以不一致,查询的结果是字符串
3.如果两个表存在完全相同的数据,只显示一次
*/
select * from t1 union select * from t2;
-- 二 from的多表连接联合查询 自连接
select * from student,score; -- 笛卡尔积,A表的数据每个都和B表的对应起来
select * from student,score where student.id=score.id;
/*
三 join...on多表连接查询
inner join 内连接,inner可以省略。会显示左右表共有的数据
left outer join 左外连接,outer可以省略。显示左右表共有,以及左表特有的数据
right outer join 右外连接,outer可以省略。显示左右表共有,以及右表特有的数据
full join 全连接,两个表所有的数据都会显示。MYSQL不支持全连接,可以查左连接再union右连接
*/
-- 内连接
select * from student inner join score on student.id = score.id;
select * from student left outer join score on student.id = score.id; -- 左外连接
select * from student right outer join score on student.id = score.id; -- 右外连接
select * from student left outer join score on student.id = score.id where score.id is null; -- 左表特有的数据
select * from student right outer join score on student.id = score.id where student.id is null; -- 右表特殊的数圳
-- 左连接 union 右连接=全连按
select * from student left outer join score on student.id = score.id
union
select * from student right outer join score on student.id = score.id;-- from子查询:数源来自一个查询结果,需要给查询结果起一个别名
-- 查上海的学生的信息和成绩
select * from
(select student.*,score.english,score.math from student join score on student.id = score.id) as ss
where ss.city='上海';-- ss表中字段名也不能一样(student表中和score表中都有id),所以没有查score表的id
select * from student join score on student.id=score.id where city='上海';-- where子查询:判断条件来源一个查询结果,数学大于80的学生
select * from student where id in (select id from score where math > 80);-- view视图的使用:当某个操作经常使用时,可以创建视图,存储这个结果
-- 可以理解为将查询结果保存到了一个表里,当数据源里的数据变化的时候,视图里的数据有也会变化
create view view_student_score as
(select student.*,score.math,score.english from student join score on student.id =score.id);
-- 可以查看普通表和视图表
show tables;
-- 查看视图表的建表语句
show create view view_student_score;
-- 删除视图表
drop view view_student_score;
-- 查询每个城市中,数学最高分
select city,max(math)from view_student_score group by city;
-- 查询id,这里面的id并不是最高分的id,而是城市分组查询后,城市第一个人的id
select id,city,max(math) as mm from view_student_score group by city;
-- 题
--1. 查询每个城市中,数学最高的学生信息
select * from view_student_score
join(select city,max(math) as mm from view_student_score group by city) as ss
where view_student_score.city =ss.city and view_student_score.math = ss.mm;
-- 不能查询到每个城市的数学最高分的学生信息,只要math等于max(math)就会查出来,并没有匹配城市
select id,name,city,math from view_student_score where math in
(select max(math) from view_student_score group by city);
-- 根据id进行查询,也不对,只能拿到该城市第一个人的id,不能拿到最高分的id,因为没有对id进行分组
select id,city,max(math) as mm from view_student_score group by city;
-- 2.计算男生和女生的数学和英语平均分
select gender,avg(math),avg(english) from view_student_score group by gender;
-- 3.求最大和最小的学生相差多少天
select max(birthday) from student;-- 查出来是最小的学生 是按时间戳进行判断的 1970年距离1998-10-05的秒数
select min(birthday )from student;-- 查出来是最大的学生 查出来是 1990-04-01 1970年距离1990-04-01的秒数
select datediff((select max(birthday) from student), (select min(birthday) from student)) as diff from dual;
-- 简化版本 因为两个查询都是来自于student,同一个源
select datediff(max(birthday),min(birthday)) as diff from student;
3.TPL:事物处理语言
/*
TransactionProcessLanguage 事务处理语言
事务的特性:1.原子性 2.一致性 3.隔离性 4.持久性
*/
create table user(
id int primary key auto_increment,
name varchar(32),
balance int);
-- jack给tony转10块钱
update user set balance=balance - 10 where name='jack';-- jack的账户减少10块钱
update user set balance=balance + 10 where name='tony';-- tony的账户增加10块钱
假设转一半的时候,服务器突然崩咯,第一条执行完成,第二天还没有执行。10块钱就找不到了。
把这两条语句放到一个事务里,保证数据的一致性,只能同时成功或者同时失败
每条sql语句都是一个独立的自动提交事务,如果需要手动的管理事务
-- 1.关闭事务的自动提交
set autocommit =false;
-- 2.开启一个事务
begin;/*或者是 start transaction;*/
update user set balance=balance - 10 where name='jack';-- jack的账户减少10块钱
update user set balance=balance + 10 where name='tony';-- tony的账户增加10块钱
commit; -- 3 将事务提交
rollback; -- 回滚事务,
set autocommit =true; -- 设置自动提交在mysql中只有存储引擎为InnoDB支持事务,mysql默认的存储引擎就是InnoDB
建一个MyISAM存储引擎的
creat table t3(
id primary key auto_increment,
name varchar(32)
)engine MyISAM;
show create table t3;
相关文章:

5 mysql 查询语句
1.DML:对数据进行增删改查 提示:Execute执行 Execute and Suppress 执行并且抑制这个警告 person表的结构 /* DML:Data Manipulation Language 数据操作语言,对数据进行 增删改查操作,因为査询的操作太频繁和复杂,将…...

从网络上下载并展示图像数据
一、代码 from PIL import Image import requests from io import BytesIO import matplotlib.pyplot as pltimage_url "https://www.alleycat.org/wp-content/uploads/2019/03/FELV-cat.jpg" response requests.get(image_url) # response.content 获取 HTTP 响…...

Machine-Learning 机器学习
目录 基本概念与分类 工作原理 应用领域 发展趋势 机器学习中的深度学习是如何工作的,以及它如何影响其他机器学习算法? 在机器学习中,哪些特定的数据预处理技术最有效,特别是在处理大规模数据集时? 强化学习在…...

CSP 2023 普及组第一轮 - CSP/S 2023初试题 基础部分解析
第 1 题 在 C 中,下面哪个关键字用于声明一个变量, 其值不能被修改?(B) A. unsigned B. const C. static D. mutable 【const声明的变量不可修改】 第 2 题 八进制数 12345670(8) 和 07654321(8) 的和为(D) A. 222222…...
解锁IPython的跨平台魔法:深入探索%%script命令的神秘力量
IPython 的 %%script 魔法命令是一种强大的工具,它允许你在 IPython 环境中执行外部脚本。这个特性特别适用于需要在 IPython Notebook 中直接与 Web 技术交互的场景。下面我将为你详细介绍 %%script 命令的使用方法,并通过代码示例展示其强大功能。 一…...

如何避免项目发布后用户从浏览器WebPack中看到源码
打包前在config->index.js中设置productionSourceMap为false productionSourceMap: false,...

java学习19VUE
VUE NPM npm的全称是Node Package Manager 中文名为Node.js包管理器,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。NPM可以方便地从一个全球的代码库中获取并安装Node.js模块,这些模块可以用于构建应用程序、…...
Redis7(四)哨兵、集群
哨兵 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为主库,继续对外服务 哨兵的作用: 监控redis运行状态,包括master和slave当master宕机了,能自动将slave转换为master 哨兵的功能…...
校园课程助手【3】-使用枚举类封装异常优雅处理全局异常
接着2中登录模块补充一个点: //可以看到这里返回给前端控制器的是一个类而不是html页面public RespBean doLogin(Valid LoginVo loginVo, HttpServletRequest request,HttpServletResponse response){return userService.doLogin(loginVo, request, response);}首先…...
LeetCode面试150——58最后一个单词的长度
题目难度:简单 默认优化目标:最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 反向遍历 参考文献 1 题目描述 给你一个字符串 s,由若干单词组成,单词前后用一些空格字…...

MySQL——数据库的操作,数据类型,表的操作
MySQL——数据库的操作,数据类型,表的操作 1. 数据库的操作1.1 显示当前数据库1.2 创建数据库舍弃当前所写的SQL语句查看当前数据库服务全局的默认字符集 1.3 使用数据库1.4 查看当前操作的数据库查看MySQL的帮助 1.5 删除数据库 2. 常见数据类型2.1 数值…...
Go 临界资源 安全问题
临界资源安全的问题: 临界资源: 指并发环境中多个 进程/线程/协程 可以共享(都可以调用)的资源/变量,如果在并发环境中处理不当,就会造成一些 严重、问题 func main() {//临界资源a : 10go func() {a 100f…...

安卓常用控件(上)
文章目录 TextViewButtonEditText TextView textview主要用于在界面上显示一段文本信息。 属性名描述id给当前控件定义一个唯一的标识符。layout_width给控件指定一个宽度。match_parent:控件大小与父布局一样;wrap_content:控件大小刚好够包…...
基于 RabbitMQ 实现延迟消息的订单处理流程
文章目录 订单创建流程1. 商品查询与订单数据初始化2. 总价计算与订单保存3. 扣减库存与购物车清理4. 延迟消息与支付状态检测 订单延迟消息监听器支付成功与订单取消1. 订单支付成功2. 订单取消与库存恢复 总结 在现代电商系统中,订单处理是一个复杂且关键的环节。…...

使用Python将Word文档转换为PNG图片
在这篇博客中,我将介绍一个使用Python编写的小工具,它能够将指定文件夹中的所有Word文档(.doc和.docx格式)转换为PNG图片。这个工具基于wxPython库构建图形用户界面,并结合了win32com和PyMuPDF库实现文档格式的转换。接…...
Qt创建Json对象时浮点数的精度控制
我们在Qt中使用Json都是使用QJsonDocument、QJsonArray、QJsonObject、QJsonValue等类。 当我们在QJsonObject中插入浮点数字段时,会发现浮点数的小数位数很长,如下所示: #include <QJsonDocument> #include <QJsonArray> #incl…...

【海贼王航海日志:前端技术探索】CSS你了解多少?(二)
目录 1 -> 字体属性 1.1 -> 设置字体 1.2 -> 字体大小 1.3 -> 字体粗细 1.4 -> 文字样式 2 -> 文本属性 2.1 -> 文本颜色 2.1.1 -> 认识RGB 2.1.2 -> 设置文本颜色 2.2 -> 文本对齐 2.3 -> 文本装饰 2.4 -> 文本缩进 2.5 -&g…...

软件测试面试200问(全)
1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前 3 年积累测试经验,按如何做好测试工程师的要点去要求自己&a…...

【单片机毕业设计选题24106】-基于阿里云的心率呼吸监测系统
系统功能: 上电后OLED显示 “欢迎使用请稍后”,两秒后显示Connecting...表示 正在连接阿里云,正常连接阿里云后进入系统显示界面,如长时间显示Connecting...请 检查WiFi网络是否正确。 系统连接阿里云后可在阿里云界面查看到系统上报的温…...
leetcode28:找出字符串第一个匹配的下标
找出字符串第一个匹配的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 public int strStr(Str…...

c++ decltype关键字
decltype为类型推导关键字。 示例代码: // decltype也可用于函数模板编程: template<typename T, typename U> auto add(T t, U u) -> decltype(t u) {return t u; }// decltype推导函数返回类型 auto doubleNumFunc(int x) -> decltype(x * 2) {ret…...

QT聊天项目DAY14
1. 客户端登录 1.1 初始化玩家头像 将头像的大小固定在250 * 250 void InitHeadImage(); // 初始化头像/* 初始化头像 */ void LoginWidget::InitHeadImage() {// 加载头像QPixmap OriginalPixmap(":/Chat/Images/head_5.jpg");OriginalPixmap …...

RKNN3588上部署 RTDETRV2
RT-DETR V2 是由百度研究团队在 2024年 提出的,是其广受好评的实时目标检测模型 RT-DETR 的重大升级版本。它继承了第一代 RT-DETR 利用 Transformer 架构实现端到端目标检测 和 卓越实时性能 的核心优势,并针对模型精度、训练效率和部署灵活性进行了全方…...
【RAG召回】BM25算法示例
rank-bm25 功能示例 本篇将通过多个示例,快速展示 rank-bm25 库的核心功能。不使用jieba。 准备工作 首先,确保您已经安装了 rank-bm25。 pip install rank-bm25接下来,我们定义一个通用的中文语料库和分词函数。这里我们使用简单的单字切…...

系统思考:跳出症状看全局
明天将为华为全球采购认证管理部的伙伴们带来一场关于系统思考的深度课程!通过经典的啤酒游戏经营决策沙盘,一起沉浸式体验如何从全局视角看待问题,发现单点最优并不等于全局最优。 这不仅是一次简单的课程,更是一次洞察系统背后…...

Unity使用代码分析Roslyn Analyzers
一、创建项目(注意这里不要选netstandard2.1会有报错) 二、NuGet上安装Microsoft.CodeAnalysis.CSharp 三、实现[Partial]特性标注的类,结构体,record必须要partial关键字修饰 需要继承DiagnosticAnalyzer 注意一定要加特性Diagn…...

MySQL 索引优化(Explain执行计划) 详细讲解
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 MySQL 索引优化(Explain执行计划…...

行李箱检测数据集VOC+YOLO格式2083张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2083 标注数量(xml文件个数):2083 标注数量(txt文件个数):2083 …...

GAN优化与改进:从条件生成到训练稳定性
摘要 本文聚焦生成对抗网络(GAN)的核心优化技术与改进模型。系统解析 条件生成对抗网络(CGAN) 的可控生成机制、深度卷积GAN(DCGAN) 的架构创新,揭示GAN训练崩溃的本质原因,并介绍W…...

如何生成和制作PDF文件
在数字化办公的今天,PDF文件已经成为我们工作和学习中不可或缺的一部分。无论是合同、报告、简历,还是电子书、表单,PDF格式都以其跨平台兼容性、不可编辑性和清晰的排版而被广泛使用。但你是否知道,生成和制作PDF文件其实并不复杂…...