目录

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$';

【数据库】MySQL的sql语句详解相关推荐

  1. mysql切换用户sql语句,MySQL用户管理及SQL语句详解

    [(none)]>select user,host frommysql.user; #查询用户和主机+---------------+-----------+ | user | host | + ...

  2. MySQL之SQL优化详解(二)

    目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析 ...

  3. SQL语句详解(四)——SQL联表查询

    今天我们继续给大家介绍MySQL相关知识,本文主要内容是SQL联表查询. 一.SQL联表查询简介 在前文SQL语句详解(三)--SQL子查询中,我们给大家介绍了SQL子查询的相关知识和使用示例.实际上 ...

  4. oracle分页查询sql语句通用,oracle分页查询sql语句,oracle分页查询sql语句详解

    oracle分页查询sql语句,oracle分页查询sql语句详解,Oracle分页查询sql语句 Oracle中分页和MySql中的分页不同,MySql中的分页使用关键字limit即可,相对简单一点 ...

  5. MyBatis SQL语句详解

    MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...

  6. mysql批量删除数据sql语句_mysql批量删除数据sql语句详解

    1.like与 in批量删除指定记录 like语法 like主要是用来模糊查询了 sql = "delete from A where field like '%ABC%'" 这个 ...

  7. php mysql防卡_php mysql防止sql注入详解

    引发 SQL 注入攻击的主要原因,是因为以下两点原因: 1. php 配置文件 php.ini 中的 magic_quotes_gpc选项没有打开,被置为 off 2. 开发者没有对数据类型进行检查和 ...

  8. MySQL之SQL优化详解(一)

    目录 慢查询日志 1. 慢查询日志开启 2. 慢查询日志设置与查看 3.日志分析工具mysqldumpslow 序言: 在我面试很多人的过程中,很多人谈到SQL优化都头头是道,建索引,explain分 ...

  9. SQL基础:常用SQL语句详解(转)

    到今天为止,人们对关系数据库做了大量的研究,并开发出关系数据语言,为操作关系数据库提供了方便的用户接口.关系数据语言目前有几十种,具有增加.删除.修改.查询.数据定义与控制等完整的数据库操作功能.通常 ...

最新文章

  1. mvc中的ViewData用到webfrom中去
  2. Metasploit search命令使用技巧
  3. 笔记-【6】-JS中JSON的基础理解!
  4. SharePoint 2010 沙盒解决方案以及 Visual Studio 2010 模板
  5. 牛客网 小白赛4 A三角形【贪心】
  6. windows2008吃尽内存的解决办法
  7. Fedora 22 Linux 系统将于 7月 19日停止支持
  8. HTML、CSS、JS对unicode编码字符的规则
  9. 普通开发人员与软件工程师的区别
  10. Please port CPUType detection to your platform (CPU_ABI string ‘loongarch64‘)
  11. SPSS基础教程:SPSS菜单命令详解
  12. redis课程视频 黄建宏_Redis从入门到精通 视频教程 下载
  13. 淘宝技术这十年 -- 目录
  14. Redis分布式锁故障,我忍不住想爆粗...
  15. python爬虫爬取淘宝美食_python爬虫爬取淘宝商品信息
  16. android平板 双清,什么是小米平板2刷机前的双清
  17. Idea主菜单栏不见了怎么找回
  18. ros::Rate loop_rate(10); loop_rate.sleep(); 在程序中是休眠到一定时间,并不占用CPU时间
  19. 马赛克颗粒感天空Canvasjs特效
  20. 【Alist + Teracloud】WebDAV免费畅游互联网个人方案总结,一些支持WebDAV的应用推荐

热门文章

  1. C语言初阶——实用调试技巧
  2. 天基实业做好投资理财规划
  3. 无线网络连接后总是提示可能需要其他登陆信息
  4. Revit二次开发神技---代码实现Revit所有连接方式
  5. 信息系统管理工程师复习笔记02 计算机网络通信与信息安全 原创整理
  6. 转】oracle 小数格式化为百分数
  7. jacoco关于Java代码覆盖率你不得不会的基操!
  8. Python性能分析技巧
  9. JAVA-SUST实验二 JavaBean组件程序设计
  10. 朗润国际期货:去中心化稳定币谁能笑到最后?