☆空值在数学运算中的使用
包含空值的数学表达式的值都为空值
定义空值
空值是无效的,未指定的,未知的或不可预知的值
空值不是空格或者0。
☆使用数学运算符
*SELECT last_name, salary, salary + 300
FROM employees;
☆注意
SQL 语言大小写不敏感。
SQL 可以写在一行或者多行
关键字不能被缩写也不能分行
各子句一般要分行写。
使用缩进提高语句的可读性。
☆SELECT department_id, location_id
FROM departments;
SELECT *
FROM departments
SELECT *|{[DISTINCT] column|expression_r
[alias],...}
FROM table;
☆列的别名:
重命名一个列。
便于计算。
紧跟列名,也可以在列名和别名之间加入关键字‘AS’,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。
SELECT last_name AS name, commission_pct comm
FROM employees;
SELECT last_name AS name, commission_pct comm
FROM employees;
☆连接符:
把列与列,列与字符连接在一起。
用 ‘||’表示。
可以用来‘合成’列。
*SELECT last_name||job_id AS "Employees"
FROM employees;
字符串可以是 SELECT 列表中的一个字符,数字,日期。
日期和字符只能在单引号中出现。
每当返回一行时,字符串被输出一次。
*SELECT
last_name ||'
is a '||job_id
AS
"Employee Details"
FROM employees;
SELECT department_id
FROM employees;
在 SELECT 子句中使用关键字 ‘DISTINCT’ 删除重复行。
SELECT DISTINCT department_id
FROM employees;
SQL 语句与 SQL*Plus 命令
☆SQL
一种语言
ANSI 标准
关键字不能缩写
使用语句控制数据库中的表的定义信息和表中的数据
☆SQL*Plus
一种环境
Oracle 的特性之一
关键字可以缩写
命令不能改变数据库中的数据的值
集中运行
使用SQL*Plus可以:
☆描述表结构。
编辑 SQL 语句。
执行 SQL语句。
将 SQL 保存在文件中并将SQL语句执行结果保存在文件中。
在保存的文件中执行语句。
将文本文件装入 SQL*Plus编辑窗口
显示表结构
☆使用 DESCRIBE 命令,表示表结构
DESC[RIBE] tablename
DESCRIBE employees
☆使用WHERE 子句,将不满足条件的行过滤掉。
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;
☆字符和日期
*字符和日期要包含在单引号中。
*字符大小写敏感,日期格式敏感。
*默认的日期格式是 DD-MON-RR。
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = 'Whalen';
SELECT last_name, salary
FROM employees
WHERE salary <= 3000;
其它比较运算
☆操作符 含义
BETWEEN
...AND... 在两个值之间 (包含边界)
*IN(set) 等于值列表中的一个
*LIKE 模糊查询
*IS
NULL 空值
BETWEEN
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
IN
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);
LIKE
☆使用 LIKE 运算选择类似的值
选择条件可以包含字符或数字:
*% 代表零个或多个字符。
*_ 代表一个字符。
SELECT first_name
*FROM
employees
WHERE first_name LIKE 'S%';
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%';
‘%’和‘-’可以同时使用。
☆ESCAPE
回避特殊符号的:使用转义符。例如:将[%]转为[\%]、[_]转为[\_],然后再加上[ESCAPE ‘\’] 即可。
SELECT job_id
FROM jobs
WHERE job_id LIKE ‘IT\_%‘ escape ‘\‘;
NULL
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL;
使用 IS (NOT) NULL 判断空值
AND 要求并的关系为真。
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job_id
LIKE '%MAN%';
*OR 要求或关系为真。
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE '%MAN%';
NOT
SELECT last_name, job_id
FROM employees
WHERE job_id
NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
☆优先级
优先级
1 算术运算符
2 连接符
3 比较符
* 4 IS [NOT] NULL, LIKE, [NOT] IN
5 [NOT] BETWEEN
6 NOT
7 AND
8 OR
使用 ORDER BY 子句排序
ASC(ascend): 升序
DESC(descend): 降序
ORDER BY 子句在SELECT语句的结尾。
SELECT last_name, job_id,
department_id, hire_date
FROM employees
ORDER BY hire_date ;
SELECT last_name, job_id,
department_id, hire_date
FROM employees
ORDER BY hire_date DESC ;
SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal;
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
☆单行函数:
操作数据对象
接受参数返回一个结果
只对一行进行变换
每行返回一个结果
可以转换数据类型
可以嵌套
参数可以是一列或一个值
*LOWER('SQL
Course') sql course
*UPPER('SQL
Course') SQL COURSE
*INITCAP('SQL
Course') Sql Course
显示员工 Higgins的信息:
SELECT employee_id, last_name, department_id
FROM employees
WHERE last_name = 'higgins';
结果: no rows selected
SELECT employee_id, last_name, department_id
FROM employees
WHERE LOWER(last_name) = 'higgins';
结果 截图
这类函数控制字符:
*CONCAT('Hello', 'World') HelloWorld
*SUBSTR('HelloWorld',1,5) Hello
LENGTH('HelloWorld') 10
*INSTR('HelloWorld', 'W') 6
*LPAD(salary,10,'*') *****24000
*RPAD(salary, 10,
'*') 24000*****
*TRIM('H' FROM 'HelloWorld') elloWorld
☆字符控制函数
SELECT employee_id, CONCAT(first_name, last_name) NAME,
job_id, LENGTH (last_name),
INSTR(last_name, 'a') "Contains 'a'?"
FROM employees
WHERE SUBSTR(job_id, 4) = 'REP';
数字函数
ROUND: 四舍五入
*ROUND(45.926,
2) 45.93
*TRUNC: 截断
*TRUNC(45.926,
2) 45.92
MOD: 求余
*MOD(1600,
300) 100
*SELECT ROUND(45.923,2), ROUND(45.923,0),
ROUND(45.923,-1)
FROM DUAL;
:45.92,46,50
SELECT TRUNC(45.923,2), TRUNC(45.923),
TRUNC(45.923,-2)
☆*FROM DUAL;
SELECT last_name, salary, MOD(salary, 5000)
FROM employees
WHERE job_id = 'SA_REP';
Oracle 中的日期型数据实际含有两个值: 日期和时间。
☆默认的日期格式是 DD-MON-RR.
SELECT last_name, hire_date
FROM employees
WHERE last_name like 'G%';
函数SYSDATE 返回:
日期
时间
☆日期的数学运算
☆在日期上加上或减去一个数字结果仍为日期。
两个日期相减返回日期之间相差的天数。
可以用数字除24来向日期中加上或减去小时。
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS
FROM employees
WHERE department_id = 90;
☆日期函数
MONTHS_BETWEEN 两个日期相差的月数
*ADD_MONTHS 向指定日期中加上若干月数
*NEXT_DAY 指定日期的下一个日期
*LAST_DAY 本月的最后一天
*ROUND 日期四舍五入
*TRUNC
日期截断
☆日期函数
*MONTHS_BETWEEN
('01-SEP-95','11-JAN-94') 19.6774194
*ADD_MONTHS
('11-JAN-94',6) '11-JUL-94'
*NEXT_DAY ('01-SEP-95','FRIDAY')
'08-SEP-95'
*LAST_DAY('01-FEB-95') '28-FEB-95'
*Assume SYSDATE = '25-JUL-95':
*ROUND(SYSDATE,'MONTH') 01-AUG-95
*ROUND(SYSDATE
,'YEAR') 01-JAN-96
*TRUNC(SYSDATE
,'MONTH') 01-JUL-95
*TRUNC(SYSDATE
,'YEAR') 01-JAN-95
Oracle 自动完成下列转换
*VARCHAR2 or CHAR NUMBER
VARCHAR2 or
CHAR DATE
*NUMBER VARCHAR2
DATE VARCHAR2
















