SQL语句汇总(一)
2015-11-24 15:10
393 查看
转自: http://www.cnblogs.com/HondaHsu/archive/2007/06/22/792856.html
1.查询记录相同的其中一笔记录
SELECT mat12id, mat12name , bat22id,PRICE
FROM (SELECT mat12id, mat12name , bat22id,PRICE,
ROW_NUMBER() OVER (PARTITION BY mat12id ORDER BY bat22id DESC) RN
FROM bat22)
WHERE RN = 1
2.查询从多少行到多少行的记录
SELECT * FROM
(SELECT A.*, rownum
r FROM ( SELECT * FROM TableName )A WHERE rownum <90 ) B
WHERE r > 70
或者:
select a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
minus
select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;
3.实现分组(小计,合计)
•DEPTNO EMPNO ENAME TOTAL_SAL
•---------- ----- ---------- ----------
•10 7782 CLARK 2450
•10 7839 KING 5000
•小计
7450
•20 7566 JONES 2975
•20 7788 SCOTT 3000
•20 7902 FORD 3000
•小计 8975
•30 7698 BLAKE 2850
•小计 2850
•合计 19275
SQL如下:
SELECT CASE
WHEN a.deptno IS NULLTHEN '合计'
WHEN a.deptno IS NOT NULL AND a.empno IS NULLTHEN '小计'
ELSE '' || a.deptno
END deptno,a.empno,a.ename, SUM(a.sal) total_sal
FROM scott.emp a
WHERE a.sal > 2000
GROUP BY GROUPING SETS[/u]((a.deptno),(a.deptno, a.empno, a.ename),());
4.行列转换
•数据格式一
•CARD_CODE Q BAL
•--------- ---------- ----------
•001 1 27
•001 2 10
•001 3 36
•001 4 97
•002 1 96
•002 2 12
•002 3 15
•002 4 32
•数据格式二
•CARD_CODE Q1 Q2 Q3 Q4
•--------- ---------- ---------- ---------- ----------
•001 27 10 36 97
•002 96 12 15 32
从格式一到格式二
SELECT a.card_code,
SUM(decode(a.q, 1, a.bal, 0)) q1,SUM(decode(a.q, 2, a.bal, 0)) q2,
SUM(decode(a.q, 3, a.bal, 0)) q3,SUM(decode(a.q, 4, a.bal, 0)) q4
FROM t_change_lc a
GROUP BY a.card_code
ORDER BY 1;
5. Order By
select * from courses union select * from minors order by 1 对第一个字段进行升序排序
select * from courses union select * from minors order by desc 错误,加个表中存在(或转换过后的)的字段名(或转换过后的)
例如
select * from courses union select * from minors order by id desc select substr(id , 1 , 2) new_id, * from courses union select * from minors order by substr(id , 1 , 2) desc
ORDER BY 1 表示 所select 的字段按第一个字段排序
ORDER BY ASC应该没有这样写法,ORDER BY 后面不是字段就是数字,
可以ORDER BY 1 ASC 或者ORDER BY COL1 ASC
ASC表示按升序排序,DESC表示按降序排序
转自; http://blog.csdn.net/lingxyd_0/article/details/2653187
--先看一下例子
SQL> select * from test_tab order by 1;
COL_A COL_B
---------- ----------
A 1
A 2
B 2
B 3
C 4
D 1
D 12
D 121
D 12
9 rows selected
SQL> select * from test_tab order by 2;
COL_A COL_B
---------- ----------
A 1
D 1
A 2
B 2
B 3
C 4
D 12
D 12
D 121
9 rows selected
SQL> select * from test_tab order by 3;
select * from test_tab order by 3
ORA-01785: ORDER BY 项必须是 SELECT-list 表达式的数目
以上看来:1表示第一个栏位,2表示第二栏位 依此类推
当表中只有2个栏位时,ORDER BY 3就会出错
1.查询记录相同的其中一笔记录
SELECT mat12id, mat12name , bat22id,PRICE
FROM (SELECT mat12id, mat12name , bat22id,PRICE,
ROW_NUMBER() OVER (PARTITION BY mat12id ORDER BY bat22id DESC) RN
FROM bat22)
WHERE RN = 1
2.查询从多少行到多少行的记录
SELECT * FROM
(SELECT A.*, rownum
r FROM ( SELECT * FROM TableName )A WHERE rownum <90 ) B
WHERE r > 70
或者:
select a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
minus
select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;
3.实现分组(小计,合计)
•DEPTNO EMPNO ENAME TOTAL_SAL
•---------- ----- ---------- ----------
•10 7782 CLARK 2450
•10 7839 KING 5000
•小计
7450
•20 7566 JONES 2975
•20 7788 SCOTT 3000
•20 7902 FORD 3000
•小计 8975
•30 7698 BLAKE 2850
•小计 2850
•合计 19275
SQL如下:
SELECT CASE
WHEN a.deptno IS NULLTHEN '合计'
WHEN a.deptno IS NOT NULL AND a.empno IS NULLTHEN '小计'
ELSE '' || a.deptno
END deptno,a.empno,a.ename, SUM(a.sal) total_sal
FROM scott.emp a
WHERE a.sal > 2000
GROUP BY GROUPING SETS[/u]((a.deptno),(a.deptno, a.empno, a.ename),());
4.行列转换
•数据格式一
•CARD_CODE Q BAL
•--------- ---------- ----------
•001 1 27
•001 2 10
•001 3 36
•001 4 97
•002 1 96
•002 2 12
•002 3 15
•002 4 32
•数据格式二
•CARD_CODE Q1 Q2 Q3 Q4
•--------- ---------- ---------- ---------- ----------
•001 27 10 36 97
•002 96 12 15 32
从格式一到格式二
SELECT a.card_code,
SUM(decode(a.q, 1, a.bal, 0)) q1,SUM(decode(a.q, 2, a.bal, 0)) q2,
SUM(decode(a.q, 3, a.bal, 0)) q3,SUM(decode(a.q, 4, a.bal, 0)) q4
FROM t_change_lc a
GROUP BY a.card_code
ORDER BY 1;
5. Order By
select * from courses union select * from minors order by 1 对第一个字段进行升序排序
select * from courses union select * from minors order by desc 错误,加个表中存在(或转换过后的)的字段名(或转换过后的)
例如
select * from courses union select * from minors order by id desc select substr(id , 1 , 2) new_id, * from courses union select * from minors order by substr(id , 1 , 2) desc
ORDER BY 1 表示 所select 的字段按第一个字段排序
ORDER BY ASC应该没有这样写法,ORDER BY 后面不是字段就是数字,
可以ORDER BY 1 ASC 或者ORDER BY COL1 ASC
ASC表示按升序排序,DESC表示按降序排序
转自; http://blog.csdn.net/lingxyd_0/article/details/2653187
--先看一下例子
SQL> select * from test_tab order by 1;
COL_A COL_B
---------- ----------
A 1
A 2
B 2
B 3
C 4
D 1
D 12
D 121
D 12
9 rows selected
SQL> select * from test_tab order by 2;
COL_A COL_B
---------- ----------
A 1
D 1
A 2
B 2
B 3
C 4
D 12
D 12
D 121
9 rows selected
SQL> select * from test_tab order by 3;
select * from test_tab order by 3
ORA-01785: ORDER BY 项必须是 SELECT-list 表达式的数目
以上看来:1表示第一个栏位,2表示第二栏位 依此类推
当表中只有2个栏位时,ORDER BY 3就会出错
相关文章推荐
- PL SQL基本语法要术
- Oracle中临时表的深入研究
- Oracle视图和用户管理
- PL/SQL简介
- Oracle TYPE OBJECT 用法
- 如何把oracle服务加到linux启动项
- MySQL协议分析
- Oracle数据库RMAN备份与灾难恢复在寒区旱区特色数据库的应用
- ORACLE10G AWR使用和分析
- 给数据库建索引的规则
- 举例说明数据库一、二、三及BCNF范式
- oracle表分区详解
- mysql5.6不能输入中文
- sql查找实例语句
- 数据库的范式
- Oracle的rownum原理和使用
- Mongodb权限管理
- mysql 主键自动增长问题
- Oracle Job 任务计划管理[作业,定期执行任务]
- oracle中记录存在性的判断