为了做报表,经常对数据库里数据的操作,应该算是自己的一点小小的经验.
在这里为了方便叙述,表1 : 用A 表示 ;表2: 用B表示;
A: A1,A2,A3
B: B1,B2,B3
1.直连
select A.* ,B.* from A,B where A.A1=B.B1
作用:求两个表中的交集.
2.左连或右连
select A.*,B.* from A,B where A.A1=B.B1(+) 或
select A.*,B.* from A,B where A.A1(+)=B.B1
作用: 由表A ,带出表B中信息
或由表B,带出表A中信息
3.并集
select A.*,B.* from A,B where A.A1=B.B1(+)
union
select A.*,B.* from A,B where A.A1(+)=B.B1
作用: 求两个表之间的并集.
4.分组
select col1,col2,sum(col3) from A
group by col1,col2
5.SQL里的Switch
select
decode(col1,'男','N','女','Y','nothing') from A
作用: 如果 表A 中col1里的数据是 "男" ,那输出"N",如果是 "女" ,则输出"Y",如果都不是那就输出"nothing"
6.SQL 里的 If
select (
case when A>B then 'YES' else 'NO' end) from A
作用: 如果A>B则输出'YES' 否则输出'NO'
7.将多行相关数据做为一行输出
例:
表A 数据
a b c1
a b c2
a b c3
SELECT COL1, COL2, MAX(COL3)
FROM (SELECT A.COL1
,A.COL2
,A.COL3 || ',' || LAG(A.COL3, 1, NULL) OVER(PARTITION BY A.COL1, A.COL2 ORDER BY A.COL3) || ',' || LAG(A.COL3, 2, NULL) OVER(PARTITION BY A.COL1, A.COL2 ORDER BY A.COL3) AS COL3
FROM A)
GROUP BY COL1, COL2
FROM (SELECT A.COL1
,A.COL2
,A.COL3 || ',' || LAG(A.COL3, 1, NULL) OVER(PARTITION BY A.COL1, A.COL2 ORDER BY A.COL3) || ',' || LAG(A.COL3, 2, NULL) OVER(PARTITION BY A.COL1, A.COL2 ORDER BY A.COL3) AS COL3
FROM A)
GROUP BY COL1, COL2
输出结果 : a b c3,c2,c1