数据查询不只是简单地返回数据库中存储的数据,还要根据业务需求对数据进行运算和筛选,以及确定以什么样的形式显示查询结果。
计算字段
通常情况下数据库中的原始数据并不是我们所需要的,一般需要我们在查询数据的同时对数据进行运算和转换。语法:
select <表达式1>[,<表达式2>...<表达式n>] from <表名>;
示例:将每位员工的底薪增加500元
mysql> select empno,ename,sal,sal+500 from emp;
+-------+--------+------+---------+
| empno | ename | sal | sal+500 |
+-------+--------+------+---------+
| 7369 | smith | 800 | 1300 |
| 7499 | allen | 1600 | 2100 |
| 7521 | ward | 1250 | 1750 |
| 7566 | jones | 2975 | 3475 |
| 7654 | martin | 1250 | 1750 |
| 7698 | blake | 2850 | 3350 |
| 7782 | clark | 2450 | 2950 |
| 7788 | scott | 3000 | 3500 |
| 7839 | king | 5000 | 5500 |
| 7844 | turner | 1500 | 2000 |
| 7876 | adams | 1100 | 1600 |
| 7900 | james | 950 | 1450 |
| 7902 | ford | 3000 | 3500 |
| 7934 | miller | 1300 | 1800 |
+-------+--------+------+---------+
运算符
在MySQL中使用运算符进行运算,MySQL支持四种运算符,分别是算术运算符、比较运算符、逻辑运算符、位运算符。
算术运算符
SQL中最基本的运算符,对数值型数据执行算术运算。
比较运算符
SQL中最常用的运算符,用于比较或判断。
等于运算符“=”
等号“=”用来判断数字、字符串和表达式是否相等。如果相等,返回值为 1,否则返回值为 0。
- 若有一个或两个参数为NULL,则比较运算的结果为NULL。
- 若一个字符串和数字进行相等判断,则 MySQL 可以自动将字符串转换成数字。
安全等于运算符“<=>”
用于比较两个表达式的值。当两个表达式彼此相等或都等于空值时,比较结果为1;若其中一个是空值或者都是非空值但不相等时,则为0,不会出现NULL 的情况。
不等于运算符“<>”或者“!=”
用于数字、字符串、表达式不相等的判断。如果不相等,返回值为1;否则返回值为0,不能用于判断空值(NULL)。
IS NULL(或者 ISNULL)
用于检验一个值是否为NULL,如果为NULL,返回值为1;否则返回值为0。
IS NOT NULL
用于检验一个值是否为非NULL,如果为非NULL,返回值为1;否则返回值为0。
BETWWEN AND
语法:
<表达式> BETWEEN <最小值> AND <最大值>
若<表达式>大于或等于<最小值>,且小于或等于<最大值>,则 BETWEEN 的返回值为 1;否则返回值为 0。
LEAST
语法:
LEAST(<值1>,<值2>,…,<值n>)
存在两个或多个参数的情况下,返回最小值。若任意一个自变量为 NULL,则 LEAST() 的返回值为 NULL。
GREATEST
语法:
GREATEST (<值1>,<值2>,…,<值n>)
存在两个或多个参数的情况下,返回最大值。若任意一个自变量为 NULL,则 GREATEST() 的返回值为 NULL。
IN
用来判断操作数是否为 IN 列表中的一个值。如果是,返回值为 1;否则返回值为 0,不能用于判断空值(NULL)。
NOT IN
用来判断表达式是否为 IN 列表中的一个值。如果不是,返回值为 1;否则返回值为 0,不能用于判断空值(NULL)。
逻辑运算符
在SQL中,所有逻辑运算符求值结果均为1(TRUE)、0(FALSE)和 NULL。
NOT 或者 !
当操作数为 0 时,返回值为 1;当操作数为非零值时,返回值为 0;当操作数为 NULL 时,返回值为 NULL。
AND 或者 &&
当所有操作数均为非零值并且不为 NULL 时,返回值为 1;当一个或多个操作数为 0 时,返回值为 0;其余情况返回值为 NULL。
OR 或者 ||
当两个操作数均为非 NULL 值且任意一个操作数为非零值时,结果为 1,否则结果为 0;当有一个操作数为 NULL 且另一个操作数为非零值时,结果为 1,否则结果为 NULL;当两个操作数均为 NULL 时,所得结果为 NULL。
XOR
当任意一个操作数为 NULL 时,返回值为 NULL;对于非 NULL 的操作数,若两个操作数都不是 0 或者都是 0 值,则返回结果为 0;若一个为 0,另一个不为非 0,则返回结果为 1。
位运算符
用来对二进制字节中的位进行移位或者测试。
位或运算符“|”
将参与运算的两个数据按对应的二进制数逐位进行逻辑或运算。若对应的二进制位有一个或两个为 1,则该位的运算结果为 1,否则为 0。
位与运算符“&”
将参与运算的两个数据按对应的二进制数逐位进行逻辑与运算。若对应的二进制位都为 1,则该位的运算结果为 1,否则为 0。
位异或运算符“^”
将参与运算的两个数据按对应的二进制数逐位进行逻辑异或运算。对应的二进制位不同时,对应位的结果才为 1。如果两个对应位都为 0 或者都为 1,则对应位的结果为 0。
位左移运算符“<<”
使指定的二进制值的所有位都左移指定的位数。左移指定位数之后,左边高位的数值将被移出并丢弃,右边低位空出的位置用 0 补齐。
语法:
表达式<<n
- n 指定值要移位的位数
位右移运算符“>>”
使指定的二进制值的所有位都右移指定的位数。右移指定位数之后,右边高位的数值将被移出并丢弃,左边低位空出的位置用 0 补齐。语法:
表达式>>n
- n 指定值要移位的位数
位取反运算符“~”
将参与运算的数据按对应的二进制数逐位反转,即 1 取反后变 0,0 取反后变为 1。
运算符的优先级
运算符的优先级决定了不同的运算符在表达式中计算的先后顺序。