SELECT * FROM t_lock;

对于多行单列子查询在扩充过滤判别时,必要合营IN,ANY,ALL使用。

SqlServer:

 

SQLServer数据库又分为 SQLServer2001和SQLServer二零零五。经常比较轻松的点子是通过TOP函数来实现。如下: SELECT TOP 10 * FROM sql WHERE ( 
code NOT IN  (SELECT TOP 20 code  FROM TestTable  ORDER BY id)) ORDER BY ID 
那条语句,从理论上讲,整条语句的试行时间应该比子句的施行时间长,但真相相反。因为,子句试行后重回的是20条记下,而整条语句仅重回10条语句,所以影响数据库响合时间最大的成分是物理I/O操作。而限制物理I /O操作此处的最有效方法之一正是应用TOP关键词了。TOP关键词是SQL SE库罗德VEEscort中经过系统优化过的二个用来领取前几条或前多少个比例数据的词。 以上语句的有三个致命的劣势,正是它含有NOT IN字样,要换来用not exists来代表not in,二者的进行成效实际上是不曾分别的。 
在以上分页算法中,影响大家询问速度的关键因素有两点:TOP和NOT IN。TOP能够加强大家的查询速度,而NOT IN会减慢大家的询问速度,所以要拉长大家全数分页算法的进程,将在彻底退换NOT IN,同别的方法来替代它。 大家精通,大约任何字段,大家都足以经过max(字段卡塔尔或min(字段卡塔尔来领取有些字段中的最大或非常的小值,所以只要那个字段不重复,那么就能够使用那么些不另行的字段的max或min作为分界线,使其变为分页算法中分别每页的参照物。在这里地,我们得以用操作符“>”或“<”号来完结那些义务。如:  
Select top 10 * from table1 where id>200  

于是就有了之类分页方案:  
select top 页大小 *  
from table1   
where id>  
(select max (id) from   
(select top ((页码-1)*页大小) id from table1 order by id) as T  
)       
order by id  
这种艺术施行多少始终不曾大的降势,后劲仍旧很足。特别对于数据量大的时候,该办法实施进度一点也不会减低。 
行使TOP必要主键必得独一,不可能是联合主键。假如是同步主键,则查询出的结果会乱序的。 
当下SQLServer贰零零伍提供了三个row_number()函数。ROW_NUMBEWrangler(卡塔尔国 正是生成叁个梯次的行号,而她转移顺序的正式,正是前边紧跟的
OVE奥德赛(OLANDDEF12berlinetta BY ReportID卡塔尔(قطر‎,此中ReportID能够是同步主键。上面,大家看看怎么具体使用那么些RowNo实行分页. SELECT TOP 10 *  FROM ( 
SELECT top 10 ROW_NUMBER() OVER (ORDER BY ReportID) AS RowNo 
FROM TABLE  ) AS A 
WHERE RowNo> ” + pageIndex*10 pageIndex便是大家必要多少的页数.  

 


SELECT * FROM t_fbi WHERE trunc(dt) = to_date(2006-09-21,yyyy-mm-dd)
;

翻开与任务是SALESMAN同单位的职员和工人?

MySql:

select * from TABLE_NAME limit  A,  B;

解释:

A,查询源点

B,你须求的行数

a          1,2
b          1,2,3
–*/
–删除测验
DROP TABLE
tb,#t
GO

— 真正的批量付出 DECLARE CU景逸SUVSOLX570 cur IS SELECT * FROM user_objects;
TYPE rec IS TABLE OF user_objects%ROWTYPE; recs rec; BEGIN OPEN cur;
WHILE (TRUEState of Qatar LOOP FETCH cur BULK COLLECT INTO recs LIMIT 100; — forall
完结批量 FORALL i IN 1 .. recs.COUNT INSERT INTO t_loop VALUES recs
(i); COMMIT; EXIT WHEN cur%NOTFOUND; END LOOP; CLOSE cur; END;

将CLA牧马人K所在单位的工作者薪酬上浮10%

Oracle:

–1:无OTiggoDEQashqai BY排序的写法。(作用最高卡塔尔
–(经过测验,此办法费用低于,只嵌套一层,速度最快!即便查询的数据量再大,也大约不受影响,速度依然!卡塔尔

SELECT *

  FROM (SELECT ROWNUM AS rowno, t.*

          FROM emp
t

         WHERE hire_date BETWEEN TO_DATE (‘20060501’, ‘yyyymmdd’)

                             AND TO_DATE (‘20060731’, ‘yyyymmdd’)

           AND ROWNUM <= 20) table_alias

 WHERE table_alias.rowno >= 10;

–2:有OTiggoDE景逸SUV BY排序的写法。(成效最高卡塔尔(قطر‎
–(经过测量试验,此情势随着查询范围的恢宏,速度也会越来越慢哦!State of Qatar

SELECT *

  FROM (SELECT tt.*, ROWNUM AS rowno

          FROM (  SELECT
t.*

                    FROM emp
t

                   WHERE hire_date BETWEEN TO_DATE (‘20060501’, ‘yyyymmdd’)

                                       AND TO_DATE (‘20060731’, ‘yyyymmdd’)

                ORDER BY create_time DESC, emp_no) tt

         WHERE ROWNUM <= 20) table_alias

 WHERE table_alias.rowno >= 10;

 

 

=================================================================================

=======================垃圾但又犹如很常用的分页写法==========================

=================================================================================

–3:无OENCOREDE酷路泽 BY排序的写法。(建议使用方式1代替卡塔尔(قطر‎
–(此方式随着查询数据量的恢弘,速度会愈加慢哦!卡塔尔(قطر‎

SELECT *

  FROM (SELECT ROWNUM AS rowno, t.*

          FROM k_task
t

         WHERE flight_date BETWEEN TO_DATE (‘20060501’, ‘yyyymmdd’)

                               AND TO_DATE (‘20060731’, ‘yyyymmdd’)) table_alias

 WHERE table_alias.rowno <= 20 AND table_alias.rowno >= 10;

–TABLE_ALIAS.ROWNO  between 10 and
100;

–4:有O奥迪Q7DEGL450 BY排序的写法.(建议接纳方法2代替State of Qatar
–(此措施随着查询范围的恢弘,速度会越来越慢哦!卡塔尔(قطر‎

SELECT *

  FROM (SELECT tt.*, ROWNUM AS rowno

          FROM ( 
SELECT *

                    FROM k_task
t

                   WHERE flight_date BETWEEN TO_DATE (‘20060501’, ‘yyyymmdd’)

                                         AND TO_DATE (‘20060531’, ‘yyyymmdd’)

                ORDER BY fact_up_time, flight_no) tt) table_alias

 WHERE table_alias.rowno BETWEEN 10 AND 20;

–5另类语法。(有O奇骏DEPAJERO BY写法)
–(语法风格与守旧的SQL语法分歧,不便民阅读与明白,为规范与统一规范,不推荐使用。State of Qatar
WITH partdata AS

     (

        SELECT ROWNUM AS rowno, tt.*

          FROM ( 
SELECT *

                    FROM k_task
t

                   WHERE flight_date BETWEEN TO_DATE (‘20060501’, ‘yyyymmdd’)

                                         AND TO_DATE (‘20060531’, ‘yyyymmdd’)

                ORDER BY fact_up_time, flight_no) tt

         WHERE ROWNUM <= 20)

SELECT *

  FROM partdata

 WHERE rowno >= 10;

 

–6另类语法 。(无O迈凯伦540CDE帕杰罗 BY写法)

WITH partdata AS

     (

        SELECT ROWNUM AS rowno, t.*

          FROM k_task
t

         WHERE flight_date BETWEEN TO_DATE (‘20060501’, ‘yyyymmdd’)

                               AND TO_DATE (‘20060531’, ‘yyyymmdd’)

           AND ROWNUM <= 20)

SELECT *

  FROM partdata

 WHERE rowno >= 10;

 

 

 

yangtingkun分析:

  — from

Oracle的分页查询语句基本上能够根据本文给出的格式来实行套用。

分页查询格式:

SELECT *

  FROM (SELECT a.*, ROWNUM rn

          FROM (SELECT *

                  FROM table_name) a

         WHERE ROWNUM <= 40)

 WHERE rn >= 21

里面最内层的查询SELECT * FROM
TABLE_NAME表示不开展翻页的原本查询语句。ROWNUM <= 40和QX56N >=
21决定分页查询的每页的限定。

上边给出的这么些分页查询语句,在大部动静具备较高的频率。分页的指标便是决定输出结果集大小,将结果不久的归来。在上边的分页查询语句中,这种假造入眼反映在WHERE ROWNUM <=
40那句上。

选拔第21到40条记下存在二种方式,一种是上面例子中显得的在查询的第二层通过ROWNUM
<=
40来调整最大值,在查询的最外层调整最小值。而另一种格局是去掉查询第二层的WHERE
ROWNUM <=
40语句,在查询的最外层调节分页的最小值和最大值。那是,查询语句如下:

SELECT *

  FROM (SELECT a.*, ROWNUM rn

          FROM (SELECT *

                  FROM table_name) a)

 WHERE rn BETWEEN 21 AND 40

 

比较那二种写法,绝大繁多的景况下,第叁个查询的频率比第三个高得多。

那是由于CBO优化形式下,Oracle能够将外层的询问条件推到内层查询中,以增加内层查询的举办作用。对于第二个查询语句,第二层的查询条件WHERE
ROWNUM <=
40就能够被Oracle推入到内层查询中,那样Oracle查询的结果假诺超越了ROWNUM限定规范,就告一段落查询将结果回到了。

而第二个查询语句,由于查询条件BETWEEN 21 AND
40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也一向不意思,因为最内层查询不亮堂LacrosseN代表怎样)。由此,对于第2个查询语句,Oracle最内层重回给中间层的是有着满足条件的数据,而个中层再次来到给最外层的也是装有数据。数据的过滤在最外层实现,显明那些效能要比第贰个查询低得多。

上面深入分析的查询不唯有是指向单表的粗略询问,对于最内层查询是头眼昏花的多表联合查询或最内层查询蕴涵排序的情状一致有效。

那边就不对含有排序的询问进行求证了,下一篇文章会透过例子来详细表明。

 

上面简单斟酌一下多表联合的情状。

对此最普及的等值表连接查询,CBO日常恐怕会使用二种连接方式NESTED
LOOP和HASH JOIN(MEPAJEROGE JOIN功能比HASH
JOIN功用低,日常CBO不会寻思)。在此边,由于应用了分页,因此钦命了一个赶回的最大记录数,NESTED
LOOP在回去记录数超过最大值时能够致时苏息并将结果回到给中间层,而HASH
JOIN必需管理完全数结果集(MEWranglerGE
JOIN也是)。那么在超过八分之四的情形下,对于分页查询选拔NESTED
LOOP作为查询的连天形式具有较高的频率(分页查询的时候绝超越十分四的事态是询问前几页的数据,越靠前面包车型大巴页数访谈概率越小)。

于是,若是不介旨在系统中运用HINT的话,可以将分页的查询语句改写为:

SELECT *

  FROM (SELECT a.*, ROWNUM rn

          FROM (SELECT *

                  FROM table_name) a

         WHERE ROWNUM <= 40)

 WHERE rn >= 21

 

 

–归总管理
SELECT col1,col2=CAST(col2
as varchar(100))
INTO #t FROM tb
ORDER BY
col1,col2
DECLARE @col1
varchar(10),@col2
varchar(100)
UPDATE #t SET
    @col2=CASE
WHEN @col1=col1
THEN @col2+’,’+col2
ELSE col2 END,
    @col1=col1,
    col2=@col2
SELECT *
FROM #t
/*–更新管理后的一时表
col1       col2

— 假如存在就校正,不设有就插入用叁个言辞达成 DROP TABLE t_mg;
CREATE TABLE t_mg(code VARCHAR2(10), NAME VARCHAR2(10));

将地方是ANALYST与MANAGEXC90看做一组,其余位置看做另一组,分别总结人数?

–定义游标并开展合併管理
DECLARE tb CURSOR
LOCAL
FOR
SELECT col1,col2 FROM tb
ORDER BY 
col1,col2
DECLARE @col1_old
varchar(10),@col1
varchar(10),@col2
int,@s
varchar(100)
OPEN tb
FETCH tb INTO
@col1,@col2
SELECT @col1_old=@col1,@s=”
WHILE @@FETCH_STATUS=0
BEGIN
    IF @col1=@col1_old
        SELECT @s=@s+’,’+CAST(@col2
as varchar)
    ELSE
    BEGIN
        INSERT @t
VALUES(@col1_old,STUFF(@s,1,1,”))
        SELECT @s=’,’+CAST(@col2
as varchar),@col1_old=@col1
    END
    FETCH tb INTO
@col1,@col2
END
INSERT @t
VALUES(@col1_old,STUFF(@s,1,1,”))
CLOSE tb
DEALLOCATE tb
–展现结果并删除测量试验数据
SELECT *
FROM @t
DROP TABLE tb
/*–结果
col1       col2

— here for other operation v_cnt := v_cnt + 1; INSERT INTO t_lock
(ID) VALUES (v_cnt卡塔尔; COMMIT; –提交况且释放lock END;

SELECT e.empno,e.ename,e.sal,e.job,d.deptno,d.dname,d.loc FROM emp
e,dept d WHERE e.deptno=d.deptno(+)

–3.3.3
使用不时表实现字符串合并管理的上行下效
–管理的数据
CREATE TABLE tb(col1
varchar(10),col2 int)
INSERT tb SELECT
‘a’,1
UNION ALL
SELECT ‘a’,2
UNION ALL
SELECT ‘b’,1
UNION ALL
SELECT ‘b’,2
UNION ALL
SELECT ‘b’,3

SELECT * FROM t_dup;

EXISTS关键字

–3.3.1
使用游标法举行字符串合并管理的演示。
–处理的多少
CREATE TABLE tb(col1
varchar(10),col2 int)
INSERT tb SELECT
‘a’,1
UNION ALL
SELECT ‘a’,2
UNION ALL
SELECT ‘b’,1
UNION ALL
SELECT ‘b’,2
UNION ALL
SELECT ‘b’,3

— 不提议采用 SELECT * FROM t_fbi WHERE to_char(dt, yyyy-mm-dd) =
2006-09-21;

表dept

/*==============================================*/

SELECT * FROM t_loop;

名字相符(不含有表外号卡塔尔国,类型,长度也一致。


SELECT t1.card_code, substr(MAX(sys_connect_by_path(t1.q, ;)), 2) q
FROM (SELECT a.card_code, a.q, row_number() over(PARTITION BY
a.card_code ORDER BY a.q) rn FROM t_change_lc_comma a) t1 START WITH
t1.rn = 1 CONNECT BY t1.card_code = PRIOR t1.card_code AND t1.rn – 1 =
PRIOR t1.rn GROUP BY t1.card_code;

SQL>INSERTINTOsales_tab


— 准确的分页算法 SELECT * FROM (SELECT a.*, ROWNUM rn FROM (SELECT *
FROM t_employees ORDER BY first_name) a WHERE ROWNUM = 500) WHERE rn
480 ;

SELECT year_id,month_id,day_id,SUM(sales_value) FROM sales_tab
GROUP BY year_id,month_id,day_id UNION ALL

/*==============================================*/

SELECT * FROM t_mg;

SQL>COMMIT;

a          1
a          1,2
b          1
b          1,2
b          1,2,3
–*/
–得到最终结果
SELECT col1,col2=MAX(col2)
FROM #t GROUP
BY col1
/*–结果
col1       col2

–行列转变 行转列 归拢 DROP TABLE t_change_lc_comma; CREATE TABLE
t_change_lc_comma AS SELECT card_code,quarter_||q AS q FROM
t_change_lc;

在使用子查询创制表的时候,查询多少个字段则开创的表就有多少个字段,字段名与查询的字段

SELECT t.card_code, substr(t.q, instr(; || t.q, ;, 1, rn), instr(t.q ||
;, ;, 1, rn) – instr(; || t.q, ;, 1, rn)) q FROM (SELECT a.card_code,
a.q, b.rn FROM t_change_cl_comma a, (SELECT ROWNUM rn FROM dual
CONNECT BY ROWNUM = 100) b WHERE instr(; || a.q, ;, 1, rn) 0) t ORDER BY
1, 2;

DENSE_RANK(卡塔尔:生成组内连接但不独一的数字

–合併管理函数
CREATE FUNCTION
dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
    DECLARE @re
varchar(100)
    SET @re=”
    SELECT @re=@re+’,’+CAST(col2
as varchar)
    FROM tb
    WHERE col1=@col1
    RETURN(STUFF(@re,1,1,”))
END
GO

DROP INDEX idx_fbi_1; CREATE INDEX idx_fbi_1 ON t_fbi(trunc(dt));

ROUND(DBMS_RANDOM.value(low=>1,high=>100),2)ASsales_value

–调用函数
SELECT col1,col2=dbo.f_str(col1) FROM tb
GROUP BY col1
–删除测验
DROP TABLE tb
DROP FUNCTION
f_str
/*–结果
col1       col2

SELECT * FROM t_change_cl_comma;

SELECT NULL,NULL,NULL,SUM(sales_value) FROM sales_tab

–合并管理
SELECT col1,
    col2=CAST(MIN(col2)
as varchar)
        +CASE
            WHEN COUNT(*)=1 THEN

            ELSE ‘,’+CAST(MAX(col2)
as varchar)
        END
FROM tb
GROUP BY col1
DROP TABLE tb
/*–结果
col1       col2     

— 高并发碰到下,安全的达成逻辑 DECLARE v_cnt NUMBE福特Explorer; BEGIN —
对点名的行取得lock SELECT ID INTO v_cnt FROM t_lock WHERE ID=1 FOR
UPDATE; — 在有lock的景况下继续下边的操作 SELECT MAX(ID卡塔尔国 INTO v_cnt
FROM t_lock;

翻开每日与每月营业额?

a          1,2
b          1,2
c          3
–*/

— IN/EXISTS的两样适用条件 — t_orders.customer_id有索引 SELECT a.*
FROM t_employees a WHERE a.employee_id IN (SELECT b.sales_rep_id
FROM t_orders b WHERE b.customer_id = 12);

                                         FROM emp ORDER BY sal DESC) t)
WHERE rn BETWEEN 6 AND 10

–3.3.4.1 每组 <=2 条记下的联结
–管理的多少
CREATE TABLE tb(col1
varchar(10),col2 int)
INSERT tb SELECT
‘a’,1
UNION ALL
SELECT ‘a’,2
UNION ALL
SELECT ‘b’,1
UNION ALL
SELECT ‘b’,2
UNION ALL
SELECT ‘c’,3

MERGE INTO t_mg a USING (SELECT the code code, the name NAME FROM dual)
b ON (a.code = b.code) WHEN MATCHED THEN UPDATE SET a.NAME = b.NAME WHEN
NOT MATCHED THEN INSERT (code, NAME) VALUES (b.code, b.NAME);

SELECT ename,sal FROM emp WHERE sal>(SELECT AVG(sal) FROM emp)

–结果


1           aa,bb
2           aaa,bbb,ccc

 

— 完结一条记下依照准则多表插入 DROP TABLE t_ia_src; CREATE TABLE
t_ia_src AS SELECT a||ROWNUM c1, b||ROWNUM c2 FROM dual CONNECT BY
ROWNUM=5; DROP TABLE t_ia_dest_1; CREATE TABLE t_ia_dest_1(flag
VARCHAR2(10) , c VARCHAR2(10)); DROP TABLE t_ia_dest_2; CREATE TABLE
t_ia_dest_2(flag VARCHAR2(10) , c VARCHAR2(10)); DROP TABLE
t_ia_dest_3; CREATE TABLE t_ia_dest_3(flag VARCHAR2(10) , c
VARCHAR2(10));

分页是方言,差别数据库都提供了分页查询的体制,可是语法定义各不雷同。

–3.3.2
使用客户定义函数,合作SELECT管理达成字符串合併管理的示范
–管理的数额
CREATE TABLE tb(col1
varchar(10),col2 int)
INSERT tb SELECT
‘a’,1
UNION ALL
SELECT ‘a’,2
UNION ALL
SELECT ‘b’,1
UNION ALL
SELECT ‘b’,2
UNION ALL
SELECT ‘b’,3
GO

— here for other operation v_cnt := v_cnt + 1; INSERT INTO t_lock
(ID) VALUES (v_cnt); COMMIT; END;

子查询依据查询结果分为:

DECLARE @t
TABLE(id int, value
varchar(10))
INSERT @t
SELECT 1, ‘aa’
UNION ALL
SELECT 1, ‘bb’
UNION ALL
SELECT 2, ‘aaa’
UNION ALL
SELECT 2, ‘bbb’
UNION ALL
SELECT 2, ‘ccc’

— LOOP中的COMMIT/ROLLBACK DROP TABLE t_loop PURGE; create TABLE
t_loop AS SELECT * FROM user_objects WHERE 1=2;

SELECT ename,sal FROM emp WHERE sal>(SELECT sal FROM emp WHERE
ename=’CLARK’)

a          1,2
b          1,2,3
–*/
GO

INSERT ALL WHEN (c1 IN (a1,a3)) THEN INTO t_ia_dest_1(flag,c)
VALUES(flag1,c2) WHEN (c1 IN (a2,a4)) THEN INTO t_ia_dest_2(flag,c)
VALUES(flag2,c2) ELSE INTO t_ia_dest_3(flag,c)
VALUES(flag1||flag2,c1||c2) SELECT c1,c2, f1 flag1, f2 flag2 FROM
t_ia_src;

);


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;

单行单列,多行单列,多行多列子查询

/*==============================================*/

SELECT a.* FROM t_employees a WHERE a.department_id = 10 AND
a.employee_id IN (SELECT b.sales_rep_id FROM t_orders b);

month_id  NUMBERNOTNULL,

a          1,2
b          1,2,3
–*/
GO

–行列调换 行转列 DROP TABLE t_change_lc; CREATE TABLE
t_change_lc (card_code VARCHAR2(3), q NUMBER, bal NUMBER);

start:(Page-1)*PageSize + 1

–合併管理
–定义结果集表变量
DECLARE @t
TABLE(col1 varchar(10),col2 varchar(100))

SELECT t.card_code, t.rn q, decode(t.rn, 1, t.q1, 2, t.q2, 3, t.q3, 4,
t.q4) bal FROM (SELECT a.*, b.rn FROM t_change_cl a, (SELECT ROWNUM
rn FROM dual CONNECT BY ROWNUM = 4) b) t ORDER BY 1, 2;

分页查询

–3.3.4.2 每组 <=3 条记下的合并
–管理的数据
CREATE TABLE tb(col1
varchar(10),col2 int)
INSERT tb SELECT
‘a’,1
UNION ALL
SELECT ‘a’,2
UNION ALL
SELECT ‘b’,1
UNION ALL
SELECT ‘b’,2
UNION ALL
SELECT ‘b’,3
UNION ALL
SELECT ‘c’,3

— 听而不闻的落实逻辑,隐含bug DECLARE v_cnt NUMBE科雷傲; BEGIN —
这里有并发性的bug SELECT MAX(ID卡塔尔(قطر‎ INTO v_cnt FROM t_lock;

查阅公司薪金排行的第6-10名


— t_employees.department_id有索引 SELECT a.* FROM t_employees a
WHERE a.department_id = 10 AND EXISTS (SELECT 1 FROM t_orders b WHERE
a.employee_id = b.sales_rep_id);

图片 1

a          1,2
b          1,2,3
c          3
–*/
GO

— 分页算法(why not this one卡塔尔 SELECT a.*, ROWNUM rn FROM (SELECT *
FROM t_employees ORDER BY first_name) a WHERE ROWNUM = 500 AND ROWNUM
480;

                GROUP BY year_id,month_id

— 查询管理
SELECT *
FROM(SELECT
DISTINCT id FROM
@t)A
OUTER APPLY(SELECT
[values]=
STUFF(REPLACE(REPLACE((
SELECT value FROM
@t N WHERE id
= A.id
FOR XML AUTO),'<N
value=”‘,’,’),'”/>’,
”), 1, 1, ”))N

— 硬解析/软解析 DROP TABLE t_hard PURGE; CREATE TABLE t_hard (ID
INT);

SQL>DROPTABLEsales_tab;


— 模拟批量付给 DECLARE v_count NUMBER; BEGIN FOR cur IN (SELECT *
FROM user_objects) LOOP INSERT INTO t_loop VALUES cur; v_count :=
v_count + 1; IF v_count = 100 THEN COMMIT; END IF; END LOOP; COMMIT;
END;

SELECT year_id,NULL,NULL,SUM(sales_value) FROM sales_tab GROUP BY
year_id

–合併管理
SELECT col1,
    col2=CAST(MIN(col2)
as varchar)
        +CASE
            WHEN COUNT(*)=3 THEN
‘,’
                +CAST((SELECT col2
FROM tb WHERE
col1=a.col1 AND col2
NOT IN(MAX(a.col2),MIN(a.col2)))
as varchar)
            ELSE ”
        END
        +CASE
            WHEN COUNT(*)>=2 THEN
‘,’+CAST(MAX(col2)
as varchar)
            ELSE ”
        END
FROM tb a
GROUP BY col1
DROP TABLE tb
/*–结果
col1       col2

SELECT * FROM t_hard;

end:PageSize*Page

— 消极锁定/乐观锁定 DROP TABLE t_lock PURGE; CREATE TABLE t_lock AS
SELECT 1 ID FROM dual;

SELECT * FROM(SELECT ROWNUM rn,ename,job,sal FROM empState of Qatar WHERE rn BETWEEN
6 AND 10—-无查询结果

–行列调换 列转行 DROP TABLE t_change_cl; CREATE TABLE
t_change_cl AS 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;

ROLLUP()函数

发表评论

电子邮件地址不会被公开。 必填项已用*标注