nullORACLE数据库开发基础ORACLE数据库开发基础
培训
焊锡培训资料ppt免费下载焊接培训教程 ppt 下载特设培训下载班长管理培训下载培训时间表下载
人: 陈仰灵
时 间: 2011 年 7 月 14 日null介绍
姓名:陈仰灵
项目:IMIS项目组
联系方式:chenyl@gillion.com.cn
数据库开发基础数据库开发基础本次培训内容:
基本概念
SQL语言
SQL开发初步
开发环境介绍
基本概念基本概念表
数据类型
表约束
索引
I. 表:字段、记录、列、主键、外键I. 表:字段、记录、列、主键、外键表EMP表DEPTEMPNO ENAME DEP_NO
7369 SMITH 20
7499 ALLEN 30记录列(字段)主键表名:EMP外键表:数据库最基本的组件。在逻辑上是存储数据的基本单元。由行(记录)与列(字段)组成II. 数据类型II. 数据类型数据类型用于给特定的数据提供规则。
基本数据类型包括:
字符串
数字
日期和时间值.字符串定长字符串:
CHAR (n)
变长字符串:
VARCHAR/VARCHAR2(n).字符串.数字型NUMBER(n,m)
INTEGER
SMALLINT
FLOAT(p)
DOUBLE PRECISION(p)
.数字型.日期和时间值.日期和时间值DATE(YEAR,MONTH,DAY)
TIME(HOUR,MINUTE,SECOND)
INTERVAL
TIMESTAMP
类型转化:
TO_TIMESTAMP(SYSDATE,'YYYY-MM-DD HH24:MI:SS')III.表约束III.表约束用于限定数据业务规则
常见的表约束:
空值NULL 约束
默认值DEFAULT
外键约束FOREIGN KEY
唯一性约束
(可以通过创建唯一索引UNIQUE INDEX确保唯一性)
IV.索引IV.索引主要用于加快查询效率
逻辑上看,常见的索引类型 :
.普通单列索引
.组合索引
.唯一索引
.函数索引null例子:箱信息表 DOC_BL_UNIT
null例子:箱信息表 DOC_BL_UNIT
关系数据库标准语言SQL关系数据库标准语言SQLSQL:Structured Query Language
结构化查询语言
功能:查询、操纵、定义、控制
特点:1、一体化;
2、两种使用方式,统一的语法结构;
方式一、联机交互使用方式;
方式二、嵌入式。
3、高度非过程化;
4、语言简洁,易学易用。SQL命令的种类SQL命令的种类DDL(Data Definition Language):数据定义语 言
DML(Data Manipulation Language):数据操纵语言
DQL(Data Query Language):数据查询语言
DCL(Data Control Language):数据控制语言
事务性控制命令DML,数据操纵语言DML,数据操纵语言用于在关系数据库对象中操纵数据
INSERT
UPDATE
DELETE
DQL,数据查询语言
对数据库中的信息寻找和定位
SELECT数据查询语句数据查询语句语句结构
操作符
多表查询
数据集之间的操作
.结构SELECT [ * | all | column1,column2 ]
FROM table1 [ ,table2 ]
[ WHERE condition ]
[ GROUP BY column1 ]
[ ORDER BY column2(asc,desc) ]按列取值相等的原则进行分组按列值进行排序.结构null
例1:SELECT * FROM products_tbl WHERE cost < 5
例2:SELECT prod_desc,cost
FROM products_tbl WHERE prod_id = ‘119’
例3:多表查询
SELECT employee_tbl.emp_name, employee_pay_tbl.position
FROM employee_tbl, employee_pay_tbl
WHERE employee_tbl.emp_id = employee_pay_tbl.emp_id
.操作符.操作符定义:操作符是保留的字或字符,主要用于比
较和算术运算。
分类:比较操作符,逻辑操作符和算术运算符。
1、比较操作符
包括:=,<>, >, <, <=, >=。
注意比较双方的数据类型。
2、算术运算符
包括:+,-,*,/等。
与数学运算规则一致。
3、逻辑操作符3、逻辑操作符IS NULL(是否为空)
BETWEEN(在某两个值之间)
IN(一系列值中)
LIKE(相似值的比较)
EXISTS(是否存在符合条件的数据)
ALL/ANY(一组数据的所有/其中的任何一个)
AND/OR(逻辑与/或)IS NULL / IS NOT NULLIS NULL / IS NOT NULLWHERE salary IS NULL
工资为空值。
例:
SELECT emp_id, emp_name
FROM employee_tbl
WHERE emp_phone IS NULLBETWEENBETWEENWHERE salary BETWEEN 200 and 300
工资在200到300之间,包括200和300。
IN
WHERE salary IN (200,300,400)
工资必须是200,300,400之中的值。LIKELIKE使用匹配符将一个值同其相似的值比较。
匹配符包括:- 代表一个字符。
% 代表多个字符。
如:
WHERE salary LIKE ‘-00’
查找‘00’作为后两位数的值。
WHERE salary LIKE ‘200%’
查找‘200’作为前三位数的值。EXISTSEXISTS查询在指定表中是否存在一行符合某种条件的数据。
WHERE EXISTS
(SELECT employee_id
FROM employee_tbl
WHERE employee_id = ‘3333’)ALL/ANYALL/ANY与某个数据集中所有数据 / 任何一个进行比较。
WHERE salary > all
(SELECT salary
FROM employee_tbl
WHERE city = ‘INDIAN’)
AND/ORAND/ORAND连接的条件必须都满足。
OR连接的条件至少满足一个。
如:SELECT *
FROM products_tbl
WHERE cost > 10 and cost < 30
如:SELECT *
FROM products_tbl
WHERE prod_id = ‘7725’
or prod_id = ‘2345’
例子例子.Order by / group by /having
SELECT E.* FROM EMP E ORDER BY E.DEPTNO SELECT E.DEPTNO,SUM(E.SAL) FROM EMP E GROUP BY E.DEPTNO SELECT E.DEPTNO,COUNT(*) FROM EMP E GROUP BY E.DEPTNO HAVING COUNT(*)>3 SELECT E.DEPTNO,COUNT(*) FROM EMP E GROUP BY E.DEPTNO ORDER BY E.DEPTNO例子例子.“in” “=” “EXISTS”
SELECT E.EMPNO,E.ENAME
FROM EMP E
WHERE E.DEPTNO IN (SELECT D.DEPTNO FROM DEPT D WHERE D.DNAME='SALES')
SELECT E.EMPNO,E.ENAME
FROM EMP E
WHERE E.DEPTNO=(SELECT D.DEPTNO FROM DEPT D WHERE D.DNAME='SALES')
SELECT E.EMPNO,E.ENAME
FROM EMP E
WHERE EXISTS(SELECT 1 FROM DEPT D WHERE D.DNAME='SALES' AND D.DEPTNO=E.DEPTNO)例子例子.“not in” “NOT EXISTS”
SELECT E.EMPNO,E.ENAME,E.DEPTNO
FROM EMP E
WHERE E.DEPTNO NOT IN (SELECT D.DEPTNO FROM DEPT D WHERE D.DNAME='SALES')
.最不可用
SELECT E.EMPNO,E.ENAME,E.DEPTNO FROM EMP E WHERE E.DEPTNO<>(SELECT D.DEPTNO FROM DEPT D WHERE D.DNAME='SALES')
.推荐写法
SELECT E.EMPNO,E.ENAME,E.DEPTNO
FROM EMP E
WHERE NOT EXISTS(SELECT 1 FROM DEPT D WHERE D.DNAME='SALES' AND D.DEPTNO=E.DEPTNO).表连接-多表数据查询.表连接-多表数据查询常见的表连接:
1、等值连接、
2、左连接LEFT JOIN / (+)
3、全连接FULL JOINnull.等值连接
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E JOIN DEPT D ON E.DEPTNO=D.DEPTNO WHERE E.EMPNO='7902'
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO AND E.EMPNO='7902' null.左连接
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO=D.DEPTNO WHERE E.EMPNO='7934'
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO(+) AND E.EMPNO='7934' null.全连接
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E FULL JOIN DEPT D ON E.DEPTNO=D.DEPTNO
相当于:
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO=D.DEPTNO UNION SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME FROM DEPT D LEFT JOIN EMP E ON E.DEPTNO=D.DEPTNO .数据集之间的操作.数据集之间的操作.基本的一些操作符:
合集 UNION ALL / UNION
差集 MINUS
交集 INTERSECTnull--合集 UNION ALL
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO='7369'
UNION ALL
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO='7369' null--合集 UNION
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO='7369'
UNION
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO='7369' null--差集
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO IN ('7369','7499')
MINUS
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO='7499'null--交集
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO IN ('7369','7499')
INTERSECT
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.EMPNO='7499'数据库更新语句数据库更新语句INSERT 给表新增数据
UPDATE 更新已存在的数据
DELETE 删除表中的数据INSERT 给表新增数据INSERT 给表新增数据语法:
INSERT INTO table_name
VALUES(value1,value2,…...)
例:
products_tbl:prod_id varchar(10)
prod_desc varchar(25)
cost number(6,2)
输入数据:
INSERT INTO products_tbl
VALUES(‘7725’,’LEATHER’,26.99) UPDATE 更新已存在的数据UPDATE 更新已存在的数据语法:
UPDATE table_name
SET column_name = ‘value’
[WHERE condition]
例:UPDATE products_tbl
SET prod_id = ‘1001’
WHERE prod_desc = ‘coat’
DELETE 删除表中的数据DELETE 删除表中的数据语法:
DELETE FROM table_name
[WHERE condition]
例:DELETE FROM products_tbl
WHERE prod_ID = ‘1001’
null --INSERT INSERT INTO SAL_GRADE(GRADE) VALUES('7') SELECT * FROM SAL_GRADE --UPDATE UPDATE SAL_GRADE S SET S.SAL_TO='10000' WHERE S.GRADE='5' --DELETE DELETE FROM SAL_GRADE S WHERE S.GRADE='5'SQL数据定义语句SQL数据定义语句数据定义功能包括:基表、索引的定义。
一、创建与删除基表
二、索引的建立与删除DDL,数据定义语言DDL,数据定义语言用户创建或重新构建数据库的语言
CREATE INDEX
ALTER INDEX
DROP INDEX CREATE TABLE
ALTER TABLE
DROP TABLE一、创建与删除基表一、创建与删除基表创建基表语法:
CREATE TABLE table_name
(col_name col_properties constraint
……
)
table_name 表名
col_name 列名
创建临时表:
CREATE TABLE # table_name
(col_name col_properties constraint
……
)
null删除一张表就是删除一张表定义及其所有与之相关连的数据、索引、触发器、约束和许可。
语法:
DROP TABLE databasename.table_name
例:
DROP TABLE pubs.dbo.authors2null修改表结构语法:
ALTER TABLE table_name
[modify][col_name col_properties]
[add][col_name col_properties]
[drop][col_name col_properties]
例:ALTER TABLE employee_tbl
modify(emp_id varchar(10))例:创建一雇员表(编号/C,姓名/C,住所/C,电话/N)。例:创建一雇员表(编号/C,姓名/C,住所/C,电话/N)。CREATE TABLE employee_tbl
(emp_id char(9) not null,
emp_name varchar(40) not null,
emp_city varchar(15) not null,
emp_phone number(10) null)二、索引的建立与删除二、索引的建立与删除语法:
CREATE [UNIQUE] [CLUSTER] INDEX index_name ON table_name(clo_name 升/降序,…...)
ASC:升序,DESC:降序
UNIQUE 每一个索引只对应唯一的数据记录;
CLUSTER 聚簇索引,是指索引项的顺序与表中记录的物理顺序一致的索引组织。
null例:为学生-课程数据库中的student, couse, sc 3个表建立索引。其中student表按学号升序建立唯一索引; couse表按课程号升序建立唯一索引; sc 表按学号升序和课程号降序建唯一索引。
CREATE UNIQUE INDEX stusno ON student(sno)
CREATE UNIQUE INDEX coucno ON couse(cno)
CREATE UNIQUE INDEX scno
ON sc(sno ASC,cno DESC)null删除索引语法:
DROP INDEX
例:删除student表的stusname索引
DROP INDEX stusnamenull.表
create table EMP
(
EMPNO NUMBER(4) not null,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2)
) tablespace SYSTEM --表空间
pctfree 10 --表存储参数
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);null.主键、外键
-- primary key
alter table EMP
add constraint PK_EMP primary key (EMPNO)
using index
tablespace SYSTEM
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- foreign key
alter table EMP
add constraint FK_DEPTNO foreign key (DEPTNO)
references DEPT (DEPTNO);null.索引
create index IX_EMP_DEPTNO on EMP(DEPTNO)
tablespace SYSTEM --表空间
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
)
;null.事务控制
.用户权限分配SQL数据控制语句.事务性控制命令.事务性控制命令用户管理数据库的事务命令
COMMIT用于保护数据库的事务
ROLLBACK用于撤消数据库的事务
SAVEPOINT创建一组事务中的撤消点
SET TRANSACTION给事务命名.用户权限分配.用户权限分配用于创建与用户访问相关的对象,也控制着用户的权限分配
ALTER PASSWORD改变口令
GRANT为用户授予特权
REVOKE从用户处收回特权
null授权:
将对指定操作对象的指定操作权限授予指定的用户。GRANT <权限>[,<权限>]…
[ON<对象类型> <对象名>]
TO <用户>[, <用户>]…
[WITH GRANT OPTION];权限:
SELECT,INSERT,UPDATE,DELETE;ALTER,INDEX;CREATE
对象类型:TABLE,DATABASE
对象:属性列,视图,基本表,数据库null例1:把查询GRANT SELECstudent表权限授给用户U1.
T ON TABLE student TO U1;例2:把查询sc表权限授给所有用户.
GRANT SELECT ON TABLE SC TO PUBLIC;例3:把对表SC的INSERT权限授给用户U2,并允许他转授.
GRANT INSERT ON TABLE SC
TO U2 WITH GRANT OPTION;
GRANT INSERT ON TABLE SC TO U3nullREVOKE <权限>[,<权限>]…
[ON<对象类型> <对象名>]
FROM <用户>[, <用户>]…;例4:把所有用户查询SC表权限收回.
REVOKE SELECT ON TABLE SC FROM PUBLIC;收回权限例5:把用户U1修改student表的sno字段的权限收回.
REVOKE UPDATE(sno) ON TABLE student FROM U1;null.COMMIT/ROLLBACK开发时注意点
1、程序里面是否一定要commit
2、日常操作的注意点
DELETE FROM SAL_GRADE S WHERE S.GRADE='5‘nullSQL过程语言
函数FUNCTION
存储过程PROCEDURE
视图VIEW
库函数SQL开发初步.SQL过程语言.SQL过程语言基本结构
结构语言
.基本结构.基本结构DECLARE
/* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 */
BEGIN
/* 执行部分: 过程及SQL 语句 , 即程序的主要部分 */
EXCEPTION
/* 执行异常部分: 错误处理 */
END;
注:主体部分被包含在BEGIN-END中,是必需部分。
.结构语言.结构语言判断分支语句1:
IF condition THEN
Sequence_of_statements;
END IF;
IF condition THEN
Sequence_of_statement1;
ELSE
Sequence_of_statement2;
END IF;
IF condition1 THEN
Sequence_of_statement1;
ELSIF condition2 THEN
Sequence_of_statement2;
ELSIF condition3 THEN
Sequence_of_statement3;
END IF;.结构语言.结构语言判断语句2:
CASE WHEN condition1 THEN
Sequence_of_statements1;
WHEN condition2 THEN
Sequence_of_statements2;
ELSE
Sequence_of_statements3;
END CASE;
CASE variable WHEN value1 THEN
Sequence_of_statements1;
WHEN value2 THEN
Sequence_of_statements2;
ELSE
Sequence_of_statements3;
END CASE;
.结构语言.结构语言.循环语句
FOR counter IN lower_bound..higher_bound LOOP
Sequence_of_statements;
END LOOP;
WHILE condition LOOP
Sequence_of_statements;
END LOOP;
异常处理异常处理EXCEPTION
常见异常
NO_DATA_FOUND
TOO_MANY_ROWS
DUP_VAL_ON_INDEX
VALUE_ERROR
STORAGE_ERROR
ZERO_DIVIDE
CURSOR_ALREADY_OPEN
TIMEOUT_ON_RESOURCE
CASE_NOT_FOUND
OTHERS
异常处理异常处理异常处理
BEGIN
Sequence of statements;
Exception When exception1 then Sequence of statements; When exception2 then Sequence of statements; When others then
Sequence of statements;
END;异常处理异常处理OTHERS异常
OTHERS处理器应该是异常处理块中的最后的异常处理器,因为它是用来捕获除了别的异常处理器处理以外的所有的Oracle异常,所以在程序的最外层使用一个OTHERS处理器的话,将可以确保所有的错误都会被检测到。 例子例子BEGIN
FOR i IN 1..200 LOOP
CASE WHEN MOD(i,5)=0 THEN
INSERT INTO BONUS(COMM)VALUES(i);
WHEN MOD(i,5)=1 THEN
NULL;
ELSE
NULL;
END CASE;
END LOOP;
END;存储函数存储函数存储函数
CREATE FUNCTION 函数名 (参数说明1,参数说明2, 。。。)
RETURN 类型 IS
[局部说明]
BEGIN
执行语句;
END[函数名];
Variable := 函数(参数1,参数2,…参数N);存储函数例子存储函数例子CREATE OR REPLACE FUNCTION FN_GET_DEPNAME
(
V_DEPTNO IN EMP.DEPTNO%TYPE
)
RETURN VARCHAR2
AS
V_DNAME DEPT.DNAME%TYPE;
BEGIN
BEGIN
SELECT D.DNAME INTO V_DNAME FROM DEPT D WHERE D.DEPTNO=V_DEPTNO;
EXCEPTION WHEN NO_DATA_FOUND THEN V_DNAME:=NULL;
END;
RETURN V_DNAME;
END;
存储过程存储过程存储过程:
CREATE PROCEDURE 过程名 (参数说明1,参数说明2, 。。。)
IS
[局部说明]
BEGIN
执行语句;
END [过程名];
[EXEC] 过程名(参数1,参数2…参数N);存储过程例子存储过程例子
CREATE OR REPLACE PROCEDURE SP_TEST_GET_EMP_INFO
(
V_EMPNO IN EMP.EMPNO%TYPE,
V_CURSOR OUT sys_refcursor
)
AS
BEGIN
OPEN V_CURSOR FOR
SELECT E.EMPNO,E.ENAME,E.DEPTNO,FN_GET_DEPNAME(E.DEPTNO) FROM EMP E
WHERE E.EMPNO=V_EMPNO;
END;二、视 图二、视 图视图的定义
视图的查询
视图的更新
删除视图视图的定义视图的定义什么是视图?
视图是存储在数据库中的预先定义好的查询,具有表的外观,可以象表一样对其进行存取,但不占据物理存储空间。
视图的特点:
视图的存在依赖于生成视图的表;
视图能用作数据库安全的一种形式;
利用视图维护综合数据。 创建视图 创建视图基本语法:
CREATE VIEW view_name AS
SELECT STATEMENT
[WITH CHECK OPTION]
1、从单表/多表中创建视图
2、从视图中创建视图1、从单独的表中创建视图1、从单独的表中创建视图语法: CREATE VIEW view_name AS
SELECT * |COL1[,COL2,…]
FROM table_name
WHERE expression
例: CREATE VIEW emp _ view AS
SELECT emp_id,emp_name,phone
FROM employee_tbl从多表中创建视图从多表中创建视图语法:
CREATE VIEW VIEW_NAME AS
SELECT * |COL1[,COL2,….]
FROM TABLE_NAME1,TABLE_NAME2,…
WHERE EXPRESSION2、从视图中创建视图2、从视图中创建视图语法:CREATE VIEW2 AS
SELECT * FROM VIEW1
注意:不要创建层次太深的视图;
例:由上例视图employee_summary
CREAT subsummary AS
SELECT *
FROM employee_summary视图的查询视图的查询对视图的查询与对基本表查询一样;
系统执行视图查询时是把它转换成等价的对基本表的查询。
例:
SELECT emp_id, position
FROM employee_summary
WHERE pay_rate > 15.视图例子.视图例子CREATE VIEW VW_TEST_GET_EMP_INFO
AS
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
;
select * from vw_test_get_emp_info V WHERE V.EMPNO='7782'.库函数.库函数 函数通常是列名或表达式相连系的命令。
1、统计函数
2、字符函数
3、算术函数
1、统计函数1、统计函数统计函数:用于提供统计信息,如:累加、总和、平均值。
主要的统计函数:
COUNT:统计行数或不为NULL的列数。
SUM:求和。
MAX:求最大值。
MIN:求最小值。
AVG:求平均值。COUNTCOUNT语法:
COUNT[(*)|(DISTINCT|ALL|]COLUMN NAME)
注意:DISTINCT统计唯一的行;
DISTINCT不能用于COUNT(*),只能用
于COUNT(column_name)举例:举例:SELECT COUNT(*)
FROM EMPLOYEE_TBL 统计雇员表中所有行数
SELECT COUNT(EMP_ID)
FROM EMPLOYEE_TBL 统计所有雇员身份证号
SELECT COUNT(DISTINCT SALARY)
FROM EMPLOYEE_PAY_TBL 统计唯一行数SUM:仅用于数字类型。SUM:仅用于数字类型。语法:
SUM( [DISTINCT] COLUMN NAME)
举例:
SELECT SUM (SALARY)
FROM EMPLOYEE_PAY_TBL 计算工资总和
SELECT SUM (DISTINCT SALARY)
FROM EMPLOYEE_PAY_TBL 计算没有重复工资总和AVG:确定一组数据的平均值AVG:确定一组数据的平均值语法:
AVG([DISTINCT] COLUMN NAME)
举例:
SELECT AVG(SALARY)
FROM EMPLOYEE_PAY_TBL 计算工资的平均值
SELECT AVG(DISTINCT SALARY)
FROM EMPLOYEE_PAY_TBL 计算唯一的工资平均值MAX和MINMAX和MIN语法:
MAX( [DISTINCT] COLUMN NAME )
MIN ( [DISTINCT] COLUMN NAME )
举例:
SELECT MAX(SALARY)
FROM EMPLOYEE_PAY_TBL 计算最高的工资
SELECT MAX(DISTINCT SALARY)
FROM EMPLOYEE_PAY_TBL 计算最高的工资例:表DTUDENT_TBL例:表DTUDENT_TBL数学平均值
总成绩最高值
语文成绩最低值
数学成绩总和
表中的数据行数null1. SELECT AVG(maths)
FROM STUDENT_TBL
2. SELECT MAX(total)
FROM STUDENT_TBL
3. SELECT MIN(comp)
FROM STUDENT_TBL
4. SELECT SUM(maths)
FROM STUDENT_TBL
5. SELECT COUNT(*)
FROM STUDENT_TBL2、字符串函数2、字符串函数UPPER/LOWER(character string):将指定字符串中的小/大写字母换成大/小写字母。
REPLACE
[L/R]TRIM
L/RPAD
INSTR
TO_CHAR
LENGTH
SUBSTR(colunm name,startposition,length) 从指定字符串中取字符。例:例:SELECT UPPER(CITY)
FROM EMPLOYEE_TBL
SELECT LOWER (CITY)
FROM EMPLOYEE_TBL
SELECT SUBSTRING(EMP_ID,1,3)
FROM EMPLOYEE_TBL
SELECT SUBSTRING(EMP_ID,5,3)
FROM EMPLOYEE_TBL3、算术函数3、算术函数ABS(绝对值)、SIN、COS、TAN、
EXP(指数)、SQRT(开方)、
POWER(幂)
语法:函数名(表达式)
例:SELECT SQRT(MATHS) * 10
FROM STUDENT_TBL4、日期函数4、日期函数ADD_MONTHS( , ) 加月份后的日期
CURRENT_DATE/SYSDATE
CURRENT_TIMESTAMP
LAST_DAY 本月最后一天
TO_DATE 日期转换
NEXT_DAY( ,) 指定日期的下星期某天的日期
MONTHS_BETWEEN 两个日期之间的时间差(月份)
null
疑问时间TESTTEST雇员表(EMP)请在各自的开发环境中测试以下步骤,并将写出相关语句。
(建表所用的表空间、存储参数、命名
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
皆可以根据各自项目的情况设定)
TESTTEST部门表(DEPT)薪酬等级表( SAL_GRADE )TESTTEST相关表说明:雇员表(EMP)、部门表(DEPT)、薪酬等级表( SAL_GRADE )
(见上图)
其中,
雇员表(EMP)中的雇员号 EMPNO 是雇员表的唯一标识,且必须有值
部门表(DEPT)中的部门号DEPTNO是部门表的唯一标识,且必须有值
薪酬等级表(SAL_GRADE)中的GRADE是薪酬等级表的唯一标识,且必须有值
薪酬等级表( SAL_GRADE )中的起薪SAL_FROM和SAL_TO默认分别是1000、2000
表间关系:雇员表(EMP)中的DEPTNO与部门表(DEPT)的DEPTNO关联
雇员表(EMP)中的薪资SAL对应薪酬等级表( SAL_GRADE )中的范围等级
TESTTEST1、建表(根据上述信息建立相关表、键、索引,写出相关语句)
2、根据要求写出下列查询语句:
(1)查询在此工作距离当前时间已经超过30年的雇员信息
(雇佣时间HIREDATE)
(2)查询其部门所在地LOC不在NEW YORK的所有雇员信息
(且雇员有所属部门)
3、做一个功能函数
名称:FN_TEST_GET_GRADE
功能描述:需要根据雇员的薪资金额判断其等级
注意点:如果薪资低于等级所设置的最低薪则返回为0,
如果薪资高于等级所设置的最高薪则返回10
TESTTEST4、做一个报表视图
名称:VW_TEST_GET_EMP_GRADE_INFO
描述:利用上面的函数FN_TEST_GET_GRADE ,做出下列报表视图(如图)
5、将上面视图转换成存储过程形式
名称:SP_TEST_GET_EMP_GRADE_INFO
功能说明:雇员输入自己的名字,就可以查询对应的信息(显示格式如图)
提示:可以用cursor来接收返回的数据集
nullThank You!