运算符
一、算术运算符
加减乘除余
举例:
SELECT 100+'1'
FROM DUAL;
结果为101,与java中的连接字符串不同。
SELECT 100+'A'
FROM DUAL;
结果为100。
也可以理解为,遇到非数值类型时,先转换为数值类型(如'2'可以转换为数值类型进行计算),若转换失败则作0计算(如'a')。
SELECT 100+NULL
FROM DUAL;
结果为null;
如果运算中进行了除法运算,自动提高精度,显示小数部分。
除0时结果为null。
取余: 被模数%取模数
取余运算的结果与被模数一致,与取模数无关。
二、比较运算符
真则返回1,假则返回0;
1、等号运算符
如果等号两边的值、字符串或者表达式都为字符串,则MySQL会按照字符串进行比较,比较的是每个字符串中字符的ANSI编码是否相等。
若等号两边有一边是null则比较结果为null。(如果两边都存在NULL,仍然返回NULL)
2、安全等于 <=>
没有null参与运算时,与等号运算符等同。
可以用于对NULL进行判断,两个操作数均为NULL时返回1,一个操作数为NULL时返回0而不返回NULL
3、<>与!=
均表不等。大多数时候可以交替使用,存在有一边为NULL的时候返回NULL(如果两边都存在NULL,仍然返回NULL)
三、非符号类型的运算符
1、ISNULL、IS NOTNULL、IS NULL
ISNULL的用法(类似函数):
SELECT id,salary
FROM emp
WHERE ISNULL(id);
IS NULL的用法(IS NOT NULL)同理:
SELECT id,salary
FROM emp
WHERE id IS NULL;
2、LEAST、GREATEST(在多个值中返回最小值/最大值)
举例:
SELECT LEAST('Q','U','M'),GREATEST('D','I','T')
FROM DUAL;
3、BETWEEN … AND …
BETWEEN之后的数应该比AND后的数值小。
BETWEEN … AND …取区间值,包括边界值,
4、IN、NOT IN
查询emp表中age=10或者age=20或者age=30的信息并提取对应的列。
SELECT id,salary,age
FROM emp
WHERE age IN (10,20,30);
5、LIKE(常用)
模糊查询。
%代表不确定个数的字符(0、1……)
例如,查询name中含有字符a的员工信息:
SELECT name
FROM emp
WHERE name LIKE '%a%';
延伸:
_代表一个不确定的字符。
查询name中第二个字符为a的员工信息:
SELECT name
FROM emp
WHERE name LIKE '_a%';
转义字符:
当需要查找的内容包含下划线时,则使用转义字符,\_表示下划线的符号而不是不确定的字符。
或者用$_表转义。
6、正则表达式REGEXP、RLIKE
^xx 以xx为开头
$xx 以xx结尾
例如:
SELECT 'Qum' REGEXP '^Q','Dit' REGEXP '$t'
FROM DUAL;
' . '匹配任意一个单字符
例如:
SELECT 'Qum' REGEXP ‘Q.m'
FROM DUAL;
[abc]包含a或b或c
SELECT 'Qum' REGEXP [u]
FROM DUAL;
补充:不管是OR还是AND,左右条件必须写全(可以实现前后交换不影响),才算正确的书写。
逻辑运算符 OR || AND && NOT ! XOR
XOR:异或,两个条件一真一假
SELECT age,name,salary
FROM emp
WHERE age=18 XOR salary>9000;
四、位运算符
& 转换二进制之后上下进行&运算
| 转换二进制之后上下进行|运算
^ 转换二进制之后上下的1、0不同时取真
SELECT 12&5,12|5,12^5
from DUAL;
对应结果为4、13、5
~ 转换二进制之后逐位取反
>> x 右移 一定范围内除2的x次方
<< x 左移 一定范围内乘2
的x次方
二、排序
1、排序的规则
默认的排序是按照添加的先后顺序进行排序的。
2、排序的操作
使用ORDER BY,可以从低到高(升序)对表的数据进行排序。
ORDER BY可以使用列的别名。WHERE中不能使用列的别名。
原因:sql中不是自上而下地执行的。
升序ASC(默认)
降序DESC
举例:
对age进行降序的排序。
SELECT name,age,salary
FROM emp
ORDER BY age DESC;
3、二级排序
可以直接缀在一级排序ORDER BY 之后进行排序
SELECT name,age,salary
FROM emp
ORDER BY age DESC,salary;
先根据年龄从大到小降序排序,再根据薪水升序排序。
三、分页
1、MySQL使用LIMIT实现分页的操作
举例:
取二十条数据为第一页:
SELECT name.id,salary
FROM emp
LIMIT 0,20;
从第二十一条数据开始截取第二页
SELECT name.id,salary
FROM emp
LIMIT 20,20;
LIMIT后第一个数是偏移量,第二个数是本页的数据量。
需求:每页显示pageSize条数据,显示当前第pageNo页。
公式:LIMIT (pageNo-1)*pageSize,pageSize;
2、LIMIT写在ORDER BY 之后。
3.MySQL8.0新特性
SELECT name.id,salary
FROM emp
LIMIT 2,OFFSET 30;
从第30条数据开始偏移,取两条数据分页显示。(显示第31、32条数据)