Database-basic knowledge(Oracle)

 

数据库(Oracle) 基础知识:

1.     SQL分类:

DDL—数据定义语言(CREATEALTERDROPDECLARE)

DML—数据操纵语言(SELECTDELETEUPDATEINSERT)

DCL—数据控制语言(GRANTREVOKECOMMITROLLBACK)

 

2.     几个简单的基本的sql语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ‘%value1%’ ---like的语法很精妙

排序:select * from table1 order by field1,field2 [desc|asc]

总数:select count(*) as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

没有重复的:select distinct msisdn from address

 

3.     几个高级查询运算词

并集union (aUb) select * from a union all select * from b

union all, 不去掉重复的。
交集intersect(anb) select * from a intersect select * from b
差集minus(a-b) select * from a minus select × from b

 

取第6到第10条数据:

select * from dual  where rownum<=10 minus select * from dual  where rownum<5

   

4.     总结为日期字段赋值的几种方式,并举例说明

oracle中有个到当前系统时间--sysdate,如:

select sysdate from dual; // 2008-07-29 11:30:01

 

当前日期加上2年:

select add_months(sysdate,24) from dual;  // 2010-07-29 11:21:24

 

取得当前日期中下个周一的日期:

select next_day(sysdate,'Monday') from dual;// 2008-08-04 11:23:39

 

取得当前日期中月份的最后一天:

select last_day(sysdate) from dual; // 2008-07-31 11:25:37


取得二个日期之间的间隔月数:

select months_between('01-sep-08','11-jan-08') from dual; // 7.677

 

可对日期进行算述运算:

select (last_day(sysdate)-sysdate)from dual; // 2

 

5.     总结join几种用法,并举例说明

inner join: select * from A join B on A.id=B.id (default inner join)

left join: select * from A left join B on A.id=B.id

right join: select * from A right join B on A.id=B.id

笛卡尔积: select * from A,B;

select count(*) from address;  // 12

select count(*) from address a, address b;//12*12=144

自连接:

已知一个表的结构为: 

1 姓名 科目 成绩

2 张三 语文  20

3 张三 数学  30

4 张三 英语  50

5 李四 语文  70

6 李四 数学  60

7 李四 英语  90 

 

怎样通过select语句把他变成以下结构: 

1 姓名 语文 数学 英语 

2 张三  20   30   50  

3 李四  70   60   90

 

select A.姓名,A.科目 as 语文,B.科目 as 数学,C.科目 as 英语 
from student A,student B,student C 
where A.
姓名 = B.姓名 and B.姓名 = C.姓名 
and A.
科目 = ' 语文 '  and B.科目 = ' 数学 '  
and C.
科目 = ' 英语 '

 

6.     数字函数

round(45.926,2)---将前一数保留指定的小数位,并四舍五入(45.93),假如指定位是负数则意为在小数点左边保留指定位,:

round(45.923,-1)=50,rount(45.923,0)=46,round(45.93,-2)=0,round(55.93,-2)=100
trunc(45.926,2)---
同上,得不四舍五入(45.92) , trunc(55.926,-1)=50, trunc(55.926,-2)=0

mod(1600,300)---
求余(100)

 

select round(sysdate,'month')RM,round(sysdate,'year')RY,trunc(sysdate,'month')TM, trunc(sysdate,'year')TY from dual;

RM

RY

TM

TY

2008-08-01 00:00:00

2009-08-01 00:00:00

2008-07-01 00:00:00

2008-01-01 00:00:00

 

7.     字符处理

upper(str)---将字符串str全部转换成大写

lower(str)---将字符串str全部转换成小写

initcap(str)---将字符串中每个单词的首字母大写

concat(str1,str2)---将字符串str1str2连接起来(也可以通过'||'号直接相连)

substr(str,a,b)---取字符串str中的指定字符,从位置a开始取长度为b的字符串,若a为正则从左边开始,则从右边开始

instr(str,'z')---取得str字符串中从左边开始每一次出现z字符的下标位置(下标从1开始)

lpad(str,12,'*')---左填充,即将字符串str长度填充到12,假如其不足12位则在左边以*号填充

rpad(str,12,'*')---右填充,同上

length(str)---计算字符串str的长度

 

8.     SQL操作符,举例说明

||字符串相加  select sysdate||'_奥运' from dual; // 29-JUL-08_奥运
>
<
=
Like  
Between and

 

 

9.     注意事项:

9.1 group by之外的字段如果出現在select里面的話必須使用聚集函數,否則不合法。  
比如:
select a, b, sum(c) from tab group by a, b  (OK)
     select a, b, c from tab group by a, b 
(X)

9.2 having 子句对 group by 子句所确定的行组进行控制,having 子句条件中只允许涉及常量,聚组函数或group by 子句中的列.

 

9.3 rownum只能用符号(<<=!=)

select * from tablename where rownum != 10;返回的是前9条记录。
不能用:>,>=,=,Between...and。由于rownum是一个总是从1开始的伪列,Oracle 认为这种条件 不成立,查不到记录.

 

9.4 快速复制一个表和数据:

create table TEST3 as select * from TEST

insert into TEST3 select * from TEST

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值