Professional Documents
Culture Documents
Shane Zhang
Slide 1
AGENDA
CASE Statement
Joins
Timestamp Data Type
Rename Tables, Columns
Merge Statement
Subqueries/With
Groupset/Rollup/Cube
Skip Scanning of Indexes
Index Compression
Index Organized Tables (IOTs)
Temp Tables
Dec 24, 2016
Slide 2
CASE Example:
SELECT last_name, job_cd, salary,
CASE job_cd WHEN IT THEN salary*1.10
WHEN SALES THEN salary*1.15
ELSE salary*1.05
END
FROM employees;
Slide 3
Oracle 9i Outer Join (all rows from table on the left are retained in the
result set)
SELECT p.part_id, s.supplier_name
FROM part p left outer supplier s
ON p.supplier_id = s.supplier_id
Slide 4
Join Operators
Cross Join:
Produces cross product resulting in Cartesian join. MOST LIKELY A MISTAKE!
SELECT empid, deptno FROM emp CROSS JOIN dept;
Without the operator: SELECT empid, deptno FROM emp, dept;
Natural Join:
Join based on like columns
SELECT empid, deptno, dname FROM emp NATURAL JOIN dept;
Without the operator: SELECT a.empid, a,deptno, b.dname FROM emp a,
dept b WHERE a.deptno = b.deptno;
Slide 5
ON:
Much like WHERE clause. Can be used to join columns that
are named differently.
SELECT empid, dname FROM emp a JOIN dept b ON
(a.deptno = b.department_no AND a.empid < 20);
Without the operator: SELECT empid, dname FROM emp a,
dept b WHERE a.deptno = b.department_no AND a.empid <
20;
Slide 6
Slide 7
Self Joins
Slide 8
Syntax
Renaming a column:
ALTER TABLE test RENAME COLUMN a_flg TO my_flg;
Renaming a constraint:
ALTER TABLE test RENAME constraint a_flg_pk TO
a_flg_pk_new;
Renaming a table:
ALTER TABLE test RENAME to test_new;
Slide 9
Top N Analysis
SELECT [column_list], ROWNUM
FROM (SELECT [column_list]
FROM table
ORDER BY Top-N_column)
WHERE ROWNUM <= N;
Rank by group
SELECT Empno, Ename, Job, Mgr, Hiredate, Sal
FROM
(SELECT Empno, Ename, Job, Mgr, Hiredate, Sal,
RANK() OVER
(ORDER BY SAL Desc NULLS LAST) AS Emp_Rank
FROM Emp
ORDER BY SAL Desc NULLS LAST)
WHERE Emp_Rank < 6;
Slide 10
Windowing Function
Cumulative total
SELECT month,
SUM(tot_sales) monthly_sales,
SUM(SUM(tot_sales)) OVER (ORDER BY month
ROWS BETWEEN UNBOUNDED PRECEDING AND
CURRENT ROW) running_total
FROM orders
WHERE year = 2001
AND region_id = 6
GROUP BY month
ORDER BY month;
Slide 11
Organization Chart
SELECT level, lname, emp_id,
manager_emp_id
FROM employee
START WITH manager_emp_id IS NULL
CONNECT BY manager_emp_id =
PRIOR emp_id;
Slide 12
XML
Slide 13
Using subquery
Inline View subquery in the from clause Inline views are always executed
prior to the containing query and, thus, may not reference columns from
other tables or inline views from the same query.
SELECT [column_list], ROWNUM FROM (SELECT [column_list]
FROM table ORDER BY Top-N_column) WHERE ROWNUM <= N;
Slide 14
Slide 15
With Clause
Slide 16
Having Clause
Slide 17
Slide 18
Information of a table
Slide 19
Information on Space
Get an estimation of the size of a table, get avg_row_len and pctfree information
from user_tables
tablesize=number of rows*avg_row_len*(1+pctfree/100)
SQL> select num_rows,pct_free,avg_row_len from user_tables where
table_name='DOCDATA_IND';
Find out the total free space available to current use
select tablespace_name,sum(bytes/1000) from user_free_space group by
tablespace_name
Find out how much space used and what is your quota
select * from user_ts_quota;
Slide 20
20
20
20
20
Summary
MANAGER
CLERK
ANALYST
6
4
1
1
30
30
30
30
Summary
SALESMAN
MANAGER
CLERK
20
20
20
20
Summary
MANAGER
CLERK
ANALYST
6
4
1
1
30
30
30
30
Summary
SALESMAN
MANAGER
CLERK
Slide 21
Slide 22
SELECT a.shp_rcv_src_cd,
a.tndr_type_cd,
SUM(a.nbr_of_pkgs),
SUM(a.net_rev),
SUM(a.ratd_wgt)
FROM shipment a,
location b
WHERE a.shp_dt_yyyymm='200312'
and a.shp_rcv_src_cd in ('3','4','5')
and b.loc_nbr=a.loc_nbr
and b.hist_yyyymm=a.shp_dt_yyyymm
and b.drpbx_type_cd in ('IC','IS','IW','IM','OM','IY','OW')
GROUP BY rollup(shp_rcv_src_cd,tndr_type_cd)
ORDER BY shp_rcv_src_cd,tndr_type_cd
Dec 24, 2016
Slide 23
SHP_RCV_SRC_CD
TNDR_TYPE_CD
SUM(A.NBR_OF_PKGS)
SUM(A.NET_REV)
SUM(A.RATD_WGT)
CCC
15204
452297
76297
DRPF
688169
12653173
3509281
SOLD
570572
8422926
3112950
1273945
21528396
6698529
CCC
26
1414
100
DRPF
484
28301
4350
SOLD
759
23706
5306
1269
53421
9756
CCC
18
975
80
DRPF
2123
101847
12510
SOLD
230
7026
1625
2371
109849
14215
1277585
21691666
6722500
Slide 24
SELECT a.shp_rcv_src_cd,
a.tndr_type_cd,
SUM(a.nbr_of_pkgs),
SUM(a.net_rev),
SUM(a.ratd_wgt)
FROM shipment a,
location b
WHERE a.shp_dt_yyyymm='200312'
and a.shp_rcv_src_cd in ('3','4','5')
and b.loc_nbr=a.loc_nbr
and b.hist_yyyymm=a.shp_dt_yyyymm
and b.drpbx_type_cd in ('IC','IS','IW','IM','OM','IY','OW')
GROUP BY cube(shp_rcv_src_cd,tndr_type_cd)
ORDER BY shp_rcv_src_cd,tndr_type_cd
Dec 24, 2016
Slide 25
SHP_RCV_SRC_CD
TNDR_TYPE_CD
CCC
15204
452297
76297
DRPF
688169
12653173
3509281
SOLD
570572
8422926
3112950
1273945
21528396
6698529
CCC
26
1414
100
DRPF
484
28301
4350
SOLD
759
23706
5306
1269
53421
9756
CCC
18
975
80
DRPF
2123
101847
12510
SOLD
230
7026
1625
2371
109849
14215
CCC
15248
454686
76478
DRPF
690776
12783322
3526141
SOLD
571561
8453658
3119881
1277585
21691666
6722500
SUM(A.NBR_OF_PKGS)
SUM(A.NET_REV)
SUM(A.RATD_WGT)
Slide 26
MERGE
Slide 27
MERGE Contd
Slide 28
MERGE Contd
Slide 29
MERGE Contd
CO_NM
-----------------------------GE
Oracle Corp
2 rows selected.
Slide 30
Slide 31
Index Compression
Slide 32
Slide 33
Temporary Tables
Slide 34
Example:
SQL>CREATE GLOBAL TEMPORARY TABLE t_transaction
(c VARCHAR2(4000)) ON COMMIT DELETE ROWS;
Table created.
SQL> CREATE GLOBAL TEMPORARY TABLE t_session
(c VARCHAR2(4000)) ON COMMIT PRESERVE ROWS;
Table created.
Slide 35
Slide 36
Commit complete.
SQL> SELECT * FROM t_transaction;
no rows selected =========> the transaction is over, the data is gone
SQL> SELECT * FROM t_session;
C
---------------------------------------data persists for the session
1 row selected.
Dec 24, 2016
Slide 37