MySQL基础回顾之DML一

  • DML语句第一部分
  • 1. select基本语句
  • 1.1 基础的写法:若有多个字段则用`,`隔开
  • 1.2 进阶:用`*`代表所有字段
  • 1.3 进阶:为列起一个别名
  • 1.4 进阶:去除重复数据
  • 1.5 进阶:空值(null)参与运算
  • 1.6 进阶:着重号``
  • 1.7 进阶:查询常数
  • 2.过滤数据-where关键字
  • 2.1 基础的写法
  • 2.2 运算符的介绍
  • 2.2.1 算术运算
  • 2.2.2 比较运算符
  • 2.2.3 逻辑运算符
  • 2.2.4 位运算符(暂时略过,感觉用的很少)
  • 3.排序数据-ORDER BY关键字
  • 3.1 基础的写法
  • 3.2 细节介绍
  • 4.分页查询数据-limit关键字
  • 4.1 基本的写法
  • 4.2 细节介绍


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 nullis not nullisnull(字段名)

  • is null:判断某条数据指定字段是否为空
  • is not null:判断某条数据指定字段是否不为空
  • isnull()函数:判断某条数据指定字段是否为空

第四部分:least(字段1, 字段2...)greatest(字段1, 字段2...)

  • least()函数:对某条数据,返回该数据的指定几个字段的数据经过比较后,最小的哪个字段的数据
  • greast()函数:对某条数据,返回该数据的指定几个字段的数据经过比较后,最大的哪个字段的数据

第五部分:between 条件1 and 条件2

  • 判断某条数据的某个字段是否在条件1(下限)和条件2(上限)的闭区间内

第四部分:innot 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 '$';

第六部分:正则表达式regexprlike

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所有语句的最后