数据库学习笔记

131 阅读3分钟

运算符

1.算术运算符:+ - * /(div) %(mod)

SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 -30,   

100 + 35.5, 100 - 35.5

FROM DUAL;

Snipaste_2024-03-20_16-18-22.png

SELECT 100 + '1'

FROM DUAL;

+   只是加号运算,此时是将字符串转换成数值(隐形转换)

1.1初始将a当作0来处理

SELECT 100 + 'a' FROM DUAL;

1.2取模运算: % mod

特点:余数的(+ -)号只与被余数有关

SELECT 12 % 3,12 % 5,-12 % 5,-12 %-5

FROM DUAL;

2.比较运算符: = <=>(安全对于) / <>和!=(不等于) > >= < <=

2.1 = 的使用

字符串存在隐形转换,但不能转换则看作0

SELECT 1 = 2,1 != 2,1 = '1',1 ='a',0 = 'a'

FROM DUAL;

比较中只要存在NULL结果都为NULL

SELECT 1 = NULL, NULL = 1,NULL = NULL

FROM DUAL;

当比较时都为字符串则当作字符串比较

SELECT 'a' = 'a','ab' = 'ab','a' = 'b','ac' = 'ab'

FROM DUAL;

2.2 <=>的使用:为NULL而生

SELECT 1 <=> NULL, NULL <=> 1,NULL <=> NULL #比较中全部为NULL结果1 FROM DUAL;

2

2.1 IS NULL(是NULL)   \ IS NOT NULL(不是NULL)   \ISNULL(是NULL)

案例:查询表中commission_pct为NULL的数据

SELECT last_name,commssion_pct

FROM employees

WHERE commission_pct IS NULL;

SELECT last_name,commission_pct

FROM employees

WHERE ISNULL(commission_pct);

案例:查询表中commission_pct为NULL的数据

SELECT last_name,commission_pct

FROM employees

WHERE commission_pct IS NOT NULL;

SELECT last_name,commission_pct

FROM employees

WHERE NOT commission_pct <=> NULL;


2.2 LEAST()(求最小的值) \ GREATEST()(求最大的值)

SELECT LEAST('a','b','c','d'),GREATEST('a','b','c','d')

FROM DUAL;


SELECT   LEAST(first_name,last_name),first_name,last_name

FROM employees


2.3BETWEEN 条件下界1 AND 条件上界2 (查询条件1到条件2之间的数据,包括边界)

#案例:查询工资在6000到8000的员工信息

SELECT employee_id,salary

FROM employees

WHERE salary BETWEEN 6000 AND 8000;


2.4 IN(set) \ NOT IN(set) 查询的是离散的数据

案例:查询部门为10,20,30的员工

SELECT last_name,department_id

FROM employees

#where department_id = 10 or department_id = 20 or department_id = 30;

WHERE department_id IN(10,20,30);


案例:查询部门不是10,20,30的员工

SELECT last_name,department_id

FROM employees

WHERE department_id NOT IN(10,20,30);


2.5 LIKE:模糊查询

%:代表不确定个数的字符(0个,1个,或多个)


案例:查询last_name中包含'a'的员工信息

SELECT last_name

FROM employees

WHERE last_name LIKE '%a%';


案例:查询last_name中包含'a'和包含'e'的员工信息

SELECT last_name

FROM employees

WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';

SELECT last_name

FROM employees

WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%';


LIke中_:代表一个不确定的字符

案例:查询last_name中包含'a'为第二个字符的员工信息

SELECT last_name

FROM employees

WHERE last_name LIKE '_a%';


案例:查询last_name中包含_为第二个字符且'a'为第三个字符的员工信息

引入转义字符 / 或是 ESCAPE 规定一个字符

SELECT last_name

FROM employees

#WHERE last_name LIKE '__a%';

WHERE last_name LIKE '__a%' ESCAPE '';


2.6REGEXP \RLIKE:正则表达式

'^%'是以什么开头,'%$'是以什么结尾,REGEXP '%' 包含什么

SELECT 'shkstart' REGEXP '^s', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk'

FROM DUAL;

“.” 在REGEXP中代表一个字符

SELECT 'shkstart' REGEXP 'st.rt'

FROM DUAL;


3.逻辑运算符: OR ||(或)   \ AND &&(且)   \NOT !(非)   \XOR(异或)

OR AND and的优先级高与or

SELECT employee_id,salary,department_id

FROM employees

#WHERE department_id = 50 and salary > 6000;

WHERE department_id = 50 OR salary > 6000;


#NOT的运用

SELECT employee_id,salary,department_id,commission_pct

FROM employees

#where commission_pct is not null;

WHERE NOT commission_pct <=> NULL;


#XOR:只满足一边的条件,追求的是"异"

SELECT employee_id,salary,department_id

FROM employees

WHERE department_id = 50 XOR salary > 6000;

4.位运算符:& | ^ ~ >> << 都是二进制运算

SELECT 12 & 5,12 | 5,12 ^ 5

FROM DUAL;

  ~:是指将0变为1,1变更为0

SELECT 10 & ~1

FROM DUAL;

    在一定范围内:向左移动1位,相当于乘以2;向右移动1位,相当于除以2

SELECT 4 << 1,8 >> 1

FROM DUAL;