Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669714
  • 博文数量: 134
  • 博客积分: 3158
  • 博客等级: 中校
  • 技术积分: 1617
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-30 22:36
文章分类

全部博文(134)

文章存档

2012年(2)

2011年(28)

2010年(68)

2009年(35)

2008年(1)

我的朋友

分类: Oracle

2011-04-14 15:55:09

SQL中的单记录函数
1.ASCII
返回与指定的字符对应的十进制数;
SQL> Select Ascii('A') A,Ascii('A') A,Ascii('0') Zero,Ascii(' ') Space From Dual;
A         A      ZERO     SPACE
--------- --------- --------- ---------
65        97        48        32

2.CHR
给出整数,返回对应的字符;
SQL> Select Chr(54740) Zhao,Chr(65) Chr65 From Dual;
ZH C
-- -
赵 A
3.CONCAT
连接两个字符串;
SQL> Select Concat('010-','88888888')||'转23'  高乾竞电话 From Dual;
高乾竞电话
----------------
010-88888888转23
4.INITCAP
返回字符串并将字符串的第一个字母变为大写;
SQL> Select Initcap('Smith') Upp From Dual;
UPP
-----
Smith

5.INSTR(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1    被搜索的字符串
C2    希望搜索的字符串
I     搜索的开始位置,默认为1
J     出现的位置,默认为1
SQL> Select Instr('Oracle Traning','Ra',1,2) Instring From Dual;
INSTRING
---------
9

6.LENGTH
返回字符串的长度;
SQL> Select Name,Length(Name),Addr,Length(Addr),Sal,Length(To_char(Sal)) From .Nchar_tst;
NAME   LENGTH(NAME) ADDR             LENGTH(ADDR)       SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾竞            3 北京市海锭区                6   9999.99                    7
 
7.LOWER
返回字符串,并将所有的字符小写
SQL> Select Lower('AaBbCcDd')AaBbCcDd From Dual;
AABBCCDD
--------
Aabbccdd

8.UPPER
返回字符串,并将所有的字符大写
SQL> Select Upper('AaBbCcDd') Upper From Dual;
UPPER
--------
AABBCCDD
 
9.RPAD和LPAD(粘贴字符)
RPAD  在列的右边粘贴字符
LPAD  在列的左边粘贴字符
SQL> Select Lpad(Rpad('Gao',10,'*'),17,'*')From Dual;
LPAD(RPAD('GAO',1
-----------------
*******Gao*******
不够字符则用*来填满

10.LTRIM和RTRIM
LTRIM  删除左边出现的字符串
RTRIM  删除右边出现的字符串
SQL> Select Ltrim(Rtrim('   Gao Qian Jing   ',' '),' ') From Dual;
LTRIM(RTRIM('
-------------
Gao Qian Jing

11.SUBSTR(String,Start,Count)
取子字符串,从Start开始,取Count个
SQL> Select Substr('13088888888',3,8) From Dual;
SUBSTR('
--------
08888888

12.REPLACE('String','S1','S2')
String   希望被替换的字符或变量
S1       被替换的字符串
S2       要替换的字符串
SQL> Select Replace('He Love You','He','I') From Dual;
REPLACE('HELOVEYOU','HE','I')
------------------------------
I Love You

13.SOUNDEX
返回一个与给定的字符串读音相同的字符串
SQL> Create Table Table1(Xm Varchar(8));
SQL> Insert Into Table1 Values('Weather');
SQL> Insert Into Table1 Values('Wether');
SQL> Insert Into Table1 Values('Gao');
SQL> Select Xm From Table1 Where Soundex(Xm)=Soundex('Weather');
XM
--------
Weather
Wether

14.TRIM('S' From 'String')
LEADING   剪掉前面的字符
TRAILING  剪掉后面的字符
如果不指定,默认为空格符
15.ABS
返回指定值的绝对值
SQL> Select Abs(100),Abs(-100) From Dual;
ABS(100) ABS(-100)
--------- ---------
100       100

16.ACOS
给出反余弦的值
SQL> Select Acos(-1) From Dual;
ACOS(-1)
---------
3.1415927

17.ASIN
给出反正弦的值
SQL> Select Asin(0.5) From Dual;
ASIN(0.5)
---------
.52359878

18.ATAN
返回一个数字的反正切值
SQL> Select Atan(1) From Dual;
ATAN(1)
---------
.78539816

19.CEIL
返回大于或等于给出数字的最小整数
SQL> Select Ceil(3.1415927) From Dual;
CEIL(3.1415927)
---------------
      4

20.COS
返回一个给定数字的余弦
SQL> Select Cos(-3.1415927) From Dual;
COS(-3.1415927)
---------------
     -1

21.COSH
返回一个数字反余弦值
SQL> Select Cosh(20) From Dual;
COSH(20)
---------
242582598

22.EXP
返回一个数字E的N次方根
SQL> Select Exp(2),Exp(1) From Dual;
EXP(2)    EXP(1)
--------- ---------
7.3890561 2.7182818

23.FLOOR
对给定的数字取整数
SQL> Select Floor(2345.67) From Dual;
FLOOR(2345.67)
--------------
  2345

24.LN
返回一个数字的对数值
SQL> Select Ln(1),Ln(2),Ln(2.7182818) From Dual;
LN(1)     LN(2) LN(2.7182818)
--------- --------- -------------
0 .69314718     .99999999

25.LOG(N1,N2)
返回一个以N1为底N2的对数
SQL> Select Log(2,1),Log(2,4) From Dual;
LOG(2,1)  LOG(2,4)
--------- ---------
0         2

26.MOD(N1,N2)
返回一个N1除以N2的余数
SQL> Select Mod(10,3),Mod(3,3),Mod(2,3) From Dual;
MOD(10,3)  MOD(3,3)  MOD(2,3)
--------- --------- ---------
1         0         2

27.POWER
返回N1的N2次方根
SQL> Select Power(2,10),Power(3,3) From Dual;
POWER(2,10) POWER(3,3)
----------- ----------
1024         27

28.ROUND和TRUNC
按照指定的精度进行舍入
SQL> Select Round(55.5),Round(-55.4),Trunc(55.5),Trunc(-55.5) From Dual;
ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
 56          -55          55          -55

29.SIGN
取数字N的符号,大于0返回1,小于0返回-1,等于0返回0
SQL> Select Sign(123),Sign(-100),Sign(0) From Dual;
SIGN(123) SIGN(-100)   SIGN(0)
--------- ---------- ---------
1         -1         0

30.SIN
返回一个数字的正弦值
SQL> Select Sin(1.57079) From Dual;
SIN(1.57079)
------------
   1

31.SIGH
返回双曲正弦的值
SQL> Select Sin(20),Sinh(20) From Dual;
SIN(20)  SINH(20)
--------- ---------
.91294525 242582598

32.SQRT
返回数字N的根
SQL> Select Sqrt(64),Sqrt(10) From Dual;
SQRT(64)  SQRT(10)
--------- ---------
8 3.1622777

33.TAN
返回数字的正切值
SQL> Select Tan(20),Tan(10) From Dual;
TAN(20)   TAN(10)
--------- ---------
2.2371609 .64836083

34.TANH
返回数字N的双曲正切值
SQL> Select Tanh(20),Tan(20) From Dual;
TANH(20)   TAN(20)
--------- ---------
1 2.2371609
 
35.TRUNC
按照指定的精度截取一个数
SQL> Select Trunc(124.1666,-2) Trunc1,Trunc(124.16666,2) From Dual;
TRUNC1 TRUNC(124.16666,2)
--------- ------------------
100             124.16
 
36.ADD_MONTHS
增加或减去月份
SQL> Select To_char(Add_months(To_date('199912','Yyyymm'),2),'Yyyymm') From Dual;
TO_CHA
------
200002
SQL> Select To_char(Add_months(To_date('199912','Yyyymm'),-2),'Yyyymm') From Dual;
TO_CHA
------
199910

37.LAST_DAY
返回日期的最后一天
SQL> Select To_char(Sysdate,'Yyyy.Mm.Dd'),To_char((Sysdate)+1,'Yyyy.Mm.Dd') From Dual;
TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> Select Last_day(Sysdate) From Dual;
LAST_DAY(S
----------
31-5月 -04

38.MONTHS_BETWEEN(Date2,Date1)
给出Date2-Date1的月份
SQL> Select Months_between('19-12月-1999','19-3月-1999') Mon_between From Dual;
MON_BETWEEN
-----------
  9
SQL>Selectmonths_between(To_date('2000.05.20','Yyyy.Mm.Dd'),To_date('2005.05.20','Yyyy.Dd')) Mon_betw From Dual;
MON_BETW
---------
-60

39.NEW_TIME(Date,'This','That')
给出在This时区=Other时区的日期和时间
SQL> Select To_char(Sysdate,'Yyyy.Mm.Dd Hh24:Mi:ss') Bj_time,To_char(New_time
2  (Sysdate,'PDT','GMT'),'Yyyy.Mm.Dd Hh24:Mi:ss') Los_angles From Dual;
BJ_TIME             LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32

40.NEXT_DAY(Date,'Day')
给出日期Date和星期X之后计算下一个星期的日期
SQL> Select Next_day('18-5月-2001','星期五') Next_day From Dual;
NEXT_DAY
----------
25-5月 -01
 
41.SYSDATE
用来得到系统的当前日期
SQL> Select To_char(Sysdate,'Dd-Mm-Yyyy Day') From Dual;
TO_CHAR(SYSDATE,'
-----------------
09-05-2004 星期日
Trunc(Date,Fmt)按照给出的要求将日期截断,如果Fmt='Mi'表示保留分,截断秒
SQL> Select To_char(Trunc(Sysdate,'Hh'),'Yyyy.Mm.Dd Hh24:Mi:ss') Hh,
  2  To_char(Trunc(Sysdate,'Mi'),'Yyyy.Mm.Dd Hh24:Mi:ss') Hhmm From Dual;
HH                  HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00
 
42.CHARTOROWID
将字符数据类型转换为ROWID类型
SQL> Select Rowid,Rowidtochar(Rowid),Ename From Scott.Emp;
ROWID              ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES

43.CONVERT(C,Dset,Sset)
将源字符串 Sset从一个语言字符集转换到另一个目的Dset字符集
SQL> Select Convert('Strutz','We8hp','F7dec') "Conversion" From Dual;
Conver
------
Strutz

44.HEXTORAW
将一个十六进制构成的字符串转换为二进制

45.RAWTOHEXT
将一个二进制构成的字符串转换为十六进制
 
46.ROWIDTOCHAR
将ROWID数据类型转换为字符类型
 
47.TO_CHAR(Date,'Format')
SQL> Select To_char(Sysdate,'Yyyy/Mm/Dd Hh24:Mi:ss') From Dual;
TO_CHAR(SYSDATE,'YY
-------------------
2004/05/09 21:14:41
 
48.TO_DATE(String,'Format')
将字符串转化为ORACLE中的一个日期

49.TO_MULTI_BYTE
将字符串中的单字节字符转化为多字节字符
SQL>  Select To_multi_byte('高') From Dual;
TO
--

50.TO_NUMBER
将给出的字符转换为数字
SQL> Select To_number('1999') Year From Dual;
     YEAR
---------
     1999

51.BFILENAME(Dir,File)
指定一个外部二进制文件
SQL>Insert Into File_tb1 Values(Bfilename('Lob_dir1','Image1.Gif'));

52.CONVERT('X','Desc','Source')
将X字段或变量的源Source转换为Desc
SQL> Select Sid,Serial#,Username,Decode(Command,
  2  0,'None',
  3  2,'Insert',
  4  3,
  5  'Select',
  6  6,'Update',
  7  7,'Delete',
  8  8,'Drop',
  9  'Other') Cmd  From V$Session Where Type!='Background';
      SID   SERIAL# USERNAME                       CMD
--------- --------- ------------------------------ ------
        1         1                                None
        2         1                                None
        3         1                                None
        4         1                                None
        5         1                                None
        6         1                                None
        7      1275                                None
        8      1275                                None
        9        20 GAO                            Select
       10        40 GAO                            None

53.DUMP(S,Fmt,Start,Length)
DUMP函数以Fmt指定的内部数字格式返回一个VARCHAR2类型的值
SQL> Col Global_name For A30
SQL> Col Dump_string For A50
SQL> Set Lin 200
SQL> Select Global_name,Dump(Global_name,1017,8,5) Dump_string From Global_name;
GLOBAL_NAME                    DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD                   Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D

54.EMPTY_BLOB()和EMPTY_CLOB()
这两个函数都是用来对大数据类型字段进行初始化操作的函数

55.GREATEST
返回一组表达式中的最大值,即比较字符的编码大小.
SQL> Select Greatest('AA','AB','AC') From Dual;
GR
--
AC
SQL> Select Greatest('啊','安','天') From Dual;
GR
--

56.LEAST
返回一组表达式中的最小值
SQL> Select Least('啊','安','天') From Dual;
LE
--

57.UID
返回标识当前用户的唯一整数
SQL> Show User
USER 为"GAO"
SQL> Select Username,User_id From Dba_users Where User_id=Uid;
USERNAME                         USER_ID
------------------------------ ---------
GAO                                   25
 
58.USER
返回当前用户的名字
SQL> Select User From  Dual;
USER
------------------------------
GAO

59.USEREVN
返回当前用户环境的信息,Opt可以是:
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA  查看当前用户是否是DBA如果是则返回True
SQL> Select Userenv('Isdba') From Dual;
USEREN
------
FALSE
SQL> Select Userenv('Isdba') From Dual;
USEREN
------
TRUE
SESSION
返回会话标志
SQL> Select Userenv('Sessionid') From Dual;
USERENV('SESSIONID')
--------------------
                 152
ENTRYID
返回会话人口标志
SQL> Select Userenv('Entryid') From Dual;
USERENV('ENTRYID')
------------------
                 0
INSTANCE
返回当前INSTANCE的标志
SQL> Select Userenv('Instance') From Dual;
USERENV('INSTANCE')
-------------------
                  1
LANGUAGE
返回当前环境变量
SQL> Select Userenv('Language') From Dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG
返回当前环境的语言的缩写
SQL> Select Userenv('Lang') From Dual;
USERENV('LANG')
----------------------------------------------------
ZHS
TERMINAL
返回用户的终端或机器的标志
SQL> Select Userenv('Terminal') From Dual;
USERENV('TERMINA
----------------
GAO
VSIZE(X)
返回X的大小(字节)数
SQL> Select Vsize(User),User From Dual;
VSIZE(USER) USER
----------- ------------------------------
          6 SYSTEM
 
60.AVG(DISTINCT|ALL)
All表示对所有的值求平均值,Distinct只对不同的值求平均值
SQLWKS> Create Table Table3(Xm Varchar(8),Sal Number(7,2));
语句已处理。
SQLWKS>  Insert Into Table3 Values('Gao',1111.11);
SQLWKS>  Insert Into Table3 Values('Gao',1111.11);
SQLWKS>  Insert Into Table3 Values('Zhu',5555.55);
SQLWKS> Commit;
SQL> Select Avg(Distinct Sal) From Gao.Table3;
AVG(DISTINCTSAL)
----------------
         3333.33
SQL> Select Avg(All Sal) From Gao.Table3;
AVG(ALLSAL)
-----------
    2592.59
 
61.MAX(DISTINCT|ALL)
求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次
SQL> Select Max(Distinct Sal) From Scott.Emp;
MAX(DISTINCTSAL)
----------------
            5000

62.MIN(DISTINCT|ALL)
求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次
SQL> Select Min(All Sal) From Gao.Table3;
MIN(ALLSAL)
-----------
    1111.11

63.STDDEV(Distinct|All)
求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差
SQL> Select Stddev(Sal) From Scott.Emp;
STDDEV(SAL)
-----------
  1182.5032
SQL> Select Stddev(Distinct Sal) From Scott.Emp;
STDDEV(DISTINCTSAL)
-------------------
           1229.951
 
64.VARIANCE(DISTINCT|ALL)
求协方差
SQL> Select Variance(Sal) From Scott.Emp;
VARIANCE(SAL)
-------------
    1398313.9

65.GROUP BY
主要用来对一组数进行统计
SQL> Select Deptno,Count(*),Sum(Sal) From Scott.Emp Group By Deptno;
   DEPTNO  COUNT(*)  SUM(SAL)
--------- --------- ---------
       10         3      8750
       20         5     10875
       30         6      9400
 
66.HAVING
对分组统计再加限制条件
SQL> Select Deptno,Count(*),Sum(Sal) From Scott.Emp Group By Deptno Having Nt(*)>=5;
   DEPTNO  COUNT(*)  SUM(SAL)
--------- --------- ---------
       20         5     10875
       30         6      9400
SQL> Select Deptno,Count(*),Sum(Sal) From Scott.Emp Having Count(*)>=5 Group By Tno ;
   DEPTNO  COUNT(*)  SUM(SAL)
--------- --------- ---------
       20         5     10875
       30         6      9400

67.ORDER BY
用于对查询到的结果进行排序输出
SQL> Select Deptno,Ename,Sal From Scott.Emp Order By Deptno,Sal Desc;
   DEPTNO ENAME            SAL
--------- ---------- ---------
       10 KING            5000
       10 CLARK           2450
       10 MILLER          1300
       20 SCOTT           3000
       20 FORD            3000
       20 JONES           2975
       20 ADAMS           1100
       20 SMITH            800
       30 BLAKE           2850
       30 ALLEN           1600
       30 TURNER          1500
       30 WARD            1250
       30 MARTIN          1250
       30 JAMES            950

------------------------------------------------------------------------------
  数据库对象包括表、视图、索引、同义词、簇、触发器、函数、过程、包、数据库链、快照等(表空间、回滚段、角色、用户)。数据库通过对表的操作来管理存储在其中的数据。
  
  SQL*PLUS界面:
  登录:输入SQLPLUS回车;输入正确的ORACLE用户名并回车;输入用户口令并回车,显示提示符:SQL>
  退出:输入EXIT即可。
  2)命令的编辑与运行:
  在命令提示符后输入SQL命令并运行,以分号结束输入;以斜杠结束输入;以空行结束输入;
  利用SQL缓冲区进行PL/SQL块的编辑和运行;
  利用命令文件进行PL/SQL块的编辑和运行。
  
  数据库查询
  用SELECT语句从表中提取查询数据。语法为
  SELECT [DISTINCT] {column1,column2,…} FROM tablename WHERE {conditions} GROUP BY {conditions} ORDER BY {expressions} [ASC/DESC];
  说明:SELECT子句用于指定检索数据库的中哪些列,FROM子句用于指定从哪一个表或视图中检索数据。
  SELECT中的操作符及多表查询WHERE子句。(LIKE,IS,…)
  WHERE子句中的条件可以是一个包含等号或不等号的条件表达式,也可以是一个含有IN、NOT IN、BETWEEN、LIKE、IS NOT NULL等比较运算符的条件式,还可以是由单一的条件表达通过逻辑运算符组合成复合条件。
  ORDER BY 子句
  ORDER BY 子句使得SQL在显示查询结果时将各返回行按顺序排列,返回行的排列顺序由ORDER BY 子句指定的表达式的值确定。
  连接查询
  利用SELECT语句进行数据库查询时,可以把多个表、视图的数据结合起来,使得查询结果的每一行中包含来自多个表达式或视图的数据,这种操作被称为连接查询。
  连接查询的方法是在SELECT命令的FROM子句中指定两个或多个将被连接查询的表或视图,并且在WHERE子句告诉ORACLE如何把多个表的数据进行合并。根据WHERE子句中的条件表达式是等还是不等式,可以把连接查询分为等式连接和不等式连接。
  子查询
  如果某一个SELECT命令(查询1)出现在另一个SQL命令(查询2)的一个子句中,则称查询1是查询2的子查询。
  
  基本数据类型(NUMBER,VARCHAR2,DATE) O
  RACEL支持下列内部数据类型:
  VARCHAR2 变长字符串,最长为2000字符。
  NUMBER 数值型。
  LONG 变长字符数据,最长为2G字节。
  DATE 日期型。
  RAW 二进制数据,最长为255字节。
  LONG RAW 变长二进制数据,最长为2G字节。
  ROWID 二六进制串,表示表的行的唯一地址。
  CHAR 定长字符数据,最长为255。
  
  常用函数用法:
  一个函数类似于一个算符,它操作数据项,返回一个结果。函数在格式上不同于算符,它个具有变元,可操作0个、一个、二个或多个变元,形式为:
  函数名(变元,变元,…)
  函数具有下列一般类形:
  单行函数
  分组函数
  单行函数对查询的表或视图的每一行返回一个结果行。它有数值函数,字符函数,日期函数,转换函数等。
  分组函数返回的结果是基于行组而不是单行,所以分组函数不同于单行函数。在许多分组函数中可有下列选项:
  DISTRNCT 该选项使分组函数只考虑变元表达式中的不同值。
  ALL该选项使分组函数考虑全部值,包含全部重复。
  全部分组函数(除COUNT(*)外)忽略空值。如果具有分组函数的查询,没有返回行或只有空值(分组函数的变元取值的行),则分组函数返回空值。
  
  
  5、数据操纵语言命令:
  数据库操纵语言(DML)命令用于查询和操纵模式对象中的数据,它不隐式地提交当前事务。它包含UPDATE、INSERT、DELETE、EXPLAIN PLAN、SELECT和LOCK TABLE 等命令。下面简单介绍一下:
  1) UPDATE tablename SET {column1=expression1,column2=expression2,…} WHERE {conditions};
  例如:S QL>UPDATE EMP
  SET JOB =’MANAGER’
  WHERE ENAME=’MAPTIN’;
  SQL >SELECT * FROM EMP;
  UPDATE子句指明了要修改的数据库是EMP,并用WHERE子句限制了只对名字(ENAME)为’MARTIN’的职工的数据进行修改,SET子句则说明修改的方式,即把’MARTION’的工作名称(JOB)改为’MARAGER’.
  
  2) INSERT INTO tablename {column1,column2,…} VALUES {expression1,expression2,…};
  例如:SQL>SELECT INTO DEPT(DNAME, DEPTNO)
  VALUES (‘ACCOUNTING’,10)
  
  3) DELETE FROM tablename WHERE {conditions};
  例如:SQL>DELETE FROM EMP
  WHERE EMPNO = 7654;
  DELETE命令删除一条记录,而且DELETE命令只能删除整行,而不能删除某行中的部分数据.
  
  
  4)事务控制命令
  提交命令(COMMIT):可以使数据库的修改永久化.设置AUTOCOMMIT为允许状态:SQL >SET AUTOCOMMIT ON;
  回滚命令(ROLLBACK):消除上一个COMMIT命令后的所做的全部修改,使得数据库的内容恢复到上一个COMMIT执行后的状态.使用方法是:
  SQL>ROLLBACK;
  
  创建表、视图、索引、同义词、用户。
  、表是存储用户数据的基本结构。
  建立表主要指定义下列信息:
  列定义
  完整性约束
  表所在表空间
  存储特性
  可选择的聚集
  从一查询获得数据
  语法如下:CREATE TABLE tablename
  (column1 datatype [DEFAULT expression] [constraint],
  column1 datatype [DEFAULT expression] [constraint],
  ……)
  [STORAGE子句]
  [其他子句…];
  例如:
  SQL>CREATE TABLE NEW_DEPT
  (DPTNO NUMBER(2),
 DNAME CHAR(6),
  LOC CHAR(13);
  更改表作用:
  增加列
  增加完整性约束
  重新定义列(数据类型、长度、缺省值)
  修改存储参数或其它参数
  使能、使不能或删除一完整性约束或触发器
  显式地分配一个范围
  2)、视图
  视图是一个逻辑表,它允许操作者从其它表或视图存取数据,视图本身不包含数据。视图所基于的表称为基表。
  引入视图有下列作用:
  提供附加的表安全级,限制存取基表的行或/和列集合。
  隐藏数据复杂性。
  为数据提供另一种观点。
  促使ORACLE的某些操作在包含视图的数据库上执行,而不在另一个数据库上执行。
  
  
  3)、索引
  索引是种数据库对象。对于在表或聚集的索引列上的每一值将包含一项,为行提供直接的快速存取。在下列情况ORACLE可利用索引改进性能:
  按指定的索引列的值查找行。
  按索引列的顺序存取表。
  建立索引: CREATE [UNIQUE] INDEX indexname ON tablename(column ,。。。);
  例如:SQL>CREAT INDEX IC_EMP
  ON CLUSTER EMPLOYEE
  
  4)、同义词
  同义词:为表、视图、序列、存储函数、包、快照或其它同义词的另一个名字。使用同义词为了安全和方便。对一对象建立同义词可有下列好处:
  引用对象不需指出对象的持有者。
  引用对象不需指出它所位于的数据库。
  为对象提供另一个名字。
  建立同义词:
  CREATE SYNONYM symnon_name FOR [username.]tablename;
  例如:CREAT PUBLIC SYNONYM EMP
  FOR SCOTT.EMP @SALES
  
  5)、用户
  CREATE USER username IDENTIFIED BY password;
  例如:SQL>CREATE USER SIDNEY
  IDENTIFIED BY CARTON ;
  Oracle扩展PL/SQL简介
  PL/SQL概述。
  PL/SQL是Oracle对SQL规范的扩展,是一种块结构语言,即构成一个PL/SQL程序的基本单位(过程、函数和无名块)是逻辑块,可包含任何数目的嵌套了快。这种程序结构支持逐步求精方法解决问题。一个块(或子块)将逻辑上相关的说明和语句组合在一起,其形式为:
  DECLARE
  ---说明
  BEGIN
  ---语句序列
  EXCEPTION
  ---例外处理程序
  END;
  它有以下优点:
  支持SQL;
  生产率高;
  性能好;
  可称植性;
  与ORACLE集成.
  
  PL/SQL体系结构
  PL/SQL运行系统是种技术,不是一种独立产品,可认为这种技术是PL/SQL块和子程序的一种机,它可接收任何有效的PL/SQL块或子程序。如图所示:
  
  
  
  
  
  
  
  PL/SQL机可执行过程性语句,而将SQL语句发送到ORACLE服务器上的SQL语句执行器。在ORACLE预编译程序或OCI程序中可嵌入无名的PL/SQL块。如果ORACLE具有PROCEDURAL选件,有名的PL/SQL块(子程序)可单独编译,永久地存储在数据库中,准备执行。
  
  
  PL/SQL基础:
  PL/SQL有一字符集、保留字、标点、数据类型、严密语法等,它与SQL有相同表示,现重点介绍。
  1)、数据类型:如下表所示
  数据类型子类型
  纯量类型数值 BINARY_INTEGER NATURAL,POSITIVE
  NUMBER DEC,DECIMAL,DOUBLE PRECISION,PLOAT,INTEGER,INT,NUMERIC,REAL,SMALLINT
  字符 CHAR CHARACTER,STRING
  VARCHAR2 VARCHAR
  LONG
  LONG RAW
  RAW
  RAWID
  逻辑 BOOLEAN
  日期 DATE
  组合类型记录 RECORD
  表 TABLE
  
  2)、变量和常量
  在PL/SQL程序中可将值存储在变量和常量中,当程序执行时,变量的值可以改变,而常量的值不能改变。
  
  3)、程序块式结构:
  DECLARE
  变量说明部分;
  BEGIN
  执行语句部分;
  [EXCEPTION
  例外处理部分;]
  END;
  
  控制语句:
  分支语句:
  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;
  
  
  循环语句:
  LOOP
  Sequence_of_statements;
  IF condition THEN
  EXIT;
  END IF;
  END LOOP;
  WHILE condition LOOP
  Sequence_of_statements;
  END LOOP;
  
  FOR counter IN lower_bound..higher_bound LOOP
  Sequence_of_statements;
  END LOOP;
  
  子程序:
  存储过程:
  CREATE PROCEDURE 过程名 (参数说明1,参数说明2,。。。) IS
  [局部说明]
  BEGIN
  执行语句;
  END 过程名;
  
  存储函数:
  CREATE FUNCTION 函数名 (参数说明1,参数说明2,。。。)
  RETURN 类型 IS
  [局部说明]
  BEGIN
  执行语句;
  END 函数名;
--------------------------------------------------
语 句 功 能
  --数据操作
  SELECT --从数据库表中检索数据行和列
  INSERT --向数据库表添加新数据行
  DELETE --从数据库表中删除数据行
  UPDATE --更新数据库表中的数据
--数据定义
  CREATE TABLE --创建一个数据库表
  DROP TABLE --从数据库中删除表
  ALTER TABLE --修改数据库表结构
  CREATE VIEW --创建一个视图
  DROP VIEW --从数据库中删除视图
  CREATE INDEX --为数据库表创建一个索引
  DROP INDEX --从数据库中删除索引
  CREATE PROCEDURE --创建一个存储过程
  DROP PROCEDURE --从数据库中删除存储过程
  CREATE TRIGGER --创建一个触发器
  DROP TRIGGER --从数据库中删除触发器
  CREATE SCHEMA --向数据库添加一个新模式
  DROP SCHEMA --从数据库中删除一个模式
  CREATE DOMAIN --创建一个数据值域
  ALTER DOMAIN --改变域定义
  DROP DOMAIN --从数据库中删除一个域
--数据控制
  GRANT --授予用户访问权限
  DENY --拒绝用户访问
  REVOKE --解除用户访问权限
  --事务控制
  COMMIT --结束当前事务
  ROLLBACK --中止当前事务
  SET TRANSACTION --定义当前事务数据访问特征
  --程序化SQL
  DECLARE --为查询设定游标
  EXPLAN --为查询描述数据访问计划
  OPEN --检索查询结果打开一个游标
  FETCH --检索一行查询结果
  CLOSE --关闭游标
  PREPARE --为动态执行准备SQL 语句
  EXECUTE --动态地执行SQL 语句
  DESCRIBE --描述准备好的查询
  ---局部变量
  declare @id char(10)
  --set @id = '10010001'
  select @id = '10010001'
---全局变量
  ---必须以@@开头
  --IF ELSE  
declare @x int @y int @z int
  select @x = 1 @y = 2 @z=3
  if @x > @y
  print 'x > y' --打印字符串'x > y'
  else if @y > @z
  print 'y > z'
  else print 'z > y'
  --CASE  
use pangu
  update employee
  set e_wage =
  case
  when job_level = ’1’ then e_wage*1.08
  when job_level = ’2’ then e_wage*1.07
  when job_level = ’3’ then e_wage*1.06
  else e_wage*1.05
  end
  --WHILE CONTINUE BREAK  
declare @x int @y int @c int
  select @x = 1 @y=1
  while @x < 3
  begin
  print @x --打印变量x 的值
  while @y < 3
  begin
  select @c = + @y
  print @c --打印变量c 的值
  select @y = @y + 1
  end
  select @x = @x + 1
  select @y = 1
  end
--WAITFOR
  --例 等待1 小时2 分零3 秒后才执行SELECT 语句 
waitfor delay ’01:02:03’
  select * from employee
  --例 等到晚上11 点零8 分后才执行SELECT 语句  
waitfor time ’23:08:00’
  select * from employee
  ***SELECT*** 
select *(列名) from table_name(表名) where column_name operator value
  ex:(宿主)
  select * from stock_information where stockid = str(nid)
  stockname = 'str_name'
  stockname like '% find this %'
  stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
  stockname like '[^F-M]%' --------- (^排除指定范围)
  --------- 只能在使用like关键字的where子句中使用通配符)
  or stockpath = 'stock_path'
  or stocknumber < 1000
  and stockindex = 24
  not stock*** = 'man'
  stocknumber between 20 and 100
  stocknumber in(10,20,30)
  order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
  order by 1,2 --------- by列号
  stockname = (select stockname from stock_information where stockid = 4)
  --------- 子查询
  --------- 除非能确保内层select只返回一个行的值,
  --------- 否则应在外层where子句中用一个in限定符 
select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复
  select stocknumber ,stocknumber + 10 = stocknumber + 10 from table_name
  select stockname , stocknumber = count(*) from table_name group by stockname
  --------- group by 将表按行分组,指定列中有相同的值  
having count(*) = 2 --------- having选定指定的组
  select *
  from table1, table2
  where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
  table1.id =* table2.id -------- 右外部连接
  select stockname from table1
  union [all] ----- union合并查询结果集,all-保留重复行
  select stockname from table2
 
***insert***  
insert into table_name (Stock_name,Stock_number) value (xxx,xxxx)
  value (select Stockname , Stocknumber from Stock_table2)---value为select语句
  ***update***  
update table_name set Stockname = xxx [where Stockid = 3]
  Stockname = default
  Stockname = null
  Stocknumber = Stockname + 4
  ***delete***  
delete from table_name where Stockid = 3
  truncate table_name ----------- 删除表中所有行,仍保持表的完整性
  drop table table_name --------------- 完全删除表
  ***alter table*** --- 修改数据库表结构  
alter table database.owner.table_name add column_name char(2) null .....
  sp_help table_name ---- 显示表已有特征
  create table table_name (name char(20), age smallint, lname varchar(30))
  insert into table_name select ......... ----- 实现删除列的方法(创建新表)
  alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束
  ***function(/*常用函数*/)***
  ----统计函数----
  ***G --求平均值
  COUNT --统计数目
  MAX --求最大值
  MIN --求最小值
  SUM --求和
  --***G 
use pangu
  select avg(e_wage) as dept_avgWage
  from employee
  group by dept_id
 --MAX
  --求工资最高的员工姓名
use pangu
  select e_name
  from employee
  where e_wage =
  (select max(e_wage)
  from employee)
  --STDEV()
  --STDEV()函数返回表达式中所有数据的标准差
  --STDEVP()
  --STDEVP()函数返回总体标准差
  --VAR()
  --VAR()函数返回表达式中所有值的统计变异数
  --VARP()
  --VARP()函数返回总体变异数
  ----算术函数----
  /***三角函数***/
  SIN(float_expression) --返回以弧度表示的角的正弦
  COS(float_expression) --返回以弧度表示的角的余弦
  TAN(float_expression) --返回以弧度表示的角的正切
  COT(float_expression) --返回以弧度表示的角的余切
/***反三角函数***/
  ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
  ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
  ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
  ATAN2(float_expression1,float_expression2)
  --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
  DEGREES(numeric_expression)
  --把弧度转换为角度返回与表达式相同的数据类型可为
  --INTEGER/MONEY/REAL/FLOAT 类型
  RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
  --INTEGER/MONEY/REAL/FLOAT 类型
  EXP(float_expression) --返回表达式的指数值
  LOG(float_expression) --返回表达式的自然对数值
  LOG10(float_expression)--返回表达式的以10 为底的对数值
  SQRT(float_expression) --返回表达式的平方根
  /***取近似值函数***/
  CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为
  --INTEGER/MONEY/REAL/FLOAT 类型
  FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为
  --INTEGER/MONEY/REAL/FLOAT 类型
  ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据
  --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
  ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为
  --INTEGER/MONEY/REAL/FLOAT 类型
  SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
  --与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
  PI() --返回值为π 即3.1415926535897936
  RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数
----字符串函数----
  ASCII() --函数返回字符表达式最左端字符的ASCII 码值
  CHAR() --函数用于将ASCII 码转换为字符
  --如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值
  LOWER() --函数把字符串全部转换为小写
  UPPER() --函数把字符串全部转换为大写
  STR() --函数把数值型数据转换为字符型数据
  LTRIM() --函数把字符串头部的空格去掉
  RTRIM() --函数把字符串尾部的空格去掉
  LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串
  CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置
  SOUNDEX() --函数返回一个四位字符码
  --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值
  DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异
  --0 两个SOUNDEX 函数返回值的第一个字符不同
  --1 两个SOUNDEX 函数返回值的第一个字符相同
  --2 两个SOUNDEX 函数返回值的第一二个字符相同
  --3 两个SOUNDEX 函数返回值的第一二三个字符相同
  --4 两个SOUNDEX 函数返回值完全相同
QUOTENAME() --函数返回被特定字符括起来的字符串 
select quotename('abc', '{') quotename('abc')
  运行结果如下
  ----------------------------------{
  {abc} [abc]*/
  REPLICATE() --函数返回一个重复character_expression 指定次数的字符串
  以下是引用片段: 
select replicate('abc', 3) replicate( 'abc', -2)
  运行结果如下
  ----------- -----------
  abcabcabc NULL*/
  REVERSE() --函数将指定的字符串的字符排列顺序颠倒
  REPLACE() --函数返回被替换了指定子串的字符串
  /*select replace('abc123g', '123', 'def')
  运行结果如下
  ----------- -----------
  abcdefg*/
  SPACE() --函数返回一个有指定长度的空白字符串
  STUFF() --函数用另一子串替换字符串指定位置长度的子串
----数据类型转换函数----
  CAST() 函数语法如下 
CAST() ( AS [ length ])
  CONVERT() 函数语法如下 
CONVERT() ([ length ], [, style])
 
select cast(100+99 as char) convert(varchar(12), getdate())
  运行结果如下
  ------------------------------ ------------
  199 Jan 15 2000
  ----日期函数----
  DAY() --函数返回date_expression 中的日期值
  MONTH() --函数返回date_expression 中的月份值
  YEAR() --函数返回date_expression 中的年份值
  DATEADD( , ,)
  --函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
  DATEDIFF( , ,)
  --函数返回两个指定日期在datepart 方面的不同之处
  DATENAME( , ) --函数以字符串的形式返回日期的指定部分
  DATEPART( , ) --函数以整数值的形式返回日期的指定部分
  GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间
 ----系统函数----
  APP_NAME() --函数返回当前执行的应用程序的名称
  COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值
  COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值
  COL_NAME(, ) --函数返回表中指定字段的名称即列名
  DATALENGTH() --函数返回数据表达式的数据的实际长度
  DB_ID(['database_name']) --函数返回数据库的编号
  DB_NAME(database_id) --函数返回数据库的名称
  HOST_ID() --函数返回服务器端计算机的名称
  HOST_NAME() --函数返回服务器端计算机的名称
  IDENTITY([, seed increment]) [AS column_name])
  --IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中 
/*select identity(int, 1, 1) as column_name
  into newtable
  from oldtable*/
  ISDATE() --函数判断所给定的表达式是否为合理日期
  ISNULL(, ) --函数将表达式中的NULL 值用指定值替换
  ISNUMERIC() --函数判断所给定的表达式是否为合理的数值
  NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值
  NULLIF(, )
  --NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值
sql中的保留字
  action add aggregate all
  alter after and as
  asc avg avg_row_length auto_increment
  between bigint bit binary
  blob bool both by
  cascade case char character
  change check checksum column
  columns comment constraint create
  cross current_date current_time current_timestamp
  data database databases date
  datetime day day_hour day_minute
  day_second dayofmonth dayofweek dayofyear
  dec decimal default delayed
  delay_key_write delete desc describe
  distinct distinctrow double drop
  end else escape escaped
  enclosed enum explain exists
  fields file first float
  float4 float8 flush foreign
  from for full function
  global grant grants group
  having heap high_priority hour
  hour_minute hour_second hosts identified
  ignore in index infile
  inner insert insert_id int
  integer interval int1 int2
  int3 int4 int8 into
  if is isam join
  key keys kill last_insert_id
  leading left length like
  lines limit load local
  lock logs long longblob
  longtext low_priority max max_rows
  match mediumblob mediumtext mediumint
  middleint min_rows minute minute_second
  modify month monthname myisam
 natural numeric no not
  null on optimize option
  optionally or order outer
  outfile pack_keys partial password
  precision primary procedure process
  processlist privileges read real
  references reload regexp rename
  replace restrict returns revoke
  rlike row rows second
  select set show shutdown
  smallint soname sql_big_tables sql_big_selects
  sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
  sql_small_result sql_big_result sql_warnings straight_join
  starting status string table
  tables temporary terminated text
  then time timestamp tinyblob
  tinytext tinyint trailing to
  type use using unique
  unlock unsigned update usage
  values varchar variables varying
  varbinary with write when
  where year year_month zerofill
阅读(2196) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~