【数据库】MySQL的sql语句详解

news/2024/5/19 5:14:51/文章来源:https://blog.csdn.net/weixin_48814356/article/details/129002140

目录

   MySQL之sql语句

一, INSERT语句

insert语句的使用:

1,给表中一次性插入一条记录

2,给表中一次性插入多条记录

二, REPLACE语句

REPLACE语句的使用 

1,语法一 

 2,语法二

3,语法三

三,UPDATE语句

 UPDATE语句的使用

四, delete和TRUNCATE语句

delete和TRUNCATE语句的使用

1,DELETE 

 2,TRUNCATE 

 

五,SELECT语句

1、简单的SELECT语句:

2、SELECT语句中的算术表达式:

常数 

补充说明:MySQL的+默认只有一个功能:运算符

安全等于运算符<=>

3、定义字段的别名:

4、重复记录处理

5、使用where子句限制所选择的记录:

1,WHERE中比较运算符【>,>=,<,<=,=,!=】。

2,使用IS NULL运算符,查询包含空值的记录

3,where中between比较运算符,使用BETWEEN运算符显示某一值域范围的记录。

4,where中使用IN运算符,使用IN运算符获得匹配列表值的记录。

5,where中使用LIKE运算符,使用LIKE运算符执行模糊查询,查询条件可包含文字字符或数字,‘%’可表示零或多个字符,‘_’表示任意单字符。

6,where中使用逻辑运算符

​7,联合查询,对两个结果求并集,使用union(去掉重复的)或者union all(不去掉重复的行)

8,排序显示,查询语句执行的查询结果默认是按数据插入顺序排列,实际上可能需要按某列的值大小排列,按某列排序采用order by 列名[desc],列名…;设定排序列的时候可采用列名、列别名。

9,where中使用正则表达式,<列名> regexp '正则表达式'


   MySQL之sql语句

 

一, INSERT语句

在表里面插入数据:默认情况下,一次插入操作只插入一行

方式1:

INSERT[INTO] 表名 [(column[, column...])] VALUES(value[, value...]);

方式2:

insert[into] 表名 set字段1=值1, 字段2=值2

一次性插入多条记录:

INSERT[INTO] table[(column[, column...])] VALUES(value[, value...]),(value[, value...])   

注意:

1、如果为每列都指定值,则表名后不需列出插入的列名

2、可以使用如下方式一次插入多行:insert into表名[(列名,…)] select语句  

3、如果需要插入其他特殊字符,应该采用\转义字符做前缀,

insert语句的使用:

1,给表中一次性插入一条记录

此时数据库chap04下的表t4没有任何记录

select * from t4;

查看表t4的表结构:

desc t4;

方法一:

(1)给表t4插入一条数据,id1name为‘zhouyi

没设置主键的情况下,可以重复插入此信息

insert into t4 (id,name) values (1,'zhouyi');

(2)查看插入记录后的表t4的所有信息

select * from t4;

方法二:

(1)向表t4插入一条记录,id=2,name='zhouer

insert into t4 set id=2,name='zhouer';

(2)查询t4下的所有信息:

select * from t4;

2,给表中一次性插入多条记录

一次性插入多条数据,前面的属性字段可以省略;后面的值用括号括起来,逗号隔开

(1)给表t4一次性插入两条记录,(3'zhousan'),(4,'zhousi')

insert into t4 (id,name) values (3,'zhousan'),(4,'zhousi');

(2)查看t4表的所有信息

select * from t4;

二, REPLACE语句

replace语句的语法格式有三种语法格式。

语法格式1:replace [into] 表名 [(字段列表)] values(值列表)

语法格式2:

    replace[into] 目标表名[(字段列表1) select(字段列表2) from源表 where条件表达式

   

语法格式3:

    replace[into] 表名 set字段1=值1, 字段2=值2

REPLACE与INSERT语句区别:

replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新记录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。

 

使用replace的最大好处就是可以将delete和insert合二为一(效果相当于更新),形成一个原子操作,这样就无需将delete操作与insert操作置于事务中了

 

REPLACE语句的使用 

1,语法一 

语法格式1replace [into] 表名 [(字段列表)] values(值列表)

没设置主键前,replace等价于insert

(1)插入一条记录(1,'zhouwu')

replace into t4 values(1,'zhouwu');

 

(2)查看t4表下的所有信息

select * from t4;

 

 

设置主键后

(1)创建表t1,并设置主键

create table t1(id int primary key,name char(30),birthday date);

 

 

(2)将t4表的name列进行非空约束

alter table t1 modify name char(30) not null;

 

 

(3)查看表t1的表结构:

desc t1;

 

(4)给t1表插入(1,'zhouyi',20000101),(2,'zhouer',20000102)记录

insert into t1 values (1,'zhouyi','20000101'),(2,'zhouer','20000102');

 

 

(5)查看表t1的所有记录:

select * from t1;

 

 

(6)使用replace插入记录(1,'zhouwu','20000101'),

replace into t1 values (1,'zhouwu','20000101');

 

 

(7)查看表t1下的所有信息,会发现之前id1的记录,被新的id1记录覆盖

select * from t1;

 

 

 

 2,语法二

语法格式2:

    replace[into] 目标表名[(字段列表1) select(字段列表2) from源表 where条件表达式

 

(1)把t4表中的(4,'zhousi')插入到t1表中

replace into t1 (id,name) select * from t4 where id=4;

 

(2)查看插入后的t1表的所有记录

select * from t1;

 

(3)把t4表中的(1,'zhouwu')插入到t1表中  t1表中的主键重复

replace into t1 (id,name) select * from t4 where name='zhouwu';

 

(4)查看t1表会发现之前的zhouwu那条记录被新的zhouwu 记录覆盖

 select * from t1;

 

 

3,语法三

 语法格式3:

    replace[into] 表名 set字段1=1, 字段2=值2 

 如果主键值重复,依旧会替换

 

 

(1)在表t1中输入记录 id=1,name='zhouyi',birthday='20000101'

replace into t1 set id=1,name='zhouyi',birthday='20000101';

 

 

(2)查看表t1的所有信息,可以看到表t1中的(1,zhouwu)被信息(1zhouyi,20000101)覆盖

select * from t1;

 

 

 

三,UPDATE语句

UPDATE 表名

SETcolumn= value[, column= value]

[WHEREcondition];

修改可以一次修改多行数据,修改的数据可用where子句限定,where子句里是一个条件表达式,只有符合该条件的行才会被修改。没有where子句意味着where字句的表达式值为true。也可以同时修改多列,多列的修改中间采用逗号(,)隔开。

 

 UPDATE语句的使用

 

(1)把表t1id4的生日更新为20000104

update t1 set birthday='20000104' where id=4;

 

 (2)看更改后的表t1的所有信息,可以看到id=1birthday被更新了

select * from t1;

 如果匹配到两行记录,则两行记录都更新

 

 

  

四, delete和TRUNCATE语句

DELETE    FROM    table_name[where条件];

TRUNCATE    TABLE    table_name

DROP、TRUNCATE、DELETE的区别:

delete:删除数据,保留表结构,可以回滚,如果数据量大,很慢。

truncate: 删除所有数据,保留表结构,不可以回滚,一次全部删除所有数据,速度相对很快。

drop: 删除数据和表结构(文件),删除速度最快。

 

 

delete和TRUNCATE语句的使用

1,DELETE 

 DELETE    FROM    table_name[where条件]; 

删除整个表的数据

(1)删除整个表t4的数据

delete from t4;

 

(2)查看表t4的所有信息,可以看到表t4中的内容空了

select * from t4;

 

 (3)查看t4的表结构,看到表t4的结构还在

desc t4;

 

 删除表中一条数据

(1)删除表t1id=4的一行记录

delete from t1 where id=4;

 

(2)查看表t1的所有记录,Id=4的一行记录被删除掉了

select * from t1;

 

 

 2,TRUNCATE 

 TRUNCATE    TABLE    table_name

 

 

(1)删除表t1

truncate table t1;

 

 

(2)查看表t1的所有信息,表t1中的数据全部被删除

select * from t1;

 

 

(3)表t1的表结构还在

desc t1;

 

 

 

 

五,SELECT语句

 

1、简单的SELECT语句:

SELECT {*, column[alias],...}

FROM table;

​说明:

select*表示所有列。

FROM提供数据源(表名/视图名)

1,查看chap04下面的t4

select * from chap04.t4;

2,查看chap03t1表的name信息

select name from chap03.tb_dept;

 

 

2、SELECT语句中的算术表达式:

 

对数值型数据列、变量、常量可以使用算数操作符创建表达式(+ - * /)

对日期型数据列、变量、常量可以使用部分算数操作符创建表达式(+ -)

运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算。

 

运算符的优先级:

乘法和除法的优先级高于加法和减法;

同级运算的顺序是从左到右;

表达式中使用括号可强行改变优先级的运算顺序;

 

常数 

1,计算常量1+1

select 1+1;

 

 

2,在数据库chap04下面创建一个表t1,包含属性id,name,slary,performance

create table t1(id int primary key,name char(30) not null,salary int,performance decimal(3,2));

 查看表t1的表结构

desc t1;

向表t1中插入记录(1,'xiaoming',10,1.3),(2,'xiaohong',6,2.0)

(3,'xiaohei',13,1.12)(4,'xiaobai',8,1.678)

insert into t1 values (1,'xiaoming',10,1.3),(2,'xiaohong',6,2.0),(3,'xiaohei',13,1.2),(4,'xiaobai',8,1.678);

(1)查看t1表的所有数据:

select * from t1;

 

 (2)算出每个人的工资(工资*绩效)

select id,name,salary*performance from t1;

 

(3)算出每个人的年薪(12个月)

select id,name,salary*12 "年薪" from t1;

 

 

补充说明:MySQL的+默认只有一个功能:运算符

SELECT100+80; # 结果为180

SELECT'123'+80; # 只要其中一个为数值,则试图将字符型转换成数值,转换成功做预算,结果为203

SELECT   'abc'+80; # 转换不成功,则字符型数值为0,结果为80

SELECT   'This'+'is'; # 转换不成功,结果为0

SELECT   NULL+80; # 只要其中一个为NULL,则结果为NULL

 

1,计算字符串'123'1的值

只要其中一个为数值,则试图将字符型转换成数值,转换成功做预算,

select '123'+1;

 

 

 2,计算字符串和数值的和,

(1)字符串与数值的和;转换不成功,则字符型数值为0,结果为数值的值

select 'abc'+1;

(2)字符串与字符串的和; 转换不成功,结果为0

select 'abc'+'def';

 

 

3, 只要其中一个为NULL,则结果为NULL

(1)计算null+1

select null+1;

 (2)计算null+asd

select null+'asd';

 

 NULL值的使用:

空值是指不可用、未分配的值

空值不等于零或空格

任意类型都可以支持空值

包括空值的任何算术表达式都等于空

字符串和null进行连接运算,得到也是null

 

安全等于运算符<=>

1,可作为普通运算符的=,两个值进行比较时,2<=>2结果是1,2<=>3是0;

如果=或者<=>两边的值相等,返回值为1,否则返回值为0

select 2=2;

select 2=3;

select 2<=>2;

select 2<=>3;

2,也可以用于判断是否是NULL;

where salary isNULL等价于where salary <=>NULL;

where salary is not NULL等价于where not salary <=>null;

t1表中查找salary等于null的所有字段

方法一:

select * from t1 where salary<=>null;

方法二:

select * from t1 where salary is null;

t1表中查找salary等于null的所有字段

方法一:

select * from t1 where not salary<=>null;

​方法二:

select * from t1 where salary is not null;

 

 

 

 

 

3、定义字段的别名:

改变列的标题头

用于表示计算结果的含义

作为列的别名

如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都可以通过为别名添加加双引号实现。

 

查询表t1中的id(编号)name(姓名);表中的信息并没有变化,只是显示别名

select id as "编号",name "姓名" from t1;

 

 

 

4、重复记录处理

1)此时的t1表的所有信息如下:

select * from t1;

 

 

2缺省情况下查询显示所有行,包括重复行;可以看出有两个相同的6

select salary from t1;

 

3使用DISTINCT关键字可从查询结果中清除重复行,可以看出只有一个6

select distinct salary from t1;

 

DISTINCT的作用范围是后面所有字段的组合

5、使用where子句限制所选择的记录:

使用WHERE子句限定返回的记录,WHERE子句在FROM 子句后。

语法:SELECT [DISTINCT] {*, column[alias], ...} FROM table[WHEREcondition(s)] [order by column[alias], ...];  

WHERE中的字符串和日期值:字符串和日期要用单引号扩起来;日期值是格式敏感的。

 

1,WHERE中比较运算符【>,>=,<,<=,=,!=】。

查找在20010101年前出生的

select * from t1 where birthday<'20010101';

2,使用IS NULL运算符,查询包含空值的记录

查找t1中salarynull的记录

select * from t1 where salary is null;

3,where中between比较运算符,使用BETWEEN运算符显示某一值域范围的记录。

查找salary大于8元小于15元的记录

select * from t1 where salary between 8 and 15;

 

4,where中使用IN运算符,使用IN运算符获得匹配列表值的记录。

查找t1表中salary6,7,9中的记录

select * from t1 where salary in (6,7,9);

    

5,where中使用LIKE运算符,使用LIKE运算符执行模糊查询,查询条件可包含文字字符或数字,‘%’可表示零或多个字符,‘_’表示任意单字符。

查找t1表中2000年出生的记录

select * from t1 where birthday like "2000%";

    

6,where中使用逻辑运算符

(1)使用and运算符,所有条件都是满足

查找t1表中salary大于9元,且2001年出生的记录

select * from t1 where salary>9 and birthday like "2001%";

(2)使用OR运算符,只要两个条件满足一个就可以

查找t1表中salary大于9元,或者2001年出生的记录

select * from t1 where salary>9 or birthday like "2001%";

(3)使用NOT运算符,取反的意思

查找t1表中salary不是(6,7,10)的记录,null不参与判断

select * from t1 where salary not in (6,7,10);

​7,联合查询,对两个结果求并集,使用union(去掉重复的)或者union all(不去掉重复的行)

查找t1表中salary大于7birthday2001年的并集(重复的去掉)等价于or

select * from t1 where salary>9 union select * from t1 where birthday like'2001%'

 

查找t1表中salary大于7birthday2001年的并集(重复的不去掉)

select * from t1 where salary>9 union all select * from t1 where birthday like'20001%';

 

8,排序显示,查询语句执行的查询结果默认是按数据插入顺序排列,实际上可能需要按某列的值大小排列,按某列排序采用order by 列名[desc],列名…;设定排序列的时候可采用列名、列别名。

查找salary大于6的记录并排序(默认升序asc

select * from t1 where salary>6 order by salary;

查找salary大于6的记录并排序(默认升序,末尾加desc为降序)

select * from t1 where salary>6 order by salary desc;

9,where中使用正则表达式,<列名> regexp '正则表达式'

mysql8.0[chap04]>select* fromt1 where name regexp'^xiao'; 

​基本正则:^,$,\,.,*,[0-9],[a-z],[A-Z],[a-Z],[^],\(\),\<,\>

扩展正则:+,?

t1中查找namei结尾的记录

select * from t1 where name regexp 'i$';

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_257070.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux环境变量讲解

目录 环境变量 alias命令 type命令 变量分类 Linux最主要的全局环境变量 环境变量 变量是计算机系统用于保存可变数值的数据类型 在Linux中&#xff0c;一般变量都是大写&#xff0c;命令是小写 在Linux中&#xff0c;变量直接使用&#xff0c;不需要定义&#xff08;更快…

加入bing体验chatGPT大军中来吧,它来了!

1 第一步&#xff1a;加入候选名单 1、首先需要加入候选名单 https://www.microsoft.com/zh-cn/edge?formMA13FJ 2、下载最新的Edge浏览器、androd、iOS都有试用版本&#xff08;可以看到iOS加护当前已满&#xff09; 这里我下载的是dev版本&#xff0c;Canary版本由于是…

点云转3D网格【Python】

推荐&#xff1a;使用 NSDT场景设计器 快速搭建 3D场景。 在本文中&#xff0c;我将介绍我的 3D 表面重建过程&#xff0c;以便使用 Python 从点云快速创建网格。 你将能够导出、可视化结果并将结果集成到您最喜欢的 3D 软件中&#xff0c;而无需任何编码经验。 此外&#xff0…

sni+tomcat漏洞复现

sni SNI产生背景 SSL以及TLS&#xff08;SSL的升级版&#xff09;为客户端与服务器端进行安全连接提供了条件。但是&#xff0c;由于当时技术限制&#xff0c;SSL初期的设计顺应经典的公钥基础设施 PKI(Public Key Infrastructure)设计&#xff0c;PKI 认为一个服务器只为一个…

我用python/C++调用ChatGPT自制了一个聊天机器人

目录1 ChatGPT完整版2 Python/C调用ChatGPT2.1 获取API秘钥2.2 测试API功能2.3 设计简单UI3 聊天问答1 ChatGPT完整版 2015年&#xff0c;OpenAI由马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始人彼得蒂尔等硅谷科技大亨创立&#xff0c;公…

chatGPT都可以干什么呢?来一睹风采 (送账号)

文章目录1. 写代码2. 写文案3. 写剧本4. 写歌诗5. 写报告6. 查公式7. 写对联8. 写文章9. 做表格10. 做计划11. 等等1. 写代码 2. 写文案 3. 写剧本 4. 写歌诗 5. 写报告 这妥妥的翻译文&#xff0c;数据完全不对。 6. 查公式 傅里叶变换的时域性质有如下几点&#xff1a; 对…

企业三要素核验API接口,你了解多少?

企业三要素核验API接口是指哪些要素&#xff1f;企业三要素是一种有关企业实名认证的应用程序接口也称API&#xff0c;企业的名称、统一社会信用代码和法人代表姓名统称企业三要素。企业三要素核验API接口的资源来自国家工商总局数据库&#xff0c;通过数据库资料三个要素进行核…

ChatGPT 可以联网了!浏览器插件下载

注册看这里&#xff1a;https://www.cnblogs.com/ranxi169/p/16954797.html Twitter 用户 An Qu 开发了一款新的 Chrome 插件帮助 ChatGPT 上网&#xff0c;安装插件以后 ChatGPT 就可以联&#xff01;网&#xff01;了&#xff01; 简单来说开启插件后&#xff0c;他可以从网…

Python+OpenCV 简单实现人脸检测多个和人脸识别 2(附代码)

如果dilb和face_recognition第三方包安装失败&#xff0c;请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客 上篇请移步到Pythondilb 简单实现人脸检测&#xff08;附代码&#xff09;_水w的博客-CSDN博客 本篇是在上篇的工作基础上进行的。 目…

【fastjson2.x 记录】那些从1.x升级到2.x踩过的坑

这篇文章主要记录升级到 fastjson2.x 版本后出现的一些问题 1. jar 包引入问题 问题描述&#xff1a;从 2.x 版本后&#xff0c;fastjson 貌似开始对代码模块进行了拆分&#xff0c;所以在调整配置的时候&#xff0c;会发现有些类突然没了&#xff0c;其实是需要引入其他的扩展…

基于springboot+vue的宠物商城系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

新能源汽车PK燃油汽车,首次胜出,输赢真的那么重要?

新能源汽车PK燃油汽车&#xff0c;输赢真的那么重要&#xff1f;是的。【科技明说 &#xff5c; 每日看点】今天看到一个新能源汽车领域的消息&#xff0c;我觉得很有意思&#xff0c;是说中国新能源汽车满意度水平首次超过了燃油汽车&#xff0c;你们觉得是这样么&#xff1f;…

ubuntu部署quark-5

下载源代码 解压zip sudo apt-get install unzip unzip xxxxx.zip安装所需要的包 sudo apt install python2 # 查看是否配置了默认的python sudo update-alternatives --list python若没有设置&#xff0c;会显示&#xff1a; # update-alternatives: error: no alterna…

Netty零拷贝机制

Netty零拷贝机制一&#xff1a;用户空间与内核空间二&#xff1a;传统IO流程三&#xff1a;零拷贝常见的实现方式1. mmap write2. sendfile四&#xff1a;Java中零拷贝五&#xff1a;Netty 中如何实现零拷贝1. CompositeByteBuf 实现零拷贝2. wrap 实现零拷贝3. slice 实现零拷…

CSP-《I‘m stuck!》-感悟

题目 做题过程 注&#xff1a;黄色高亮表示需要注意的地方&#xff0c;蓝色粗体表示代码思路 好久没有写过代码了&#xff0c;今天做这道编程题&#xff0c;简直是灾难现场。 上午编程完后发现样例没有通过&#xff0c;检查发现算法思路出现了问题&#xff1a;我计数了S不能到…

神经网络基础知识

神经网络基础知识 文章目录神经网络基础知识一、人工神经网络1.激活函数sigmod函数Tanh函数Leaky Relu函数分析2.过拟合和欠拟合二、学习与感知机1.损失函数与代价函数2. 线性回归和逻辑回归3. 监督学习与无监督学习三、优化1.梯度下降法2.随机梯度下降法(SGD)3. 批量梯度下降法…

Leetcode.1138 字母板上的路径

题目链接 Leetcode.1138 字母板上的路径 Rating &#xff1a; 1411 题目描述 我们从一块字母板上的位置 (0, 0)出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board ["abcde", "fghij", "klmno", "pqr…

第02章_MySQL环境搭建

第02章_MySQL环境搭建 讲师&#xff1a;尚硅谷 宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. MySQL的卸载 1.1 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl …

应对新的挑战!ChatGPT将如何改变多域作战?

​公众号博主推送内容&#xff0c;未经许可&#xff0c;不得转载或者引用。 原文&#xff1a;Exploring the Possibilities of ChatGPT in Rugged Military AI Applications 《ChatGPT&#xff1a;利用最先进的技术支撑多域作战》 ChatGPT是一款基于GPT-3大型自然语言模型的…

JVM学习02:内存结构

JVM学习02&#xff1a;内存结构 1. 程序计数器 1.1、定义 Program Counter Register 程序计数器&#xff08;寄存器&#xff09; 作用&#xff1a;是记住下一条jvm指令的执行地址 特点&#xff1a; 是线程私有的不会存在内存溢出 1.2、作用 程序计数器物理上是由寄存器来实…