Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 认证 > Oracle认证 > 正文

PL/Sql循序渐进全面学习教程

时间:2015-06-11 22:49 来源:网络整理 作者:51ou.com 阅读:

  课程 一 PL/SQL 基本查询与排序

  
本课重点

  写SELECT语句进行数据库查询

  进行数学运算

  处理空值

  使用别名ALIASES

  连接列

  在SQL PLUS中编辑缓冲修改SQL SCRIPTS

  ORDER BY进行排序输出

  使用WHERE 字段

  一写SQL 命令

  不区分大小写

  SQL 语句用数字分行在SQL PLUS中被称为缓冲区

  最后以或 / 结束语句

  也可以用RUN来执行语句

  
本课重点

  写SELECT语句进行数据库查询

  进行数学运算

  处理空值

  使用别名ALIASES

  连接列

  在SQL PLUS中编辑缓冲修改SQL SCRIPTS

  ORDER BY进行排序输出

  使用WHERE 字段

  一写SQL 命令

  不区分大小写

  SQL 语句用数字分行在SQL PLUS中被称为缓冲区

  最后以或 / 结束语句

  也可以用RUN来执行语句

  二例SQL> SELECT dept_id last_name manager_id

   FROM s_emp;

  SQL> SELECT last_name salary * commission_pct

   FROM s_emp;

  对于数值或日期型的字段可以进行相应的四则运算优先级与标准的高级语言相同

  SQL> SELECT last_name salary * (salary + )

   FROM s_emp;

  三列的别名ALIASES

  计算的时候特别有用

  紧跟着列名或在列名与别名之间加AS

  如果别名中含有SPACE特殊字符或大小写要用双引号引起

  例(因字体原因读者请记住引号为英文双引号Double Quotation)

  SQL> SELECT last_name salary

   * (salary + ) Annual Salary

   FROM s_emp;

  四连接符号

  连接不同的列或连接字符串

  使结果成为一个有意义的短语

  SQL> SELECT first_name last_name

   title Employees

   FROM s_emp;

  五管理NULL值

  SQL> SELECT last_name title

   salary * NVL(commission_pct)/ COMM

   FROM s_emp;

  此函数使NULL转化为有意义的一个值相当于替换NULL

  六SQL PLUS的基本内容请参考<SQL PLUS 简单实用精髓篇 >

  七ORDER BY 操作

  与其他SQL标准数据库相似排序如

  SELECT expr

  FROM table

  [ORDER BY [ASCDESC]];

  从Oracle release 开始ORDER BY 可以用别名

  另通过位置判断排序

  SQL> SELECT last_name salary*

   FROM s_emp

   ORDER BY ;

  这样就避免了再写一次很长的表达式

  另多列排序

  SQL> SELECT last name dept_id salary

   FROM s_emp

   ORDER BY dept_id salary DESC;

  八限制选取行

  SELECT expr

  FROM table

  [WHERE condition(s)]

  [ORDER BY expr];

  例

  SQL> SELECT first_name last_name start_date

   FROM s_emp

   WHERE start_date BETWEEN may

   AND jun;

  例

  SQL> SELECT last_name

   FROM s_emp

   WHERE last_name LIKE _a%;  //显示所有第二个字母为 a的last_name

  例

  如果有列为NULL

  SQL> SELECT id name credit_rating

   FROM s_customer

   WHERE sales_rep_id IS NULL;

  优先级

  Order        Evaluated Operator

     All comparison operators  (= <> > >= < <= IN LIKE IS NULL BETWEEN)

      AND

        OR

  

  总结我们今天主要学习了如何进行查询SELECT操作具体的组合查询与子查询将在以后的课堂中学习同时希望大家可以工作学习中多多摸索实践!

  课程 二 PL/SQL PL/SQL 查询行函数

  
本课重点
   掌握各种在PL/SQL中可用的ROW函数

  使用这些函数的基本概念

  SELECT语句中使用函数

  使用转换函数

  注意以下实例中标点均为英文半角

  一FUNCTION的作用

  进行数据计算修改独立的数据处理一组记录的输出不同日期显示格式进行数据类型转换

  函数分为单独函数(ROW)和分组函数

  注意可以嵌套可以在SELECT WHERE 和 ORDER BY中出现

  语法function_name (columnexpression [arg arg])

  二字符型函数

  LOWER 转小写

  UPPER

  INITCAP  首字母大写

  CONCAT  连接字符相当于

  SUBSTR  SUBSTR(columnexpressionm[n])

  LENGTH   返回字符串的长度

  NVL    转换空值

  其中经常用来排杂也就是排除插入值的大小写混用的干扰如

  SQL> SELECT first_name last_name

   FROM s_emp

   WHERE UPPER(last_name) = PATEL;

  FIRST_NAME LAST_NAME

  

  Vikram    Patel

  Radha     Patel

  三数学运算函数

  ROUND

  四舍五入ROUND()  =

  ROUND()  =

  ROUND()  =

  TRUNC

  截取函数

  TRUNC()=

  TRUNC()=

  TRUNC()=

  MOD  余除

  MOD()

  实例

  SQL> SELECT ROUND() ROUND()

   ROUND()

   FROM SYSDUAL;

  四ORACLE 日期格式和日期型函数

  默认格式为DDMONYY

  SYSDATE是一个求系统时间的函数

  DUAL[dju:el] 是一个伪表有人称之为空表但不确切

  SQL> SELECT SYSDATE

   FROM SYSDUAL;

  日期中应用的算术运算符

  例SQL> SELECT last_name (SYSDATEstart_date)/ WEEKS

   FROM s_emp

   WHERE dept_id = ;

  DATE+ NUMBER = DATE

  DATEDATE= NUMBER OF DAYS

  DATE + (NUMBER/) = 加小时

  函数

  MONTHS_BETWEEN(date date) 月份间隔可正可负也可是小数

  ADD_MONTHS(daten)  加上N个月这是一个整数但可以为负

  NEXT_DAY(datechar) 如NEXT_DAY (restock_dateFRIDAY)从此日起下个周五

  ROUND(date[fmt])

  TRUNC(date[fmt])

  解释下面的例子

  SQL> SELECT id start_date

   MONTHS_BETWEEN (SYSDATEstart_date) TENURE

   ADD_MONTHS(start_date) REVIEW

   FROM s_emp

   WHERE MONTHS_BETWEEN (SYSDATEstart_date)<;

  我们看到  MONTHS_BETWEEN (SYSDATEstart_date)<说明至今工作未满一年的员工

  LAST_DAY (restock_date) 返回本月的最后一天

  SQL> select round(sysdateMONTH) from dual

  ROUND(SYSD

  

  月

  round(sysdateYEAR) = 月    

  ROUND 之后的值比基值大的最小符合值大家可以用更改系统时间的方法测试以天为分界线也是非常形象的四舍五入而TRUNC恰好相反是对现有的日期的截取

  五转换函数

  TO_CHAR

  使一个数字或日期转换为CHAR

  TO_NUMBER

  把字符转换为NUMBER

  TO_DATE

  字符转换为日期

  这几个函数较为简单但要多多实践多看复杂的实例

  SQL> SELECT IDTO_CHAR(date_orderedMM/YY) ORDERED

   FROM s_ord

   WHERE sales_rep_id = ;

  转换时要注意正确的缺省格式

  SELECT TO_DATE(MAR) CORRECT FROM DUAL//正确

  SELECT TO_DATE() CORRECT FROM DUAL//不正确

  SELECT TO_DATE(MMDDYY) ERRORR FROM DUAL

  输出 月日

  SELECT TO_DATE(DDMMYY) ERRORR FROM DUAL

  输出 月日

  实例

  select to_char(sysdatefmDDSPTH of MONTH YYYY AM) TODAYS FROM DUAL;

  TODAYS

  

  SIXTEENTH of 月 下午

  大小写没有什么影响引号中间的是不参与运算

  实例

  SELECT ROUND(SALARY*) FROM ONE_TABLE

  意义涨%工资后去除小数位在现实操作中很有意义

  混合实例

  SQL> SELECT last_name TO_CHAR(start_date

   fmDD of Month YYYY) HIREDATE

   FROM s_emp

   WHERE start_date LIKE %;

  LAST_NAME HIREDATE

  

  Nagayama of June

  Urguhart of January

  Havel of February

  这里要注意fmDD 和 fmDDSPTH之间的区别

  SQL> SELECT id total date_ordered

   FROM s_ord

   WHERE date_ordered =

   TO_DATE(September Month dd YYYY);

  

  六独立的函数嵌套

  SQL> SELECT CONCAT(UPPER(last_name)

   SUBSTR(title)) Vice Presidents

   FROM s_emp

   WHERE title LIKE VP%;

  * 嵌套可以进行到任意深度从内向外计算

  例

  SQL> SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS

   (date_ordered)FRIDAY)

   fmDay Month ddth YYYY)

   New Month Review

   FROM s_ord

   ORDER BY date_ordered;

  

  SQL> SELECT last_name

   NVL(TO_CHAR(manager_id)No Manager)

   FROM s_emp

   WHERE manager_id IS NULL;

  对于例子大家重要的理解并多做测试并注意英文版和中文版在日期上的区别

  有些教材上的例子不要盲目的相信其结果实践后才有发言权希望大家能够在学习的过程中不要忽略了用

  多想一想为什么实例要如此设计在何种情况下应用此实例来解决问题这样我们才真正掌握了知识

  

  课程 三 从多个表中提取数据
                                                                     

  本课重点
SELECT FROM 多个表使用等连接或非等连接
使用外连接OUTER JOIN
使用自连接
注意以下实例中标点均为英文半角
一连接的概念

  是指一个从多个表中的数据进行的查询连接一般使用表的主键和外键
连接类型
等连接不等连接外连接自连接
二Cartesian product
指的是当JOIN条件被省略或无效时所有表的行(交叉)都被SELECT出来的现象
Cartesian product可以产生大量的记录除非是你有意如此否则应该加上某种条件限制
SQL> SELECT name last_name
FROM s_dept s_emp;
rows selected 其中一个表行一个表行

  三简单连接查询
SELECT lumn lumn
FROM table table
WHERE lumn = lumn;

  如SQL> SELECT s_emplast_name s_empdept_id
s_deptname
FROM s_emp s_dept
WHERE s_empdept_id = s_deptid;
注意表前缀的重要性
SQL> SELECT s_deptid Department ID
s_regionid Region ID
s_regionname Region Name
FROM s_dept s_region
WHERE s_deptregion_id = s_regionid;
在WHERE 段中如果没有前缀两个表中都有ID字段就显得的模棱两可AMBIGUOUS
这在实际中应该尽量避免
WHERE 字段中还可以有其他的连接条件如在上例中加上
INITCAP(s_deptlast_name) = Menchu;
再如WHERE s_empdept_id = s_deptid AND s_deptregion_id = s_regiomission_pct > ;

  四表别名ALIAS
使用别名进行多表查询
仅在这个查询中生效一旦用了表别名就不能再用表的原有的名字进行连接
实例
SQL> SELECT cname Customer Name
cregion_id Region ID
rname Region Name
FROM s_customer c s_region r
WHERE cregion_id = rid;
别名最多可以个字符但当然越少越好最好也能容易识别
五非等连接
非等连接一般用在没有明确的等量关系的两个表
最简单的说非等连接就是在连接中没有=出现的连接
SQL> SELECT eename ejob esal sgrade
FROM emp e salgrade s
WHERE esal BETWEEN slosal AND shisal;
说明Create a nonequijoin to evaluate an employees salary grade The salary 必须在另一个表中最高和最低之间
其他操作符<= >= 也可以实现但是BETWEEN是非常简单实用的
BETWEEN AND是指闭区间的这点要注意 请大家测试
六外连接
语法结构SELECT lumn lumn
FROM table table
WHERE tablelumn(+);
实例
SQL> SELECT elast_name eid cname
FROM s_emp e s_customer c
WHERE eid (+) = csales_rep_id
ORDER BY eid;
显示即使有的客户没有销售代表
* 可以理解为有+号的一边出现了NULL也可以做为合法的条件
外连接的限制
外连接符只能出现在信息缺少的那边
在条件中不能用 IN 或者 OR做连接符
七自连接
同一个表中使用连接符进行查询
FROM 的后面用同一个表的两个别名
实例
SQL> SELECT workerlast_name works for
managerlast_name
FROM s_emp worker s_emp manager
WHERE workermanager_id = managerid;
意味着一个员工的经理ID匹配了经理的员工号但这个像绕口令的连接方式并不常用
以后我们会见到一种 子查询
select last_name from s_emp where salary=(select max(salary) from s_emp)
也可以看作是一种变向的自连接但通常我们将其

  课程 四 组函数

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《PL/Sql循序渐进全面学习教程》技术文章,《PL/Sql循序渐进全面学习教程》详细使用和说明,有时《PL/Sql循序渐进全面学习教程》可能不完善、敬请谅解!如果《PL/Sql循序渐进全面学习教程》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
推荐内容
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片