通过SQL 语句,程序员或数据库管理员可以做如下的主要工作:
(1 )建立数据库的表格,包括设置表格所可以使用之空间。
(2 )改变数据库系统环境设置。
(3 )针对某个数据库或表格,授予用户存取权限。
(4 )对数据库表格建立索引值。
(5 )修改数据库表格结构(新建、删除或是修改表格字段)。
(6 )对数据库进行数据的新建。
(7 )对数据库进行数据的删除。
(8 )对数据库进行数据的修改。
(9 )对数据库进行数据的查询。
SQL 语言分类:

1-1 基本sql语句
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;
Ø SELECT 标识选择哪些列
Ø * 选择全部列
Ø DISTINCT 过滤重复值
Ø column|expression 选择的列名或表达式
Ø alias 表的别名
Ø FROM 标识从哪个表中选择
Ø table 取数据的表名
1-1-1 选择全部列
SELECT * FROM departments;

使用”* ”选择表中的全部列。
在实际工作中,尽量避免使用select * … 因为ORACLE 在解析的过程中, 会将’* ’依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 将耗费更多的时间。
1-1-2 选择特定的列
SELECT department_id, location_id FROM departments;

1-2 算数运算符

SELECT last_name, salary, salary + 300 FROM employees;


1-2-1 操作符优先级
Ø 乘除的优先级高于加减。
Ø 同一优先级运算符从左向右执行。
Ø 括号内的运算先执行。
SELECT last_name, salary, 12*salary+100 FROM employees;

1-2-2 使用括号
SELECT last_name, salary, 12*(salary+100) FROM employees;

1-2-3 定义空值
Ø 空值是无效的,未指定的,未知的或不可预知的值。
Ø 空值不是空格或者0 。
Ø 各种类型的列都可以包含空值
Ø NOT NULL 和 PRIMARY KEY 约束列不允许空值
SELECT last_name, job_id, salary, commission_pct FROM employees;

1-3 列的别名
Ø 重命名一个列。
Ø 便于计算。
Ø 紧跟列名,也可以在列名和别名之间加入关键字‘AS ’,以便在别名中包含空格或特殊的字符并区分大小写。
SELECT last_name AS name, commission_pct comm FROM employees;

1-4 连接符
Ø 把列与列,列与字符连接在一起。
Ø 用 ‘|| ’表示。
Ø 可以用来‘合成’列。
SELECT last_name||job_id AS "Employees" FROM employees;

1-5 字符串
Ø 字符串可以是 SELECT 列表中的一个字符, 数字, 日期。
Ø 日期和字符只能在单引号中出现。
Ø 每当返回一行时,字符串被输出一次。
SELECT last_name ||' is a '||job_id AS "Employee Details" FROM employees;

1-6 重复行
SELECT department_id FROM employees;

使用关键字‘DISTINCT ’过滤掉多余的重复记录 。
SELECT DISTINCT department_id FROM employees;

1-7 过滤
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];
WHERE 子句紧随 FROM 子句
1-7-1 WHERE子句
SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90 ;

1-7-2 比较运算

SELECT last_name, salary FROM employees WHERE salary <= 3000;

1-7-3 其他比较运算

BETWEEN:
使用 BETWEEN 运算来显示在一个区间内的值
SELECT last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 3500;

IN:
使用 IN 运算显示列表中的值
SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);

LIKE:
使用 LIKE 运算选择类似的值
选择条件可以包含字符或数字:
% 代表一个或多个字符。
_ 代表一个字符。
‘% ’和‘- ’可以同时使用。
可用ESCAPE 标识符查找% 或_
SELECT first_name FROM employees WHERE first_name LIKE 'S%';
NULL:
使用 NULL 判断空值
null 不等于0 ,空格
任意两个null 不相等
SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL;

1-7-4 逻辑运算

AND:
AND 要求和的关系为真
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >=10000 AND job_id LIKE '%MAN%';
OR:
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-7-5 优先级

1-8 排序
使用 ORDER BY 子句排序
ASC: 升序
DESC: 降序
ORDER BY 子句在SELECT 语句的结尾。
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ;

规则:
缺省按升序排序,可用DESC 说明降序排序
可用表达式或别名排序
NULL 值的显示:升序在最后;降序在首位
可用位置(列序号)排序
ORDER BY 列表的顺序是排序的顺序
可用未出现在SELECT 列表中的列排序
1-8-1 降序排序
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date DESC ;

1-8-2 按别名排序
SELECT employee_id, last_name, salary*12 annsal FROM employees ORDER BY annsal;

1-8-3 多个列排序
SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC;
