Mysql的基本查询练习

2023-09-17 16:48:38

目录

一、Create

1.1单行数据+全列插入

1.2 多行数据+指定列插入

1.3插入否则更新

1.4 替换

二、Retrieve

2.1全列查询

2.2指定列查询

2.3查询字段为表达式

 2.4为查询结果指定别名

2.5 结果去重

2.6 where 条件

2.6 NULL的查询

2.7 结果排序

三、 Update

四、Delete

五、插入查询结果

六、聚合函数

七、group by子句的使用

CRUD:Create(创建),Retrieve(读取),Update(更新),Delete(删除)

一、Create

语法:

        insert  [ into ]  table_name [ (column [,column] ...) ] values (value_list) [, (value_list)] ...

value_list:value,[ , value ] ...

[]中的语法是可以忽略的。

案例:

创建一张学生表:

1.1单行数据+全列插入

 

 

1.2 多行数据+指定列插入

 

 value_list 数量必须和指定列数量及顺序一致。

1.3插入否则更新

由于主键或者唯一键对应的值已经存在而导致插入失败

----- 主键冲突

------唯一键冲突

可以选择性的进行同步更新操作语法:

 insert  ...  on duplicate key update column = value [, column = value] ...

关于mysql返回的信息:

---  0 row affected:  表中有冲突数据,但冲突数据的值和 update 的值相等 

---  1 row affected:  表中没有冲突数据,数据被插入

---  2 row affected:  表中有冲突数据,并且数据已经被更新

--通过mysql函数获取收到影响的数据行数

1.4 替换

语法:

        replace  into  table_name (line_name,..) values();

如果出现冲突,删除旧数据插入新数据,如果没有冲突,则擦汗如数据。

二、Retrieve

语法:

select

        [distinct] {*  |  {column [, column ]...}}

        [from table_name]

        [where ...]

        [order by column [asc | desc ],  ...]

        limit  ... 

案例:

---创建表结构

 

2.1全列查询

         select * from table_name;

通常情况下不建议使用 * 进行全列查询。主要原因是查询的列越多,意味着需要传输的数据量越大;而且有可能会影响到索引的使用。

2.2指定列查询

         select line_name,... from table_name;

2.3查询字段为表达式

---表达式不包含字段

 

---表达式包含一个字段

 

--- 表达式包含多个字段

 2.4为查询结果指定别名

语法:

        select column [as] alias_name [...] from table_name;

2.5 结果去重

 

 有结果重复。

加上 distinct 选项。

2.6 where 条件

比较运算符:

逻辑运算符:

案例:

🖊英语不及格的同学及英语成绩(<60)

🖊语文成绩在[80,90]分的同学及语文成绩

--使用and进行条件连接

 -- 使用between  and  条件

🖊数学成绩是58或者59或者98或者99分的同学及数学成绩

 -- 使用or进行条件连接

--- 使用in条件

🖊姓孙的同学及孙某同学

---% 匹配任意多个(包括0个)任意字符

-- _ 匹配严格的一个任意字符

 

🖊语文成绩好于英语成绩的同学

----where 条件中比较运算符两侧都是字段

🖊总分在200分以下的同学

--- where条件中使用表达式

 

别名不能用在where条件中是因为where在判断时是拿着别名去查询满足条件的条目。

🖊语文成绩>80并且不姓孙的同学

 🖊孙某同学,否则要求总成绩>200并且语文成绩<数学成绩并且英语成绩>80

---综合性查询

2.6 NULL的查询

 --查询students表

--查询qq号已知的同学姓名

--- null和null的比较,=和<=>的区别

2.7 结果排序

语法:

--- asc 为升序(从小到大)

--- desc 为降序(从大到小)

--- 默认为asc

select  ... from table_name [where ...]  order by column [asc | desc], [...];

🖊同学及数学成绩,按数学成绩升序显示

🖊 同学及qq号,按qq号排序显示

--null虽然不能运算,但是视为比任何值都小,所以升序出现在最上面。

🖊查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示

---多字段排序,排序优先级随书写顺序。

🖊查询同学及总分,由高到低

--order by中可以使用表达式

 

---order by 子句中可以使用列别名

 

 🖊查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示

--- 结合 where子句 和order by 子句

2.8筛选分页结果

语法:

-- 起始下标为0

-- 从 0 开始,筛选 n条结果

select  ... from table_name [where ...] [order by ...] limit n;

-- 从s开始,筛选n条结果

select  ... from table_name [where ...] [order by ...] limit s, n;

-- 从s开始,筛选n条结果,比第二种用法更明确,建议使用

select ...  from table_name [where ...] [order by ...] limit n offset s; 

注:在对未知表查询时,最好加一条limit 1,避免因为表中数据过大,查询全表数据导致数据库卡死。

按id进行分页,每页3条记录,分别显示第1、2、3页。

 

三、 Update

语法:

update table_name set column = expr [, column = expr ...]  [where ... ] [order by ...] [ limit ...]

对查询到的结果进行列值更新

案例:

🖊将孙悟空同学的数学成绩变更为80分。

🖊将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分

🖊将总成绩倒数前三的3位同学的数学成绩加上30分

 

四、Delete

语法:

        delete from table_name [where ...] [order by ...] [limit ...]

🖊删除孙悟空同学的考试成绩

👓删除整张表数据

这类操作要慎用。

-- 准备测试表

-- 插入测试数据

-- 查看测试数据

删除查看结果

--再插入一条数据,发现自增id在原值上增长而没有重置:

--查看表结构:

👓截断表

语法:

        truncate [table] table_name;

~~这个操作只能对整张表操作,不能像delete一样针对部分数据操作;

~~这项操作mysql不会记录,比delete更快,无法回滚。

~~会重置auto_increment项。

--准备测试表

--插入测试数据

--查看测试数据

--截断整表数据,注意影响行数是0,所以实际上没有对数据真正操作,mysql也没有记录

--查看删除结果

--再插入一条数据,自增id在重新增长

--查看数据

--查看表结构,会发现auto_increment=2项

五、插入查询结果

语法:

insert into table_name [(column [,column ...])] select ...

案例:删除表中的重复记录,重复的记录只能有一份。

思路:

--创建一张空表 no_duplicate_table,结构和duplicate_table 一样

--将duplicate_table的去重数据插入到no_duplicate_table

--通过重命名表,实现原子的去重操作

--查看最终结果

六、聚合函数

案例

🖊统计班级共有多少同学

--用*做统计,不受NULL影响

 

--使用表达式做统计

 

🖊统计班级收集的qq号有多少

--null不会计入结果

 

 🖊统计本次考试的数学成绩分数个数

--count(math)统计的是全部成绩

 --count(distinct math) 统计的是去重成绩数量

🖊统计数学成绩总分

 

🖊统计平均总分

🖊返回英语最高分

 

 🖊返回>70分以上的数学最低分

七、group by子句的使用

 在select中使用group by子句可以对指定列进行分组查询

select  column1,column2,.. from table group by column;

案例:

准备工作,创建一个雇员信息表(码云地址
,来自oracle 9i的经典测试表)

        EMP 员工表

        DEPT部门表

        SALGRADE工资等级表

🖊显示每个部门的平均工资和最高工资

🖊显示每个部门的每种岗位的平均工资和最低工资

 

having是对分完组后最终聚合统计的结果进行判断。而where只能对具体的任意列进行条件筛选

🖊显示平均工资低于2000的部门和它的平均工资,但是SMITH员工不参与统计。


更多推荐

transformer大语言模型(LLM)部署方案整理

说明大模型的基本特征就是大,单机单卡部署会很慢,甚至显存不够用。毕竟不是谁都有H100/A100,能有个3090就不错了。目前已经有不少框架支持了大模型的分布式部署,可以并行的提高推理速度。不光可以单机多卡,还可以多机多卡。我自己没啥使用经验,简单罗列下给自己备查。不足之处,欢迎在评论区指出。框架名称出品方开源地址Fa

JWT 令牌撤销:中心化控制与分布式Kafka处理

【squids.cn】全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等令牌对于安全数字访问至关重要,但如果您需要撤销它们怎么办?尽管我们尽了最大努力,但有时代币可能会被泄露。这可能是由于编码错误、意外记录、零日漏洞和其他因素造成的。令牌撤销是现代安全性的一个重要方面,确

并发编程——synchronized

文章目录原子性、有序性、可见性原子性有序性可见性synchronized使用synchronized锁升级synchronized-ObjectMonitor原子性、有序性、可见性原子性数据库事务的原子性:是一个最小的执行的单位,一次事务的多次操作要么都成功,要么都失败。并发编程的原子性:一个或多个指令在CPU执行过程

【无公网IP内网穿透】 搭建Emby媒体库服务器并远程访问「家庭私人影院」

目录1.前言2.Emby网站搭建2.1.Emby下载和安装2.2Emby网页测试3.本地网页发布3.1注册并安装cpolar内网穿透3.2Cpolar云端设置3.3Cpolar内网穿透本地设置4.公网访问测试5.结语1.前言在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一,加上移动网络技术的发展,随时随地

vue3.2+ts封装axios

1.创建utils文件夹/server下面创建index.ts,代码如下:importaxios,{AxiosRequestConfig}from"axios";import{BASE_URL,TIMEOUT}from"@/config/axios";/***@说明接口请求返回信息(按照自己的实际情况分配基础请求格式)

解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL)

解决WSL2占用内存过多问题(DockeronWSL2:VmmemWSL)一、问题描述二、问题解决2.1创建`.wslconfig`文件2.2重启wsl2一、问题描述安装完WSL2后,又安装了Docker,使用了一段时间,发现电脑变卡,进一步查看,发现CPU和内存占用过大,如下图:docker仅仅运行了mysql和zk

【LLM】Prompt tuning大模型微调实战

noteprompttuning可看做是prefixtuning的简化版本,在输入层加入prompttokens,并不需要加入MLP进行调整来解决难训练的问题,作者实验表明随着预训练模型参数量的增加,prompttuning效果逼近finetuning效果文章目录note一、Propmttuning1.peft库中的t

热点探测技术架构设计与实践

1.概述说到热点问题,首先我们先理解一下什么是热点?热点通常意义来说,是指在一段时间内,被广泛关注的物品或事件,例如微博热搜,热卖商品,热点新闻,明星直播等等,所以热点产生主要包含2个条件:1.有限时间,2流量高聚。而在互联网领域,热点又主要分为2大类:1.有预期的热点:比如在电商活动当中推出的爆款联名限量款的商品,又

软件机器人财务报表信息的采集和录入、抵押贷款信息查询助力银行贷款业务管理

随着科技的飞速发展,自动化的应用场景也越来越广泛。博为小帮软件机器人的出现,无疑为众多行业带来了巨大的转变,其中就包括银行贷款业务。软件机器人是一种可以模拟人类行为,自动化执行高重复性任务。银行业务中,许多重复性高、规则明确的工作,如企业客户财务报表信息的采集和录入、抵质押贷款的抵质押物信息查询等,正适合软件机器人的应

安卓备份分区----手动查询安卓系统分区信息 导出系统分区的一些基本操作

在玩机搞机过程中。有时候需要手动查看有些分区信息,或者备份分区的操作。那么今天以小米8为例解析下其中的操作步骤机型:小米8adb版本:https://developer.android.com/studio/releases/platform-tools机型芯片:高通骁龙845手机系统版本:安卓10机型界面:twrp机

嵌入式Linux驱动开发(I2C专题)(四)

编写APP直接访问EEPROM参考资料:Linux驱动程序:drivers/i2c/i2c-dev.cI2C-Tools-4.2:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/AT24cxx.pdf1.硬件连接STM32MP157的I2C模块连

热文推荐