☆空值在数学运算中的使用

包含空值的数学表达式的值都为空值

定义空值

空值是无效的,未指定的,未知的或不可预知的值

空值不是空格或者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