目录
1. CRUD
2. 新增(Create)
2.1 单行数据 + 全列插入
简写方式
2.2 多行数据 + 指定列插入
指定列插入
多行插入
3. 查询(Retrieve)
3.1 全列查询
3.2 指定列查询
3.3 查询字段为表达式
查询一个数值类型
把所有学生的语文成绩+10
列于列之间的相加
3.4 别名
简写方式
3.5 去重:DISTINCT
3.6 排序:ORDER BY
null数据视为比任何值都小
对表达式进行排序
3.7 条件查询:WHERE
LIKE运算符的说明
一行数据的两列是可以比较的
以表达式作为条件
BETWEEN
IN
3.8 分页查询:LIMIT
4. 修改(Update)
5. 删除(Delete)
1. CRUD
CRUD-增删查改
C-Create 新增
R-Retrieve 检索,查询
U-Update 更新
D-Delete 删除
2. 新增(Create)
2.1 单行数据 + 全列插入
语法:
insert into 表名 [(字段1,字段2,...)] values(值,值,...);
values内的值与表名后括号内的字段一一对应,否则会报错。
注意:字符串类型的值要用单引号''包裹起来,就像示例中的'张三'一样。
简写方式
语法:
insert into 表名 values(值,值,...);
values内的值与表名后括号内的字段必须一一对应,否则会报错。
示例:
2.2 多行数据 + 指定列插入
指定列插入
语法:
insert into 表名(指定列,...) values(值,...);
示例:
没有插入值的列则自动插入默认值,因为我没有设置默认值,所以默认值为null,如下:
多行插入
语法:
insert into 表名(指定列,...) values(值,...)[,(值,...)][,(值,...)]...;
一条insert语句在values部分可以插入值,每一组values值代表一个数据行。
示例:
效果如下:
3. 查询(Retrieve)
3.1 全列查询
语法:
select * from table_name;
其中,*表示要查询表中所有的列。
示例:
3.2 指定列查询
语法:
select 列名[,列名]... from 表名;
示例:只查询id,name,语文成绩
3.3 查询字段为表达式
查询一个数值类型
效果为另起一列,使所有行都包含一个表达式的值。它本身并不存在于真实的表中。
把所有学生的语文成绩+10
注意:此处的语文成绩+10分只是显示于查询结果,实际上真实的表的语文成绩并没有改变!
列于列之间的相加
3.4 别名
语法:
select 列名/表达式 as 别名 ,[列名/表达式 as 别名],...from 表名;
示例:
简写方式
语法:
select 列名/表达式 别名 ,[列名/表达式 别名],...from 表名;
示例:
我们的表里面本来没有编号、姓名、总分这些列,所有通过表达式查询出来的结果集是通过一个临时表返回给我们的,执行完之后临时表就删除了。
3.5 去重:DISTINCT
语法:
select distinct 列名 from 表名;
示例:
只查询数学成绩,发现有两个98分。
使用distinct关键字来去重:
注意:在distinct查询结果中,要每一列都相同才会被认为是重复数据(即两条数据行完全一致)。
当我们在查询数学成绩的基础上,再加上查询id,再使用distinct去重看看效果如何:
由于加上了id字段,两个数据行没有完全一致,所以MySQL不认为它们为重复数据,并没有去重。
我们再插入一条新数据:
再查询三科成绩并且使用distinct去重:
此时,孙悟空与孙行者的三科成绩完全相同,即两个数据行完全一致,可以成功去重。
3.6 排序:ORDER BY
使用order by字句,要查询的结果就会根据我们指定的规则去排序。
排序规则:
1.升序 ASC
2.降序 DESC
语法:
select 列名 from 表名 order by 列名 [ASC|DESC];
对语文成绩进行降序排序:
对英语成绩进行升序排列:
如果没有指定排序规则,则默认升序:
null数据视为比任何值都小
我们再插入一条新数据行:
再对英语成绩进行升序排序(从低到高):
对表达式进行排序
对总分进行排序:
在排序的时候可以使用别名:
可以发现孙大圣的总分始终为null,这与null的性质有关。
MySQL中的null比较特殊:
1.不论和什么值运算,返回值都为null
2.null始终被判定为false
3.null值不同于c语言中的null(c语言中等同于0),在MySQL中null就是null
3.7 条件查询:WHERE
作用:
根据指定的一些条件,过滤掉不符合条件的记录,把符合条件的记录返回给用户。
可以通过一些运算符,比如说比较运算符,逻辑运算符。
比较运算符:
运算符 | 说明 |
>, >= , < , <= | 大于,大于等于,小于,小于等于 |
= | 等于,null不安全,例如 null=null 的返回值为null |
<=> | 等于,null安全,例如null<=>null的结果是true(1) |
!= , <> | 不等于 |
BETWEEN a0 and a1 | 范围匹配,[a0,a1], 如果a0 <= value <= a1,返回TRUE(1) |
IN(option,...) | 如果是option中的一个,返回TRUE(1) |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
LIKE | 模糊匹配。%表示任意多个(包括0个)任意字符; _表示任意一个字符 |
LIKE运算符的说明
对于like的用法,举几个例子来说明:
%表示多个(包括0个)任意字符
%放在后面则向后匹配,放在前面则向前匹配。
_表示一个字符,相当于一个占位符:
如果有两个_则相当于有两个占位符,即孙后面需要跟两个字符才会被匹配:
逻辑运算符:
运算符 | 说明 |
AND | 多个条件必须为TRUE(1),结果才是TRUE(1) |
OR | 任意一个条件为TRUE(1),结果为TRUE(1) |
NOT | 条件为TRUE(1),结果为FALSE(0) |
示例:查询英语不及格(<60)的同学
结果集中并没有null,因为null已经被自动过滤掉了。
一行数据的两列是可以比较的
示例:查询英语成绩低于语文成绩的同学
以表达式作为条件
示例:查询总分低于200的同学
注意:不可以用别名代替表达式作为查询条件。
原因:这与MySQL执行SQL语句的优先级有关。
1.如果要在数据中查某些数据,首先要确定表,先执行from
2.在查询的过程中要根据指定的条件把符合条件的数据过滤出来,此时执行where子句
3.执行select后面指定的列,这些列最终将加入结果集。
4.排序操作,根据order by子句中指定的列名和排序顺序进行排列。
因为在执行where子句的时候别名还没有被定义,所以用别名作为查询条件时会报错。
BETWEEN
示例:查询语文成绩在[80,90]分的同学及语文成绩
等效于:
IN
示例:查询数学成绩为78或者98的同学及数学成绩
等效于:
3.8 分页查询:LIMIT
作用:限制查询结果集中的条数。
语法:
-- 起始下标为 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;
示例:
第一种写法示例:从下标0开始,向后筛选三条数据
第二种写法示例:从下标3开始,向后筛选3条数据
第三种写法示例:从下标3开始,向后筛选3条数据
4. 修改(Update)
语法:UPDATE table_name SET column = expr [, column = expr ...][ WHERE ...] [ ORDER BY ...] [ LIMIT ...]
其中set为关键字,column为需要修改的列,expr为新值。
示例:将孙悟空的数学成绩修改为80
【注意】!!!
修改数据时一定要记得加where指定条件,否则MySQL会默认修改所有数据行。
其他例子:
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT3 ;
-- 将所有同学的语文成绩更新为原来的 2 倍UPDATE exam_result SET chinese = chinese * 2 ;
5. 删除(Delete)
语法:DELETE FROM table_name [ WHERE ...] [ ORDER BY ...] [ LIMIT ...]
【注意】 !!!执行删除语句的时候也要像对待修改语句一样,做好条件限制(加where条件),否则将删除表中的所有数据!
完
如果哪里有疑问的话欢迎来评论区指出和讨论,如果觉得文章有价值的话就请给我点个关注还有免费的收藏和赞吧,谢谢大家!