/*常用的偽列有rowid和rownum*/
select rowid, orders.* from orders;
--orders表的結果
create table orders
(c1 number(5) not null,
c10 number(20) not null,
c20 varchar2(20) not null
)--orders表的資料
insert into orders (c1, c10, c20)
values (1, 2, 'sa');
insert into orders (c1, c10, c20)
values (1, 2, 'sa');
insert into orders (c1, c10, c20)
values (1, 2, 'sa');
insert into orders (c1, c10, c20)
values (1, 2, 'sa');
insert into orders (c1, c10, c20)
values (2, 3, 'oop');
insert into orders (c1, c10, c20)
values (1, 2, 'sa');
insert into orders (c1, c10, c20)
values (1, 2, 'sa');
insert into orders (c1, c10, c20)
values (1, 2, 'sa');
insert into orders (c1, c10, c20)
values (2, 3, 'oop');
insert into orders (c1, c10, c20)
values (2, 3, 'oop');
insert into orders (c1, c10, c20)
values (2, 3, 'oop');
insert into orders (c1, c10, c20)
values (2, 3, 'oop');
insert into orders (c1, c10, c20)
values (1, 2, 'sa');
commit;
--1)重複查詢資料
select *from orders group by c1,c10,c20
select distinct * from orders;
select * from orders o where rowid=
(select max(rowid) from orders oo where oo.c1=o.c1 and oo.c10=o.c10 and oo.c20=o.c20)
select * from orders o where rowid in
(select max(rowid) from orders group by c1,c10,c20)
--2)刪除重複的資料
select rowid, orders.* from orders;
delete from orders
where rowid not in
(select max(rowid) from orders group by c1,c10,c20)
/* 集合操作符
union(聯合)
union all(聯合所有)
intersect(交集)
minus(減集)*/
如果選擇列表中包含有表示式或者函式,那麼必須為表示式或函式定義列別名
--1、uinon:無重並集,並以第一列的結果進行公升序排序
select *from emp where deptno=10
union
select * from emp where sal>500
--2、uinon all:有重並集,不對結果集排序
select *from emp where deptno=10
union all
select * from emp where sal>500
--3、intersect:交集,只返回兩個查詢共同返回的行
select *from emp where deptno=10
intersect
select * from emp where sal>500
--4、minus:差集,採用第乙個查詢返回的行,減去第二個查詢中也同樣返回的行,最後返回剩下的行
select * from emp where sal>500 --15
minus
select *from emp where deptno=10 --3
/*連線操作符*/
select 'aaa'||1001 from dual
--(一)轉換函式將值從一種資料型別轉換為另一種資料型別
--常用的轉換函式
--to_char (x[[c2],c3])【功能】將日期或資料轉換為char資料型別
/*x是乙個date或number資料型別。
c2為格式引數
c3為nls設定引數*/
select to_char(1210.73, '9999.999') from dual;
select to_char(1210.73, '$9,999.00') from dual;
select to_char(sysdate,'yyyy-mm-dd'),to_char(sysdate,'dl'),to_char(sysdate,'ds')from dual;
--to_date(x[,c2[,c3]])【功能】將字串x轉化為日期型
select to_date('201607','yyyymm'),to_date('2008-12-31 12:31:30','yyyy-mm-dd hh24:mi:ss')
from dual;
--to_number(x[[,c2],c3])【功能】將字串x轉化為數字型
select to_number('199912')+10,to_number('450.05') from dual;
--查詢僱傭日期》1981 的員工資訊
select * from emp;
--oracle有預設的日期格式(日-月-年)
select * from emp where hiredate>'20-12月-1981'
--to_char
select * from emp where to_char(hiredate,'ds')>'1982-01-23'
--員工編號與姓名連在一起
select empno||'_'||ename,sal+comm from emp;
/*轉換空值的函式
nvl
nvl2
decode*/
/*【語法】nvl (expr1, expr2)
【功能】若expr1為null,返回expr2;expr1不為null,返回expr1。*/
select nvl('','xx'),nvl('aa','xx') from dual;
select * from orders
select c20,nvl(c20,'empty') from orders;
/*【語法】nvl2 (expr1, expr2, expr3)
【功能】expr1不為null,返回expr2;expr2為null,返回expr3。
expr2和expr3型別不同的話,expr3會轉換為expr2的型別 */
select nvl2('','xx','john'),nvl2('aa','xx','john') from dual;
select c20,nvl2(c20,c20,'null') from orders;
/*decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值)
【功能】根據條件返回相應值
【引數】c1, c2, ...,cn,字元型/數值型/日期型,必須型別相同或null
注:值1……n 不能為條件表示式,這種情況只能用case when then end解決*/
select c20,decode(c20,'oop','oop','sa','sa','aa','aa','empty') from orders;
select emp.* ,decode(deptno,'10','財務部','20','公關部','30','銷售部') from emp;
Oracle常用的函式
1 判斷表是否存在 create or replace function public f is table exist v table en name character varying 8000 char returns integer as i count int default 0 begi...
Oracle常用的函式
1 把date資料轉為特定輸出型的字串 2 處理數字型資料 9相當於萬用字元 最終值是 日期 月數量,資料型別也是date型。一般月數量為負數,舉個例子 從employ表查詢列出來公司就職時間超過24年的員工名單,但是表中只有就職起始日期,所以需要用到這個函式了。select name,startd...
oracle的常用函式
1.nvl nvl函式的格式如下 nvl expr1,expr2 含義是 如果oracle第乙個引數expr1為空,那麼顯示第二個引數的值為expr2,如果第乙個引數的值expr1不為空,則顯示第乙個引數本來的值。2.nvl2 nvl2函式的格式如下 nvl2 expr1,expr2,expr3 含...