基于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 "