MySQL-DML语句

2023-09-16 16:46:08

Create

单行插入数据

insert into tb_name [(要插入的属性列...)]---全列插入时可省略 values(属性值);

在这里插入图片描述
🚀像学生表中插入一条记录

insert into student values('1003','李四','男');

多行插入数据

insert into ... values(),(),()...;//多条记录用分号隔开

🚀向学生表中插入多条数据

insert into student values('1004','王五','女'),('1005','赵六','男'),('1006','田七','女');

在这里插入图片描述

插入否则更新

insert ... on duplicate key update 属性名 = 属性值,属性名 = 属性值...

🚀当我们插入某条记录时可能会和表中已经存在的数据发生键值冲突,此时使用上述语句当发生冲突时修改原表中冲突的语句。
在这里插入图片描述

insert into student values('1002','王二麻子','男') on duplicate key update sno='1002',sname='王二麻子',sex='男';

在这里插入图片描述

replace into

🚀replace into的意思是,当插入记录时不发生键值冲突那就相当于普通的insert into,如果发生冲突那么就将新插入的数据替换老的数据。

replace into student values('1008','孙悟空','男');
replace into student values('1006','沙悟净','男');

在这里插入图片描述

插入学号为1008的数据时没有发生冲突,插入学号为1006的数据时发生了冲突并且将老数据进行了替换。

查看受影响行数的函数

🚀在用户进行CRUD操作结束时,通常会显示此条请求影响了几行数据。

select row_count(); //也可以使用此函数查看

在这里插入图片描述

在这里插入图片描述

Retrieve

SELECT [DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

🚀后序的查/改/删都建立在下面表结构的基础上。

create table exam(
	id int primary key,	
	name varchar(10) not null,
	chinese int,
	math int,
	english int);

🚀在表中插入一些数据。

insert into exam values
    (1,'张三',67,98,56),
    (2,'李四',87,78,77),
    (3,'王五',88,98,90),
    (4,'赵六',82,84,67),
    (5,'田七',55,85,45),
    (6,'小明',70,73,78),
    (7,'小红',75,65,30);

全列查询

select *from tb_name;

指定列查询

select col1,col2... from tb_name;

🚀查询成绩表中的人员信息与数学成绩

select id,name,math from exam;

在这里插入图片描述

select+函数/表达式

🚀select后可以跟函数调用,例如查看当前时间等。

select current_time();

在这里插入图片描述
🚀select 后面还可以跟表达式。

select 10 + 20;

在这里插入图片描述

对查询出的列重命名-as

select col1 as 名字,... ...;

🚀查询出每个人的信息与总成绩

select id,name,chinese + math + english as total from exam;

在这里插入图片描述

distinct

select distinct ...; //可以对查询的结果做去重

order by

select ... order by col1 [asc | desc],col2[asc|desc],...;
//默认为asc升序排序
//desc降序排序
//可以根据多列进行排序,规则是当col1数据相同时,再根据col2数据排序...

🚀根据学生的总成绩进行排序

select id,name,chinese + math + english as total from exam order by total desc;

在这里插入图片描述
🚀按数学降序,语文升序,英语升序的规则查询

select * from exam order by math desc,chinese asc,english asc;

在这里插入图片描述

limit

1.limit n//显示前n行数据
2.limit s,n//从s行开始显示n行数据,行数是从第0行开始的
3.limit n offset s//显示n行数据从第s行开始显示

🚀找出总分前三名的学生信息

select id,name,chinese + math + english as total from exam order by total desc limit 3;
//或者
select id,name,chinese + math + english as total from exam order by total desc limit 0,3;
//或者
select id,name,chinese + math + english as total from exam order by total desc limit 3 offset 0;

在这里插入图片描述

🚀找出数学成绩后三名的学生信息(成绩只需显示数学成绩)

select id,name,math from exam order by math asc limit 3 offset 0;

在这里插入图片描述
🚀找出总成绩第2到5名学生

select id,name,chinese + math + english as total from exam order by total desc limit 4 offset 1;

在这里插入图片描述

where 子句

🚀where子句用于作筛选条件,筛选出符合要求的记录。

select ... where col...;

🚀找出总分高于240分的学生信息

select id,name,chinese + math + english as total from exam where total > 240;
//错误的

在这里插入图片描述

注意:上面这中写法是错误的,where子句是优先于select执行的,where作为筛选条件,而select是将通过筛选条件的相关列显示出来。并且还要注意一点的是在where子句处不能对相关列作重命名。

select id,name,chinese + math + english as total from exam where chinese+math+english > 240;

在这里插入图片描述

比较运算符

运算符说明
>,>=,<.<=大于,大于等于,小于,小于等于
=等于,对NULL值的比较是不安全的,例如NULL=NULL结果还是NULL
<=>等于,对NULL值的比较是安全的
!=不等于,对NULL值的比较是不安全的
<>不等于,对NULL值的比较是安全的
between a0 and a1范围匹配 [a0,a1]
in (option…)如果是option中的任意一个就返回true
is NULL是NULL
is not NULL不是NULL
like模糊匹配,%表示人0个或多个字符,_表示任意一个字符

🚀找出英语不及格的学生信息(成绩只包含英语成绩)

select id,name,english from exam where english < 60;

在这里插入图片描述
🚀找出语文成绩在80-90的学生信息。

select * from exam where chinese between 80 and 90;

在这里插入图片描述
🚀找出数学成绩是98或者99的同学信息

select * from exam where math in(98,99);

在这里插入图片描述
🚀找出王某同学,和王同学的信息。

insert into exam values (8,'王小利',88,88,88); //先插入一条记录
select * from exam where name like'王_' or name like '王%';

在这里插入图片描述

逻辑运算符

Column 1Column 2
and多个条件都为true时,结果才为true
or多个条件只要满足一个结果就为true
not如果条件为true,那么结果就为false

🚀找出数学成绩为98或99的同学

select * from exam where math=98 or math=99;

在这里插入图片描述

Update

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

🚀将王小利同学的英语成绩改为80分

update exam set english=80 where id=8;

在这里插入图片描述
🚀将倒数前三名的学生数学成绩加上30分

update exam set math=math+30 order by math+english+chinese asc limit 3 ;

Delete

🚀为了测试新建一张新的表

create table test_delete (id int auto_increment primary key,name varchar(10));

🚀在表中插入数据

insert into test_delete (name) values 
    ('张三'),
    ('李四'),
    ('王五');

在这里插入图片描述

delete

delete from tb_name [where][order by][limit];

🚀删除id为2的记录

delete from test_delete where id=2;

在这里插入图片描述
🚀清空表中的数据

delete from test_delete;

//查看auto_increment的值
show create table test_delete\G;

在这里插入图片描述

truncate

truncate [table] tb_name;

重新插入数据:

insert into test_delete (name) values 
    ('张三'),
    ('李四'),
    ('王五');

在这里插入图片描述
🚀清空表中的数据

truncate table test_delete;
//查看auto_increment的值
show create table test_delete\G;

在这里插入图片描述

insert into test_delete (name) values('测试');

在这里插入图片描述
🚀事实证明truncate清空表的数据时,auto_increment也会被清空。

delete和truncate的区别

1.delete 走事务,truncate不走事务,也就是说不会将truncate记录在日志中。
2.truncate只能整体删除表的所有数据,不能选择的删除
3.delete清除表的数据后auto_increment值不会被重置,truncate清空表的数据 auto_increment也会被重置

更多推荐

【C++】string类模拟实现下篇(附完整源码)

目录1.resize2.流插入<<和流提取>>重载2.1流插入<<重载2.2流提取<<3.常见关系运算符重载4.赋值重载4.1浅拷贝的默认赋值重载4.2深拷贝赋值重载实现4.3赋值重载现代写法5.写时拷贝(了解)6.源码6.1string.h6.2test.cpp1.resize下面我们来实现一下resize():re

【C++ 程序设计】实战:C++ 实践练习题(21~30)

目录21.计算并输出1到9之间奇数之和22.多层嵌套计算23.循环结构:打印变量a、b、c24.函数调用:全局变量、局部变量25.找到数组中不等于最大值和最小值的元素26.计算:平方根、平方、立方根、立方27.找出三个整型数中的最大值28.初始化一个5x5的二维数组a,根据表达式(i+1)*(j+1)将数组元素设置为i

【UML】软件工程中常用图:类图、部署图、时序图、状态图

作者简介:前言:UML中的很多东西平时都听过、用过,诸如类图、时序图等,本文将详细详细讲一下UML中常用的几类图,并且会引入一个完整的例子来讲解,UML在工程上到底该怎么合理使用。目录1.概述1.1.什么是UML?1.2.UML用在何处?2.静态结构2.1.类图2.2.部署图3.描述动态3.1.顺序图3.2.状态图4.

【UML】详解UML类图

目录1.概述2.权限3.关系3.1.连线关系3.2.依赖3.3.泛化(继承)3.4.实现3.5.关联3.6.聚合3.7.组合1.概述UML是什么?书面化一点的说法是:UML(UnifiedModelingLanguage),统一建模语言,是一种用于软件工程和系统设计的标准图形化建模语言。它旨在帮助开发人员、设计师和分析

8年经验之谈 —— App测试常用的两种工具

一、监控工具DDMS的全称是DalvikDebugMonitorService,是Android开发环境中的Dalvik虚拟机调试监控服务。提供测试设备截屏、查看特定进程正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、模拟接收及发送SMS、虚拟地理坐标等服务。启动DDMSEclipse中启动方法:1

Java 泛型

一、泛型简介Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。下面给一个Java泛型的简单例子:publicstatic<E>voidprintArray(E[]in

【产品运营】如何提升B端产品竞争力(下)

“好产品不是能力内核,做好产品的流程才是”一、建立需求池和需求反馈渠道需求池管理是B端产品进化最重要的环节,它的重要性远超产品设计、开发等其他环节。维护需求池有主动和被动两种。主动维护是产品经理在参与售前、迭代、交付、售后、竞品分析、老板沟通等活动时自己发掘、记录需求,主动收集需求的渠道很多,但不同渠道收集到的需求质量

两届 TOKEN 2049 之间,孙宇晨和波场的布局与野心

2022年在新加坡举办的TOKEN2049大会上,波场TRON创始人、火币全球顾问委员会成员孙宇晨作为特邀嘉宾出席,并曾提出“波场TRON下一步的发展目标是成为主流金融机构”的生态愿景,揭示了波场生态的全新发展方向,以及孙宇晨作为区块链和加密技术的长期布道者,对加密行业未来发展趋势的展望。时隔一年,2023TOKEN2

Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

Typescript中的逆变与协变

许多不是很熟悉TS的朋友对于逆变和协变的概念会感到莫名的恐惧,没关系。它们仅仅代表阐述表现的概念而已,放心我们并不会从概念入手而是通过实例来逐步为你揭开它的面纱。逆变(函数入参)首先,我们先来思考这样一个场景:leta!:{a:string;b:number};letb!:{a:string};b=a我们都清楚TS属于

时序数据库 TimescaleDB 安装与使用

TimescaleDB是一个时间序列数据库,建立在PostgreSQL之上。然而,不仅如此,它还是时间序列的关系数据库。使用TimescaleDB的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库(PostgreSQL),所有这些都具有完整的SQL支持。本文介绍TimescaleDB的CentOS7环境源码

热文推荐