Oracle SQL

 基于Oracle的SQL语法:

1、create语句:
create table tablename
(  column1  datatype [constraint],
   column2  datatype [constraint],
               .
               .
               .
   columnn  datatype [constraint]
);
常用的数据类型:char(size),varchar(size),number(size),date.
如:create table customer (
    last_name varchar2(30) not null,
    state_cd  varchar(2),
    sales     number);

 

customer:
Teplow                                                       MA     23445.67
Abbev                                                        GA      6969.96
Alloex                                                       MA      9898.78
Nicholson                                                    CA      6868.99
Martin                                                       CA      2345.45
Laursen                                                      CA        34.34
Bambi                                                        CA      1234.55
McGraw                                                       NJ       123.89

 


2、describe语句:
用法: DESCRIBE [schema.]object[@db_link];
如:describe customer;

3、Insert语句:
insert into tablename values(column1,column2,column3);
如:insert into customer values('Abbev','GA',6969.96);
insert into tablename (column1_name,column3_name) values(column1,column3);
如:insert into customer (last_name,sales) values ('Alloex',9898.78);

4、update语句:
update tablename1[,tablname2..]
set column1=新值[,column2=新值,column3=新值,..]
[where <条件表达式>];


5、delete语句:
delete命令用来从表中删除一行或多行数据。
delete from tablename
[where <条件表达式>];

6、alter语句:
在创建表后,用户可能想要增加表列时用到alter table 命令。在多数情况下,用户都

是用alter增加表列到表中的。
例如:
如果表customer要增加表列sale_date       alter table customer add (sale_date

date);
改变一个已存在表列的数据类型            alter table x modify(col1 date);
同时更改多个表列                        alter table x modify (col1 date,col5

number(3,1));
删除不再想要的列                        alter table customer drop column

sale_date;

7、Select语句:
select  检索信息
from tablename1[,tablename2...]
[where<条件表达式〉]
[order by<分类规则>];                /*分类*/

where子句:
(1),选择所有的表中数据:
select * from tablename;
如:select * from customer;
(2)and,or
如:
select *
from customer
where state_cd='CA' and sales>2000;
(3)!=(^=,<>),<,<=,>,>=,=
如:
select *
from customer
where state_cd != 'MA';
(4)between..and..,not between..and
如:
select *
from customer
where sales between 1000 and 10000;
(5)in(..),not in
如:
select *
from customer
where state_cd in ('CA','MA');
(6)like,not like
如:
select *
from customer
where last_name like 'M%' or last_name like '%cho%';

order by子句:
升序:asc(默认)
降序:desc
如:select * from customer order by state_cd desc,last_name;
    select * from customer order by last_name,state_cd desc;
多级排序有先后之分。

8、别名:
select right.col,left.col
from X right,Y left
where right.col=left.col;

 

表7-7 数值型常用函数
函数返回值样例显示
ceil(n)          大于等于数值n的最小整数                select ceil(10.6)

from customer; 11
floor(n)         小于等于数值n的最大整数                select floor(10.6)

from customer; 1 0
mod(m,n)         m除以n的余数,若n = 0,则返回m         select mod(7,5) from

customer; 2
power(m,n)       m的n次方                               select power(3,2)

from customer; 9
round(n,m)       将n四舍五入,保留小数点后m位           select round

(1234.5678,2) from customer; 1 2 3 4 . 5 7
sign(n)          若n = 0,返回0;否则n > 0,返回1 ;     select sign(12) from

customer; 1
                 n < 0 ,返回- 1
sqrt(n)          n的平方根                              select sqrt(25) from

customer; 5


表7-8 常用字符函数
函数返回值样例显示
initcap(char)     把每个字符串的第一个字符换成大写      Select initcap

('mr.teplow') from customer; Mr.Teplow
lower(char)       整个字符串换成小写                    Select lower

('Mr.Frank Townson') from customer; mr.terry beaker
replace(char,str1,str2) 字符串中所有str1换成str2        select replace

('Scott','S','Boy') from customer; B o y c o t t
soundex(char)     字符串的语音表示,常用于              select last_name from

employee where                  
    名字的模糊查询,可查找发音相似拼写不同的字符串      Abbey soundex

(last_name)=soundex('SMYTHE');
substr(char,m,n)  取出从m字符开始的n个字符的子串        select substr

('ABCDEF',2,1) from customer; C D
length(char)      求字符串的长度                        select length

('Anderson') from customer; 8


表7-9 常用日期型函数
函数返回值样例显示
Sysdate               当前日期和时间          Select sysdate from customer;

28-FEB-02 on February 28,2002
Last_day              本月最后一天            Select last_day(sysdate) from

customer; 31-MAR-02 on March 12,2002
Add_months(d,n)       当前日期d后推n个月      Select add_months(sysdate,2)

from customer;18-MAY-02 on March 18,2002
Months_between(f,s)   日期f和s间相差月数    Select months_between

(sysdate,'12- 13 in April 2003 MAR,-02')from customer;
Next_day(d,day)       d后第一周指定的day日期  Select next_day

(sysdate,'Monday') from customer;03-JAN-02 on December30,2001

 

表7-10 常用日期数据格式
格式返回值样例显示
Y或YY或YYY   年的最后一位,两位或三位  Select to_char(sysdate,'YYY') from

customer;         002表示2002年
SYEAR或YEAR  年,SYEAR使公元前的年份  Select to_char(sysdate,'SYEAR') from

customer;    -1112表示公元前1112年
Q            季度,1~3月为第一季度       Select to_char(sysdate,'Q') from

customer;         2表示第二季度
MM           月份数                 Select to_char(sysdate,'MM') from

customer;             12表示12月
RM           月份的罗马表示         Select to_char(sysdate,'RM') from

customer;             IV表示4月
Month        用9个字符长度表示的月份名       Select to_char(sysdate,'Month')

from customer; May后跟6个空格表示5月
WW           当年第几周          Select to_char(sysdate,'WW') from customer;

           24表示2002年6月13日为第24周
W            本月第几周        Select to_char(sysdate,'W') from customer;   

           1 2002年10月1日为第1周
DDD          当年第几天,1月1日为001,  Select to_char(sysdate,'DDD') from

customer;     363 2002年12月29日为第363天
DD           当月第几天      Select to_char(sysdate,'DD') from customer;    

                 04 10月4日为第4天
D            周内第几天      Select to_char(sysdate,'D') from customer;     

                 5 2002年3月14日为星期一
DY           周内第几天缩写  Select to_char(sysdate,'DY') from customer;    

             SUN 2002年3月24日为星期天
HH或HH12     12进制小时数    Select to_char(sysdate,'HH') from customer;    

              0 2午夜2点过8分为02
HH24         24小时制        select to_char(sysdate,'HH24') from customer;  

                   14下午2点08分为14
MI           分钟数(0~59)   Select to_char(sysdate,'MI') from customer;    

         17下午4点17分
SS           秒数(0~59)     Select to_char(sysdate,'SS') from customer;    

           22 11点3分22秒

提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分

钟也能工作,但结果是错误的。


Oracle提供三种主要的转换函数。
(1).To_char     将任意类型的数据转换成字符类型。语句select to_char(8897) from

customer;返回一个包含字符串8 8 9 7的字符类型的数据。

(2).To_number   将一组合法的数字字符串(如字符数据8897)转换成数值。语句select

to_number('8897') from customer;返回一个包括数值8897的数值类型的数据。

(3).To_date    将适合格式的字符串数据转换成日期型数据,这是最容易产生错误的转

换。因为12-DEC-02是合法的日期格式,语句select to_date('12-DEC-02') from

customer;能成功地进行数据转换。而语句select to_date('bad date') from

customer;在执行时会出问题。语句select to_date('20021227','YYYYMMDD') from

customer;将返回日期27-DEC-02,因为在to_date函数中的日期格式和被转化的数据是

合法的。语句select to_date ('20021236','YYYYMMDD') from customer;将失败,因

为在12月中没有36天。
提示用to_date转换机制时,如果被转换的数据格式不对,会出现各种各样的Oracle错误

 

 

 


现在将学习如何把它们组合起来编写一个大的报表。在SQL*Plus中,有许多参数可控制

SQL*Plus的输出显示格式。利用SQL*Plus命令show all,用户能知道显示格式的当前设

置。
该命令的输出格式大致如下:
SQL> show all;
appinfo为OFF并且已设置为"SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator "." (hex 2e)
btitle OFF and 为下一条 SELECT 语句的前几个字符
cmdsep OFF
colsep " "
compatibility version NATIVE
concat "." (hex 2e)
copycommit 0
COPYTYPECHECK 为 ON
define "&" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT ON
echo OFF
editfile "afiedt.buf"
embedded OFF
escape OFF
用于6或更多行的 FEEDBACK ON
flagger OFF
flush ON
heading ON
headsep "|" (hex 7c)
instance "local"
linesize 80
lno 15
loboffset 1
logsource ""
long 80
longchunksize 80
markup HTML OFF HEAD "