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员工不参与统计。

相关推荐
orzdh8 分钟前
OL9设置oracle23ai数据库开机自启动
数据库
在下_诸葛14 分钟前
SQL(8):INSERT INTO SELECT与SELECT INTO,选数据出来,放到另一个表中
数据库·sql
Linux运维老纪15 分钟前
Linux系统常见磁盘扩容操作(Common Disk Expansion Operations in Linux Systems)
linux·运维·服务器·前端·数据库·云计算·运维开发
Blossom.11817 分钟前
KWDB创作者计划— KWDB技术范式革命:从数据存储到认知进化的架构跃迁
数据库·分布式·oracle·架构·自动化·kwdb·流式计算拓扑
Databend37 分钟前
如何使用 Databend Cloud 化简大数据架构?| Data Infra NO.24 回顾
数据库
樽酒ﻬق43 分钟前
打造AI应用基础设施:Milvus向量数据库部署与运维
数据库·人工智能·milvus
CodeJourney.1 小时前
利用DeepSeek实现文档到流程图的高效转换:技术应用与实践探索
数据库·人工智能·算法·excel·流程图
Arbori_262152 小时前
Oracle 分析函数(Analytic Functions)
数据库·oracle
notfindjob2 小时前
QT Sqlite数据库-教程002 查询数据-上
数据库
猫咪-95272 小时前
数据库原理及应用mysql版陈业斌实验三
java·数据库·sql