UNIT2 数据查询
单元培训目标
?
理解Oracle数据查询的概念和作用; 掌握数据查询的基本方法;
通过函数、子查询的学习,能写一些较复杂的数据查询。
?
?
LESSON 1简单的数据查询
为了检索数据库中的数据,必须使用SQL建立相应的查询语句。本节从最基本的SELECT语句结构出发,讲述如何建立简单的数据查询。 基本结构:
SELECT [distinct] {*, column [alias], ……} FROM TABLE SELECT: 选择要查询的数据列 FROM: *:
数据列所在的表 选择所有的列
COLUMN:选择的列名 ALIAS:
给选定的列一个别名
例:SELECT * FROM s_dept
SELECT last_name, first_name, address FROM s_emp 算术表达式:
除了单一的获取数据库数据,也可以在检索的数据列中,可以做各种的算术表达式,以获取所需数据,常用算术运算符有:
加:+ 减:- 乘:* 除:/ 例:
SELECT last_name, salary * 12, base_salary + salary FROM tablename
3
Company Confidential - For internal use only
字符串处理
字符串可以做最简单的“加”法,即合并运算:|| 例:
SELECT column1||‘.‘||column2 ||‘$‘ FROM tablename
注:column1、column2必须位字符型数据列
SELECT first_name ||‘ ?|| last_name||‘,‘|| title ―Employees‖ FROM s_emp 空处理
在Oracle数据库中,常会用到一种空处理,对于数据列中的空值,要做特定处理,就会用到下面空处理函数:
NVL: 例:
NVL (start_date, sysdate) NVL (name, ?no name‘) NVL (base_salary, 2000)
在数据列的值为空时(并非为零),以真实的值进行替代处理
注:任何未被声明为NOT NULL或PRIMARY KEY的列都可包含空值,注意,空值就是空值,并不是值为零或空格,零是一个数值,空格是一个字符,而空值就是不具有任何类型的值。 例:
select first_name, nvl(base_salary, 2000) from s_emp; 消除重复行:
对于数据检索中的重复行,可用如下方法去掉:
SELECT DISTINCT column1, column2 … FROM TABLE 例:SELECT item_id from t_onhand
SELECT DISTINCT item_id FROM t_onhand 选择多列非重复:
例:SELECT DISTINCT warehoused_id, item_id FROM t_onhand 显示表结构:
对于一个并不熟悉的数据表,要检索其数据,必须知道它的结构和例的数据类型,否则,就无法在SELECT语句中,写出其数据列表达式,通过如下方法,可以显示该数
4
Company Confidential - For internal use only
据表的结构:
格式:
DESC[RIBE] tablename Oracle常用数据类型: number(p, s): varchar2(s): date: char(s): 例:
浮点类型,最大精度p,小数位s位 可变长字符类型,最大长度s位 日期型
定长字符类型,长度为s
SQL>desc t_item Name -------- item_id Null ------ Type ------- number varchar2(20) number, varchar2(100) number NOT NULL NOT NULL item_name base_price description class_id LESSON 2 SQL*Plus的使用
本节介绍Oracle最常用的一个工具SQL*Plus,在它的环境中,可以通过命令方式执行数据检索、PL/SQL块编辑和编译等等。 SQL*Plus的使用:
I.
文件命令
a) SAVE filename 把当前SQL缓冲区的内容存储在文件filename中 b) GET filename 把文件filename中的内容写入当前SQL缓冲区 c)
START filename 执行存储在filename中的内容
d) @ filename 执行存储在filename中的内容 e)
EDIT filename 打开文本编辑器,把当前SQL缓冲区的内容写入文件afiedt.buf
SPOOL filename 把查询的数据结果存储在filename中
f)
5
Company Confidential - For internal use only
g) EXIT 退出SQL*Plus 例:在SQL*Plus中敲入如下命令: SQL>@e:\\test\\demo.sql
SQL*Plus则自动运行存储在e:\\test\\demo.sql中的PL/SQL代码。 II.
文本编辑命令 a) A[PPEND] text
在当前行末尾添加文本text
b) C[HANGE]/old/new 在当前行中以new替代old文本 c)
CL[EAR]buff[ER]
清空缓冲区的所有文本 删除当前行
插入行
d) DEL e) f)
I[NPUT] text L[IST] n
显示第n行
以文本text代替第n行
g) N text III.
在SQL*Plus中,可以预定一些列的输出格式,这样,有利于数据的整齐性,同时,也可通过这些格式的制定,做一些简单的SQL*Plus报表,其格式输出如下: 格式:
COL[UMN] [{column|alias}[option ……]] a)
b) 参数选项:
CLE[AR]、FOR[MAT]format、HEA[DING]text、
JUST[TIFY]{align}、NOPRI[NT]、NUL[L]text、PRI[NT]、TRU[NCATED]、WEA[PPEND]、WOR[D_WRAPPED]
例:
COLUMN last_name HEADING ?employee|name‘ FORMAT A15 COLUMN salary JUSTIFY LEFT FORMAT $99,999.00 COLUMN start_date FORMAT A9 NULL ?Not hired‘
c)
字符和数值格式: 格式 An 描述 设置字符串或数据类型的显示长度 代表非零数值位 限定以零带头 举例 N/A 输出结果 N/A 9 0 999999 099999 1234 01234
6
Company Confidential - For internal use only
$ L . ,
数据控制输出
代表美元符号 代表本地货币符号 代表小数点位置 代表千位分割符 $9999 L9999 9999.99 9,999 $1234 L1234 1234.00 1,234 对于检索的数据集,可以使用ORDER BY语句指定其排序方式,即输出方式:
SELECT expr FROM table [WHERE condition(s) [ORDER BY expr ]; ] 在expr后可指定其排序方式,缺省为升序排列输出,添加参数desc则为降序排列输出。 例:
SELECT employee_id, first_name, last_name, salary FROM t_emp
ORDER BY first_name, salary 逻辑比较
Oracle常用的逻辑比较操作如下:
=、>=、<=、>、<
between…and…、in、like、is null and、or、not 例:
SELECT last_name, employee_id FROM t_emp
WHERE start_date>to_date(?2001-01-01‘,‘yyyy-mm-dd‘) And last_name like ?%H%‘
注意:在逻辑比较中,NOT的级别最高,其次是AND,最后是OR
负操作:(通过与not组合,产生非值)
NOT BEWTEEN …AND NOT IN (list) NOT LIKE
7
Company Confidential - For internal use only