4 MySQL-运算符
算术运算符
运算符 描述 例子 + 加法,执行加法运算。 a + b 得到 30 - 减法,执行减法运算。 a - b 得到 -10 * 乘法,执行乘法运算。 a * b 得到 200 / 用左操作数除以右操作数。 b / a 得到 2 % 用左操作数除以右操作数并返回余数。 b % a 得到 0
运算符 描述 += 加等于 -= 减去等于 *= 乘以等于 /= 除以等于 %= 模等于 &= 按位与等于 ^-= 按位互斥等于 |*= 按位或等于
SELECT 2 + 3 , 2 - 3 , 2 * 3 , 3 / 5 , 10 % 3
FROM dual;
SELECT 2 + '5'
FROM dual;
SELECT 100 + 'a'
FROM dual;
SELECT 100 + NULL
FROM dual;
SELECT 100 DIV 2 , 100 MOD 2
FROM dual;
SELECT 100 DIV 0
FROM dual;
比较运算符
运算符 描述 例子 = 检查两个操作数的值是否相等,如果是,则条件为真(true)。 (a = b) is false. != 检查两个操作数的值是否相等,如果值不相等则条件为真(true)。 (a != b) is true. <> 检查两个操作数的值是否相等,如果值不相等则条件为真(true)。 (a <> b) is true. > 检查左操作数的值是否大于右操作数的值,如果是,则条件为真(true)。 (a > b) is false. < 检查左操作数的值是否小于右操作数的值,如果是,则条件为真(true)。 (a < b) is true. >= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真(true)。 (a >= b) is false <= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真(true)。 (a <= b) is true. !< 检查左操作数的值是否不小于右操作数的值,如果是,则条件变为真(true)。 (a !< b) is false. !> 检查左操作数的值是否不大于右操作数的值,如果是,则条件变为真(true)。 (a !> b) is true.
运算符 描述 ALL ALL运算符用于将值与另一个值集中的所有值进行比较。 AND AND运算符允许在SQL语句的WHERE子句中指定多个条件。 ANY ANY运算符用于根据条件将值与列表中的任何适用值进行比较。 BETWEEN BETWEEN运算符用于搜索在给定最小值和最大值内的值。 EXISTS EXISTS运算符用于搜索指定表中是否存在满足特定条件的行。 IN IN运算符用于将值与已指定的文字值列表进行比较。 LIKE LIKE运算符用于使用通配符运算符将值与类似值进行比较。 NOT NOT运算符反转使用它的逻辑运算符的含义。 例如:NOT EXISTS, NOT BETWEEN, NOT IN等等,这是一个否定运算符。 OR OR运算符用于组合SQL语句的WHERE子句中的多个条件。 IS NULL IS NULL运算符用于将值与NULL值进行比较。 UNIQUE UNIQUE运算符搜索指定表的每一行的唯一性(无重复项)。
SELECT 1 > 2 , 1 < '2' , 1 != 2 , 1 = 2 , 1 <> 2
FROM dual;
SELECT 'ab' = 'ad' , 'a' = 'a'
FROM dual;
SELECT last_name, salary
FROM employees
WHERE salary = 6000 ;
SELECT NULL <=> NULL , NULL = NULL , 1 = NULL FROM dual;
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct <=> NULL ;
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NULL ;
SELECT last_name, commission_pct
FROM employees
WHERE ISNULL( commission_pct) ;
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL ;
SELECT LEAST( 'g' , 't' , 'a' , 'm' ) , GREATEST( 'g' , 't' , 'a' , 'm' )
FROM dual;
SELECT LEAST( LENGTH( first_name) , LENGTH( last_name) )
FROM employees;
SELECT employee_id, salary
FROM employees
WHERE NOT salary BETWEEN 6000 AND 10000 ;
SELECT employee_id, salary
FROM employees
WHERE salary >= 6000 && salary <= 10000 ;
SELECT 10 IN ( 1 , 2 , 3 , 4 , 5 , 6 )
FROM dual;
SELECT last_name, salary, department_id
FROM employees
WHERE department_id in ( 10 , 20 , 30 ) ;
SELECT last_name, salary, department_id
FROM employees
WHERE department_id NOT IN ( 10 , 20 , 30 , 50 , 60 , 70 ) ;
SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name LIKE '%a%' AND first_name LIKE '%b%' ;
SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name LIKE '__a%' OR first_name LIKE '_\_a%' ;
SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name REGEXP '^a'
逻辑运算符
运算符 作用 NOT 或者 ! 逻辑非 AND 或者 && 逻辑与 OR 和 || 逻辑或 XOR 逻辑异或
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary >= 6000
AND salary <= 9000 ;
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary <= 6000
OR salary >= 9000 ;
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE NOT salary BETWEEN 6000 AND 8000 ;
SELECT 0 XOR 1 , 'a' XOR 'b' , 0 XOR 0 , 'a' XOR 0 , 'a' XOR 1 , 'a' XOR '0'
FROM dual;
位运算符
运算符 描述 & 按位与 | 按位或 ^ 按位异或 ~ 取反 >> 右移 << 左移
SELECT 10 >> 2 , '10' >> 2 , 10 << 2 , 2 & 0 , 2 | 0 , ~ 2 , 1 ^ 0
FROM dual;
运算符的优先级MySQL
优先级由低到高排列 运算符 1 =(赋值运算)、:= 2 II、OR 3 XOR 4 &&、AND 5 NOT 6 BETWEEN、CASE、WHEN、THEN、ELSE 7 =(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN 8 | 9 & 10 <<、>> 11 -(减号)、+ 12 *、/、% 13 ^ 14 -(负号)、〜(位反转) 15 !
正则表达式
参考自学JAVA中的正则表达式的介绍
Exercise
SELECT first_name, last_name, salary
FROM employees
WHERE NOT salary BETWEEN 5000 AND 12000 ;
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN ( 20 , 50 ) ;
SELECT last_name, job_id
FROM employees
WHERE manager_id IS NULL ;
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL ;
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%' ;
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%'
OR last_name LIKE '%k%' ;
SELECT *
FROM employees
WHERE first_name LIKE '%e' ;
SELECT last_name, job_id, department_id
FROM employees
WHERE employees. department_id >= 80 && employees. department_id <= 100 ;
SELECT last_name, salary, manager_id
FROM employees
WHERE manager_id IN ( 100 , 101 , 110 ) ;