最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。
视频链接:
【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用
如果有侵权,请联系删除,谢谢。
更加详细的教程,可以直接观看此链接Oracle教程
1、过滤
1.1、基本使用方式
使用方式:使用 WHERE 子句
,将不满足条件的行过滤掉。
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];
WHERE 子句紧随 FROM 子句。
比如:
-- 查询 department_id 等于 90 的数据
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;
1.2、过滤中使用字符和日期
过滤条件中使用字符和日期,有以下几点需要注意:
- 字符和日期要包含
在单引号中
。 字符大小写敏感,日期格式敏感
。- 默认的日期格式是
DD-MON月-RR
。(eg: 7-7月-1996)。使用此方式容易出现格式不匹配,后面再单行函数中做转换后查询。
-- 字符串查询
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = 'Whalen';--日期查询
SELECT last_name, hire_date, department_id
FROM employees
WHERE hire_date = '7-6月-1994';--使用单行函数后的日期查询
SELECT last_name, hire_date, department_id
FROM employees
WHERE to_char(hire_date, 'yyyy-mm-dd') = '1994-06-07';以下的查询方式都不对:-- ORA-00904: "yyyy-mm-dd": 标识符无效
WHERE to_char(hire_date, "yyyy-mm-dd") = '1994-06-07'; -- 报错WHERE to_char(hire_date, 'yyyy-mm-dd') = '1994-6-07'; -- 得不到正确数据
1.3、where 条件中的比较运算
赋值使用 := 符号
1、比较运算
-- 查询薪资小于等于3000的
SELECT last_name, salary
FROM employees
WHERE salary <= 3000;
1.4、其它比较运算
1、BETWEEN
使用 BETWEEN 运算来显示在一个区间内的值
-- 查询薪资大于等于2500并且小于等于3500的
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
2、IN
使用 IN运算显示列表中的值。
-- 查询薪资等于 100或者101或者201的
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);
1.5 LIKE
- 使用 LIKE 运算选择类似的值(模糊查询)
- 选择条件可以包含字符或数字:
%
代表零个或多个字符(任意个字符)
。_
代表一个字符。
-- 查询first_name 以S开头的
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%';
1、%
和-
可以同时使用。
-- 查询第二个字符是o的数据
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%';
2、可以使用 ESCAPE 标识符 选择%
和 _
符号。
回避特殊符号的:使用转义符。例如:将[%]转为[%]、[_]转为[_],然后再加上[ESCAPE ‘\’] 即可。
-- 查询以 IT_ 开头的数据。注意查询后面需要加上 escape 。
SELECT job_id
FROM jobs
WHERE job_id LIKE 'IT\_%' escape '\';
1.6、NULL
使用 IS (NOT) NULL 判断空值。
-- 查询 manager_id 等于 NULL 的数据
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL;
1.7、逻辑运算
1.7.1、AND
AND 要求并的关系为真。
-- 查询salary 大于等于10000 并且 job_id 包含 MAN 的数据
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job_id LIKE '%MAN%';
1.7.2、OR
OR 要求或关系为真。
-- 查询 salary 大于等于 或者 job_id 包含 MAN 的数据
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE '%MAN%';
1.7.3、NOT
-- 查询 job_id 不在 ('IT_PROG', 'ST_CLERK', 'SA_REP') 列表中的数据
SELECT last_name, job_id
FROM employees
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
1.8、优先级
可以使用括号改变优先级顺序
2、ORDER BY子句
- 使用 ORDER BY 子句排序
ASC(ascend): 升序
DESC(descend): 降序
ORDER BY 子句在SELECT语句的结尾
。
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date ;
1、降序排序
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date DESC ;
2、按别名排序
SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal;
3、多个列排序
按照ORDER BY 列表的顺序排序。
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
可以使用不在SELECT 列表中的列排序。
SELECT last_name, department_id
FROM employees
ORDER BY salary DESC;
select 语句表达式
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[ORDER BY {column, expr, alias} [ASC|DESC]];
练习题:
1、选择姓名中有字母a和e的员工姓名
select last_name
from employees
where last_name like '%a%e%' or last_name like '%e%a%'