Mysql的基本查询练习

目录

一、Create

1.1单行数据+全列插入

[1.2 多行数据+指定列插入](#1.2 多行数据+指定列插入)

1.3插入否则更新

[1.4 替换](#1.4 替换)

二、Retrieve

2.1全列查询

2.2指定列查询

2.3查询字段为表达式

2.4为查询结果指定别名

[2.5 结果去重](#2.5 结果去重)

[2.6 where 条件](#2.6 where 条件)

[2.6 NULL的查询](#2.6 NULL的查询)

[2.7 结果排序](#2.7 结果排序)

[三、 Update](#三、 Update)

四、Delete

五、插入查询结果

六、聚合函数

[七、group by子句的使用](#七、group by子句的使用)

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

一、Create

语法:

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

value_list:value,[ , value ] ...

\]中的语法是可以忽略的。 案例: 创建一张学生表: ![](https://file.jishuzhan.net/article/1706319144971931650/effb6a0b072a9e6a8bb89d431bdfd77e.webp) ### 1.1单行数据+全列插入 ![](https://file.jishuzhan.net/article/1706319144971931650/523ebd9a792f1f1f6edb052bbb09e344.webp) ![](https://file.jishuzhan.net/article/1706319144971931650/c8558cf3701bceee994d62278e977257.webp) ### 1.2 多行数据+指定列插入 ![](https://file.jishuzhan.net/article/1706319144971931650/4d28fbabc8d61dacbf943f4c342b9b70.webp) value_list 数量必须和指定列数量及顺序一致。 ![](https://file.jishuzhan.net/article/1706319144971931650/c4dbfcf27a7ab4eb30a923423e72465e.webp) ### 1.3插入否则更新 由于主键或者唯一键对应的值已经存在而导致插入失败 ----- 主键冲突 ![](https://file.jishuzhan.net/article/1706319144971931650/a941ea831451e165b81124ed162ea3f9.webp) ------唯一键冲突 ![](https://file.jishuzhan.net/article/1706319144971931650/02540654f47af25136952054dfbbcec4.webp) 可以选择性的进行同步更新操作语法: > **insert** ... **on duplicate key update** column = value \[, column = value\] ... ![](https://file.jishuzhan.net/article/1706319144971931650/c3b1ce2d3848c9e4843da7a9f1f50cad.webp) 关于mysql返回的信息: > --- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等 > > --- 1 row affected: 表中没有冲突数据,数据被插入 > > --- 2 row affected: 表中有冲突数据,并且数据已经被更新 --通过mysql函数获取收到影响的数据行数 ![](https://file.jishuzhan.net/article/1706319144971931650/c0db10d5cbe045ad49c2d6c1b7825e3e.webp) ### 1.4 替换 语法: > **replace into** table_name (line_name,..) values(); 如果出现冲突,删除旧数据插入新数据,如果没有冲突,则擦汗如数据。 ![](https://file.jishuzhan.net/article/1706319144971931650/2f359e9a01bcd0123079c4e68efd3f43.webp) ## 二、Retrieve 语法: > **select** > > **\[distinct\] {\* \| {column \[, column \]...}}** > > **\[from table_name\]** > > **\[where ...\]** > > **\[order by column \[asc \| desc \], ...\]** > > **limit ...** 案例: ---创建表结构 ![](https://file.jishuzhan.net/article/1706319144971931650/4a18c649ffcb6d88151a91bd0276417a.webp) ### 2.1全列查询 > **select \* from** table_name; ![](https://file.jishuzhan.net/article/1706319144971931650/382cc81d6b0fc50400bdbf792bb5d586.webp) 通常情况下不建议使用 \* 进行全列查询。主要原因是查询的列越多,意味着需要传输的数据量越大;而且有可能会影响到索引的使用。 ### 2.2指定列查询 > **select line_name,... from table_name;** ![](https://file.jishuzhan.net/article/1706319144971931650/d225edbeac79d9d7d4c06404131454eb.webp) ### 2.3查询字段为表达式 ---表达式不包含字段 ![](https://file.jishuzhan.net/article/1706319144971931650/e830f8b70bf0aa3dd696a119fb309f38.webp) ---表达式包含一个字段 ![](https://file.jishuzhan.net/article/1706319144971931650/f5cf286f1a90554b9ff9b9456961b2a1.webp) --- 表达式包含多个字段 ![](https://file.jishuzhan.net/article/1706319144971931650/31a9f89d15a937e6a50ce7e252590546.webp) ### 2.4为查询结果指定别名 语法: > **select column \[as\] alias_name \[...\] from table_name;** ![](https://file.jishuzhan.net/article/1706319144971931650/b6078735825888f5bc2becf60c0ad57a.webp) ### 2.5 结果去重 ![](https://file.jishuzhan.net/article/1706319144971931650/f8f220412ac8806830e266b7602622a0.webp) 有结果重复。 加上 distinct 选项。 ![](https://file.jishuzhan.net/article/1706319144971931650/720e58e458f51031a6e5a621727fdac8.webp) ### 2.6 where 条件 比较运算符: ![](https://file.jishuzhan.net/article/1706319144971931650/4f5f18ed630702e8bd2758238abcff47.webp) 逻辑运算符: ![](https://file.jishuzhan.net/article/1706319144971931650/13f8e282090d6670a0604eec652da790.webp) 案例: **🖊英语不及格的同学及英语成绩(\<60)** ![](https://file.jishuzhan.net/article/1706319144971931650/753d2f275026d53723159b07978d8919.webp) **🖊语文成绩在\[80,90\]分的同学及语文成绩** --使用and进行条件连接 ![](https://file.jishuzhan.net/article/1706319144971931650/25e92f4518cc91cf63a406a2e247feda.webp) -- 使用between and 条件 ![](https://file.jishuzhan.net/article/1706319144971931650/b26419aee9d7a56c6ede2470ca4f2fd4.webp) **🖊数学成绩是58或者59或者98或者99分的同学及数学成绩** -- 使用or进行条件连接 ![](https://file.jishuzhan.net/article/1706319144971931650/a5d9621efa57c6f55461939b0239167e.webp) --- 使用in条件 ![](https://file.jishuzhan.net/article/1706319144971931650/fa77338b33021dc46c1ee353229957b3.webp) **🖊姓孙的同学及孙某同学** ---% 匹配任意多个(包括0个)任意字符 ![](https://file.jishuzhan.net/article/1706319144971931650/7248fcdda3ecf636a71159704d9ba4ed.webp) -- _ 匹配严格的一个任意字符 ![](https://file.jishuzhan.net/article/1706319144971931650/6e116e345c439642e6677a996c819c6e.webp) **🖊语文成绩好于英语成绩的同学** ----where 条件中比较运算符两侧都是字段 ![](https://file.jishuzhan.net/article/1706319144971931650/e54cde4f63e9a7c56a4cf79bca85ec22.webp) **🖊总分在200分以下的同学** --- where条件中使用表达式 ![](https://file.jishuzhan.net/article/1706319144971931650/8d1dc2f08505b760a360785b9972bd9e.webp) 别名不能用在where条件中是因为where在判断时是拿着别名去查询满足条件的条目。 **🖊语文成绩\>80并且不姓孙的同学** ![](https://file.jishuzhan.net/article/1706319144971931650/30053b0ca17f83c4e2397b484f61f1fc.webp) **🖊孙某同学,否则要求总成绩\>200并且语文成绩\<数学成绩并且英语成绩\>80** ---综合性查询 ![](https://file.jishuzhan.net/article/1706319144971931650/d4ece654b4fd0553b7899efff2a5a6ed.webp) ### 2.6 NULL的查询 --查询students表 ![](https://file.jishuzhan.net/article/1706319144971931650/8ae4e7ae2781c978666a2829a7da2b7e.webp) --查询qq号已知的同学姓名 ![](https://file.jishuzhan.net/article/1706319144971931650/e2afa4199502d8156d19cd017fbdb89e.webp) --- null和null的比较,=和\<=\>的区别 ![](https://file.jishuzhan.net/article/1706319144971931650/f65fd69a64b4f22f96bab4816061cad6.webp) ### 2.7 结果排序 语法: > --- **asc** 为升序(从小到大) > > --- **desc** 为降序(从大到小) > > --- 默认为asc > > **select ... from table_name \[where ...\] order by column \[asc \| desc\], \[...\];** **🖊同学及数学成绩,按数学成绩升序显示** ![](https://file.jishuzhan.net/article/1706319144971931650/b4469464c62b861ae00aec783928eb36.webp) **🖊 同学及qq号,按qq号排序显示** --null虽然不能运算,但是视为比任何值都小,所以升序出现在最上面。 ![](https://file.jishuzhan.net/article/1706319144971931650/a34f403042cb46a2b19ac59b7fc69058.webp) ![](https://file.jishuzhan.net/article/1706319144971931650/65ad842e7ec0b53e6b09fea495f34530.webp) **🖊查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示** ---多字段排序,排序优先级随书写顺序。 ![](https://file.jishuzhan.net/article/1706319144971931650/8a41399b1203ac03a45ac1e2d16dfded.webp) **🖊查询同学及总分,由高到低** --order by中可以使用表达式 ![](https://file.jishuzhan.net/article/1706319144971931650/4a0e5c5bd42e5f85d9625d025d1ecefa.webp) ---order by 子句中可以使用列别名 ![](https://file.jishuzhan.net/article/1706319144971931650/686644c807d831725b4383b846de1f73.webp) 🖊查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示 --- 结合 where子句 和order by 子句 ![](https://file.jishuzhan.net/article/1706319144971931650/093e35ce34006f0b965ee2457ed2894e.webp) 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页。 ![](https://file.jishuzhan.net/article/1706319144971931650/27f54140fe293e190ed981c3237640f4.webp) ## 三、 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员工不参与统计。

相关推荐
❀͜͡傀儡师6 分钟前
docker部署WhoDB开源轻量级数据库管理工具
数据库·docker·开源
皙然13 分钟前
Redis八大核心数据类型详解:从底层实现到实战落地
数据库·redis·bootstrap
时光追逐者1 小时前
一款免费、简单、高效的在线数据库设计工具
数据库·mysql·oracle·sql server
another heaven1 小时前
【软考 2026 最新版 NoSQL 数据库全分类】
数据库·nosql
满天星83035771 小时前
【MySQL】表的操作
linux·服务器·数据库·mysql
yashuk1 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
F1FJJ1 小时前
VS Code 里管理 PostgreSQL,有哪些选择?主流扩展横向对比
网络·数据库·postgresql·容器
Bdygsl1 小时前
MySQL(8)—— 事务
数据库·mysql
IvorySQL1 小时前
直播回顾| PostgreSQL 18.3 x IvorySQL 5.3:开启 AI 数据库新纪元
数据库·postgresql·开源
编程之升级打怪1 小时前
数据库的实时同步和异步同步
数据库