算术运算符的使用:
加法的注意点:
SQL中:100 + '1' 的结果为101。
不同于Java,在SQL中,“+”没有连接的作用,就表示加法运算。此时,会将后面的字符串'1'转换为数值1(隐式转换),再与100运算。
SQL中:100 + 'a' 的结果为100。
如果加法运算中有字符串,运算时的字符串内容并非数值,则一律看作0处理,此时将字符串'a'看作0处理,结果为100 + 0。
减法同理。
除法的注意点:
可以用DIV代替/ 。
不同于其他编程语言,除法中,无论时整数与整数之间做除法,还是整数与浮点数做除法,都会保留一定位的小数(默认四位)。
如果分母为0,除法的运算结果为NULL。
取模的注意点:
结果的正负与被模数的正负一致。
比较运算符:
比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。
关于等号:
与其他的编程语言不同,SQL中的等于是一个“=”表示。
字符串存在隐式转换,与数值作比较时,如果字符转换数值不成功,则看作0。
如果等号两边的值、字符串或表达式都为字符串,则会按照字符串进行比较,比较的是每一个字符串中的字符的ANSI编码是否相等。
注:SQL中赋值符号使用 :=
安全等于运算符:
安全等于运算符与等于的区别是,安全等于可以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1。当只有其中一个数为NULL时,其返回值为0。
- 除了安全等于运算,其他的运算只要有NULL参与,结果就为NULL。
- WHERE ……(字段) IS NOT NULL 也可以表示为WHERE NOT …… <=> NULL 。
- 如果是比较字符串,GREATEST的比较规则类似于C语言中的strcmp函数和Java中的String类的equals方法,从第一个字母进行比较(比较ASCII码值),如果相等则继续向后比较,直到比出更大的字母时输出此字符串。
- BETWEEN 条件一 AND 条件二 的,查询条件1和条件2范围内的数据,包含满足条件1和条件2的数据(即闭区间)。条件一是下界,条件二是上界,二者不能交换,交换之后,会查询不到数据。
- IN(……)和NOT IN(……)括号中放的是指定的集合,用来判断是否处于此集合中。
- LIKE表示模糊匹配,用来判断是否满足比如是否包含a字母(用'%a%'表示),是否以a字母开头(用'a%'表示)等条件。
逻辑运算符:
逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1(真)、0(假)或NULL。
运算符 | 作用 | 示例 |
NOT 或 ! | 逻辑非 | NOT A |
AND 或 && | 逻辑与 | A AND B A && B |
OR 或 || | 逻辑或 | A OR B A || B |
XOR | 逻辑异或 | A XOR B |
逻辑异或:A、B都为真或A、B都为假时表达表达式返回假(0),否则返回真(1)。即XOR两边的真假性一致时结果为假;真假性不一致时,结果为真。
AND的优先级大于OR。
位运算符
位操作符是在二进制数上进行的计算的运算符。位运算符会像将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。
使用规则与C语言和Java中位运算符的一致。
排序与分页
排序数据
使用ORDER BY对查询到的数据进行排序
升序(ascend):ASC
降序(descend):DESC
格式 :
SELECT * FROM empORDER BY sal DESC;
将ASC或DESC加到ORDER BY操作的字段后,若没有显式指明排序方式,则默认按照升序排列。
ORDER BY操作的字段可以是字段的别名,例:
SELECT empno , ename , job , sal * 12 annual_salFROM empORDER BY annual_sal DESC;
注:列的别名可以在ORDER BY中使用,不能在WHERE中使用。
二级排序
例:
SELECT empno , ename , job , sal * 12 annual_sal ,mgrFROM empWHERE sal IN(1500,3000,5000)ORDER BY annual_sal DESC,mgr DESC;
ORDER BY 后面可指明多个字段的排序方式,按从左到右的顺序,先按靠左的字段排序,如果相同,则按下一个右边的字段排序,依次类推。
分页:
实现数据的分页显示使用LIMIT关键字
格式:
LIMIT A , B;(A是位置偏移量,即表明表的数据从第A+ 1个数据开始显示。B是条目数(每页的数据量),即每页显示B条数据。)
如果格式为LIMIT B; 则默认位置偏移量为0。
每页显示pageSize条记录,此时显示第pageNo页
LIMIT (pageNo - 1) * pageSize , pageSize;
MySQL8.0新特性:
LIMIT B OFFSET A;A是偏移量,B是条目数,与LIMIT A , B的结构相反。
WHERE …… ORDER BY …… LIMIT的声明顺序:
WHERE的语句一定跟在FROM后。
LIMIT一定是在最后的一条语句。
ORDER BY在LIMIT前面。