SQL-第四章:运算符

#第四章:算数运算符:

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;




猜你喜欢

转载自blog.csdn.net/m0_63104578/article/details/126123135