MySQL基础回顾之DML一
DML语句第一部分
1. select基本语句
1.1 基础的写法:若有多个字段则用,
隔开
select 字段 from 字段所在的表的表名;
1.2 进阶:用*
代表所有字段
select * from 要查询的表的表名;
1.3 进阶:为列起一个别名
方式一:
select 字段 别名 from 要查询的表的表名;
方式二:可以添加as关键字
select 字段 as 别名 from 要查询的表的表名;
方式三:列的别名可以使用
""
来引起,来防止别名字段中出现关键字(一定不要使用"
,因为不符合SQL规范,只是由于MySQL的不严谨才可以用而已)
select 字段 “别名” from 要查询的表的表名;
1.4 进阶:去除重复数据
会去除查询出的字段的重复数据(如果字段为多个,只有两个条记录两个字段都相同才会算作重复)
select distinct 字段 from 要查询的表的表名;
1.5 进阶:空值(null)参与运算
null
就是null
,不等同于""
、''
、0
空值参与运算,结果一定为
null
1.6 进阶:着重号``
着重号用于将关键字变为普通的字段
着重号可以加载任何字段上,但是没有必要都加,会导致sql语句看起来有些繁琐、冗余
1.7 进阶:查询常数
select语句中,查询字段可以添加常数,表示为查询出的每条记录都新加一个常常数字段后再返回(该字段的内容仍为该常数)
select 123, 字段 from 要查询的表的表名;
2.过滤数据-where关键字
2.1 基础的写法
select 字段 from 要查询的表的表名 where 过滤条件;
- where必须和from紧紧相连
- where中不可以使用列的别名(与sql语句的执行顺序有关)
- where的字段不需要一定是我们查询的字段
附加:SQL规范中,关键字是不区分大小写的,而用单双引号引起来的内容是区分大小写的。但是实际上,MySQL并不不严谨,它在单双引号中的内容,也是不区分大小写的。
2.2 运算符的介绍
2.2.1 算术运算
简介:+
、-
、*
、/
(div)、%
(mod)
注意:
- MySQL中,
+
运算符唯一的一个作用就是做加法,如果进行相加的内容存在字符串,则将其转换为数值型,如果转换不了,则将字符串视为0;此外,空值参与运算,结果一定为空值(NULL) - MySQL中,如果
/
的两方类型不一致,运算符会自动将数据的类型转换;两数相除结果一定为小数类型并保留一定的小数位(这是MySQL默认的);如果除数为0,则结果为空值(NULL) - Mysql中,
%
运算符的结果,符号与被模数相同
2.2.2 比较运算符
简介:比较运算符用于堆表达式左右两边的操作数进行比较,比较结果为真的返回1,结果为假则返回0,其他情况则返回NULL
第一部分:
=
、<=>
、<>
、!=
、>
、<
、>=
、<=
- =就是等于的意思,判断某条数据的某个字段的数据是否等于指定值,只要有null参与比较,结果就是null(where department_id = null没有匹配结果)
- <=>与=的作用基本相同,唯一的区别就是可以对null值进行判断(where department_id<=>null会将department_id为null的值进行匹配),可以理解为<=>为null而生。
- <>与!=一个意思,就是不等于,判断某条数据的某个字段的数据是否不等于指定值。
- 一个运算符,到底能不能对null进行判断,要自己实验,基本记不住的
第二部分:
is null
、is not null
、isnull(字段名)
- is null:判断某条数据指定字段是否为空
- is not null:判断某条数据指定字段是否不为空
- isnull()函数:判断某条数据指定字段是否为空
第四部分:
least(字段1, 字段2...)
、greatest(字段1, 字段2...)
- least()函数:对某条数据,返回该数据的指定几个字段的数据经过比较后,最小的哪个字段的数据
- greast()函数:对某条数据,返回该数据的指定几个字段的数据经过比较后,最大的哪个字段的数据
第五部分:
between 条件1 and 条件2
- 判断某条数据的某个字段是否在条件1(下限)和条件2(上限)的闭区间内
第四部分:
in
和not in
- in:判断某条数据的指定字段,是否在指定的值中
select * from table where id in (1,2,3);
- not in:判断某条数据的指定字段,是否不在指定的值中
select * from table where id not in (1,2,3);
第五部分:模糊查询
like
- 判断某条数据的指定字段是否符合我们定义的查询规则
- like要与指定的字符配合使用:
%
代表不确定个数的字符(0个、1个或多个);_
代表一个不确定的字符 - 可以在正则表达式中使用
\
对%
和_
进行转义,即将\
写在这两个字符的前面,让这两个符号只代表符号,没有其他的意思 - 可以利用
escape
关键字,自己声明一个转义字符,比如查询表中姓名的第二个字符是_,第四个字符是a的人员信息
select * from table where last_name like '_$_a%' escape '$';
第六部分:正则表达式
regexp
、rlike
2.2.3 逻辑运算符
逻辑或:
OR
、||
- 判断某条数据的指定字段,是否存在至少一个符合要求
逻辑且:
AND
、&&
- 判断某条数据的指定字段,是否全部符合要求
逻辑非:
NOT
、!
- 判断某条数据的指定字段,是否不符合要求
逻辑异或:
XOR
- 判断某条数据的指定字段,是否一个满足要求且另一个不满足要求
2.2.4 位运算符(暂时略过,感觉用的很少)
3.排序数据-ORDER BY关键字
3.1 基础的写法
# 将符合条件的数据按照指定的字段从低到高/从高到低排序显示
select 字段 from 查询的表名 where 筛选条件 order by 字段 asc/desc;
3.2 细节介绍
- 如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的
- order by用于指定对哪个字段进行排序
- asc表示从第到高,升序;desc表示从高到低,降序
- 如果order by后没有显式指明排序方式,则默认按照升序进行排序
- order by一般声明在倒数第二的位置(如果有limit,limit是倒数第一,没有则order by就是倒数第一)
- 可以使用列的别名,来对进行排序(与sql语句的执行顺序有关)
select employee_id, salary * 12 money
from employees
order by money;
- order by的字段不需要一定是我们查询的字段
- 可以在order by后书写多个字段,在第一个字段相同的情况下,按照第二个字段进行排序,如此往复
4.分页查询数据-limit关键字
4.1 基本的写法
select 字段 from 要查询的表 limit 偏移量(从0开始), 要显示的条目数;
可以抽象为如下公式:pageSize表示每页需要显示多少条记录,pageNo表示显示第几页
select 字段 from 要查询的表 limit (pageNo-1) * pageSize, pageSize;
4.2 细节介绍
- 如果查询的索引是0,可以省略不写
- limit声明时,要放在select所有语句的最后