#第四章:算数运算符:
SELECT *
FROM employees;
# 1.算术运算符:+ - * / div % mod
SELECT 100, 100 + 0, 100 - 0, 100 * 50, 100 / 50 -30, 100 + 35.5, 100 - 35.5
FROM DUAL;#伪表
SELECT 100 + '1'#在Java语言中是”1001“,字符串的拼接。在SQL中 + 没有连接的作用,只代表加法
#,(隐式转换)
FROM DUAL;#伪表
SELECT 100 + 'a'#在SQL中将这个a看作是0来处理。
FROM DUAL;#伪表
SELECT 100 + NULL#null为空值,空值参与运算结果就是空。
FROM DUAL;#伪表
SELECT 100 , 100 * 1 , 100 * 1.0 , 100 / 1.0 , 100 / 2 , 100 + 2 * 5 / 2 ,
100 /3 , 100 DIV 0
FROM DUAL;#伪表
#取模运算: % mod
#被模数 / 模数 = 模
SELECT 12 % 3, 12 % 5, 12 MOD -5, -12 % 5, -12 % -5#结果的符号和被模数的符号相同,与模数无关。
FROM DUAL;
# 练习:查询员工id为偶数的员工的信息
SELECT employee_id ,last_name
FROM employees
WHERE employee_id % 2 = 0;
#2.比较运算符:= <=> <> != < <= > >=
SELECT 1 = 0 ,1 != 9,1 = '1',1 = 'a', 0 = 'a'#如果字符串不能隐式转换,如果转换数值不成功,就把他看作是0即可。
FROM DUAL;
SELECT 'a' = 'a','a' = 'b','ab' = 'ba'#两边纯粹字符串比较的话,就按照ANSI的比较规则进行比较。
FROM DUAL;
SELECT 1 = NULL, NULL = NULL#只要有NULL参与比较运算,结果就是null;
FROM DUAL;
SELECT last_name, salary commission_pct
FROM employees
#where salary = 6000;
WHERE commission_pct = NULL;#此时执行没有任何结果
# <=>:安全等于,记忆技巧:为NULL而生
SELECT 1 <=> 2,1 <=> '1',1 <=> 'a', 0 <=> 'a'
FROM DUAL;
SELECT 1 <=> NULL, NULL <=> NULL
FROM DUAL;
#练习:查询表中commission_pct是NULL的数据
SELECT last_name, salary ,commission_pct
FROM employees
WHERE commission_pct <=> NULL;
# 或
SELECT last_name, salary ,commission_pct
FROM employees
WHERE ISNULL(commission_pct);
#2.2 具体的关键字:
#①IS HULL \ IS NOT NULL \ ISNULL
#练习:查询表中commission_pct不是NULL的数据
SELECT last_name, salary ,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
# 或
SELECT last_name, salary ,commission_pct
FROM employees
WHERE NOT commission_pct <=> NULL;
#②LEAST() \ GREATEST()
SELECT LEAST('a','b','n')
FROM DUAL;
SELECT LEAST(first_name, last_name),LEAST(LENGTH(first_name), LENGTH(last_name))
FROM employees;
#③ BETWEEN 条件1 AND 条件2 (包含边界)
#查询工资在6000到8000的员工信息
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000;#不能交换6000和8000的位置顺序
#WHERE salary >= 6000 && salary <=8000;
#④ in (set) \ not in(set)
#练习:查询部门为10,20,30部门的员工信息。
SELECT last_name,salary,department_id
FROM employees
#where department_id = 10 or department_id = 20 or department_id = 30;
WHERE department_id IN (10,20,30);
#练习:查询工资不是6000,7000,8000的员工信息。
SELECT last_name,salary,department_id
FROM employees
#where department_id = 10 or department_id = 20 or department_id = 30;
WHERE salary NOT IN (6000,7000,8000);
#⑤LIKE:模糊查询
#练习:查询last_name中包含字符‘a’的员工信息
# %:代表不确定个数的字符(0个1个或者多个)
SELECT last_name,salary,department_id
FROM employees
WHERE last_name LIKE '%a%';
SELECT last_name,salary,department_id
FROM employees
WHERE last_name LIKE 'a%';
#练习:查询last_name中包含字符‘a’且包含字符‘e’的员工信息
#写法1:
SELECT last_name,salary,department_id
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
#写法2:
SELECT last_name,salary,department_id
FROM employees
WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%';
# _:一个下划线代表一个不确定的字符:
#练习:查询第二个字符是‘a’的员工信息
SELECT last_name,salary,department_id
FROM employees
WHERE last_name LIKE '_a%';
#练习:查询第二个字符是_且第三个字符是‘a’的员工信息
#需要使用转义字符:\
SELECT last_name,salary,department_id
FROM employees
WHERE last_name LIKE '_\_a%';
#⑥正则表达式:REGEXP \ RLIKE
SELECT 'shkstart' REGEXP '^s', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk'
FROM DUAL;
SELECT 'shkstart' REGEXP 't.r'#一个 . 代表任何一个字符
FROM DUAL;
SELECT 'shkstart' REGEXP '[ar]'
FROM DUAL;
# 3.逻辑运算符 OR || AND && NOT ! XOR
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000;#不能交换6000和8000的位置顺序
#WHERE salary >= 6000 && salary <=8000;
#XOR
SELECT last_name,salary,department_id
FROM employees
WHERE department_id = 50 XOR salary > 6000;
#4.位运算符:& | ^ ~ >> <<
SELECT 12 & 5,12 | 5,12 ^ 5
FROM DUAL;
SELECT 10 & ~1;
SELECT 4 >> 1,8 << 1;
# 1.选择工资不在5000到12000的员工的姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary < 5000 OR salary > 12000;
# 2.选择在20或50号部门工作的员工姓名和部门号
SELECT last_name,department_id
FROM employees
WHERE department_id < 50 AND department_id > 20;
# 3.选择公司中没有管理者的员工姓名及job_id
SELECT *
FROM employees;
SELECT last_name,department_id,manager_id
FROM employees
WHERE manager_id <=> NULL;
# 4.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT *
FROM employees;
SELECT last_name,department_id,manager_id,commission_pct
FROM employees
WHERE NOT commission_pct <=> NULL;
# 5.选择员工姓名的第三个字母是a的员工姓名
SELECT *
FROM employees;
SELECT last_name,department_id,manager_id,commission_pct
FROM employees
WHERE last_name LIKE '__a%';
# 6.选择姓名中有字母a和k的员工姓名
SELECT *
FROM employees;
SELECT last_name,department_id,manager_id,commission_pct
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%k%';
# 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT *
FROM employees;
SELECT first_name,department_id,manager_id,commission_pct
FROM employees
WHERE first_name LIKE '%e';
# 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种
SELECT *
FROM employees;
SELECT first_name,department_id,manager_id,commission_pct
FROM employees
WHERE department_id > 80 AND department_id < 100;
# 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
SELECT *
FROM employees;
SELECT first_name,department_id,manager_id,commission_pct
FROM employees
WHERE manager_id = 100 OR manager_id = 101 OR manager_id = 110;
SQL-第四章:运算符
猜你喜欢
转载自blog.csdn.net/m0_63104578/article/details/126123135
今日推荐
周排行