1. 程式人生 > >Oracle SQL語法例項合集

Oracle SQL語法例項合集

如需轉載請註明出處https://my.oschina.net/feistel/blog/3052024
目的:迅速啟用Oracle SQL
參考:《Oracle從入門到精通》

----------------------------------------------------------------------------------------------------------------
DDL
create/drop/alter。

--建立表 產地
create table origin (
OriginId         varchar2(10),
OriginName         varchar2(20),
constraint pk_origin primary key(OriginId)
);

-- 建立表 商品
create table productinfo (
ProductId         varchar2(10),
ProductName     varchar2(20) not null,
ProductPrice     number(8,2) not null,
OriginId         varchar2(10)
-- 主鍵約束
-- constraint pk_productinfo primary key(ProductId)
--外來鍵約束
/*constraint fk_productinfo foreign key(OriginId)
references origin(OriginId)
-- 級聯刪除(主鍵所在表的記錄刪除時,該表記錄也被刪除)
on delete cascade*/
);

-- 刪除欄位
alter table productinfo
drop column ProductPrice;

-- 新增欄位
alter table productinfo
add ProductPrice number(8,2);

-- 修改欄位型別
alter table productinfo
modify ProductPrice number(10,2);

-- 新增主鍵約束
alter table productinfo
add constraint pk_productinfo primary key(ProductId);

-- 移除主鍵約束
alter table productinfo
drop constraint pk_productinfo;

-- 新增外來鍵約束
alter table productinfo
add constraint fk_productinfo foreign key(OriginId)
references origin(OriginId)
-- 級聯刪除(主鍵所在表的記錄刪除時,該表記錄也被刪除)
on delete cascade;

-- 刪除外來鍵約束
alter table productinfo
drop constraint fk_productinfo;

-- 新增check約束
alter table productinfo
add constraint ch_productinfo check(ProductPrice>0);

-- 刪除check約束
alter table productinfo
drop constraint ch_productinfo;

-- 新增unique約束
alter table productinfo
add constraint uni_productinfo unique(ProductPrice);

-- 刪除unique約束
alter table productinfo
drop constraint uni_productinfo;

-- 設定not null約束
alter table productinfo
modify OriginId not null; 

-- 取消not null約束
alter table productinfo
modify OriginId null; 

-- 刪除表 商品
drop table productinfo;

-- 刪除表 產地
drop table origin;

----------------------------------------------------------------------------------------------------------------
DML
對資料庫中的資料進行操作,增、刪、改,查作為DQL。

-- 增加資料
insert into origin(OriginId, OriginName)
values('1', '廣東省深圳市');
insert into origin(OriginId, OriginName)
values('2', '海南省萬寧市');
insert into origin
values('3', '廣東省深圳市');
insert into origin
values(null, '廣東省深圳市');
insert into productinfo
values('1', '牙刷', 9.9, '1');
insert into productinfo
values('2', '牙膏', 16, '2');
insert into productinfo
values('3', '牙刷', 12, '2');
insert into productinfo
values('4', '牙刷', 16, '2');
insert into productinfo
values('5', '牙刷', 100, '100');

/*-- 通過錶快速建立子表
create table origin2 as
select OriginId, OriginName 
from origin;
drop table origin2;*/

-- 修改資料
update origin set OriginName = '廣東省廣州市' where OriginId = '3';

-- 刪除資料
delete from origin where OriginId = '3';

-- 截斷表(比 delete from origin 快)
truncate table origin;

----------------------------------------------------------------------------------------------------------------
DQL

-- 降序查詢desc(預設升序asc)
-- 多列排序
-- ull值預設為最大(可以修改nulls last)
select OriginId 產品ID, OriginName 產品名稱 
from origin 
order by 2 asc, OriginId desc 
nulls first;

--Oracle架構與MySQL不同:
--1)Oracle,一個使用者對應一個模式,這裡的模式對應MySQL中的資料庫。
----對於Oracle來說沒有資料庫這個說法。
----Oracle例項下有多個模式,模式下有多個表。
--2)MySQL,一個使用者可以管理多個數據庫。
----MySQL下有多個數據庫,資料庫下有多個表。
----MySQL中新建資料庫,可以看作Oracle例項下新建模式,即建立新使用者,因為一個使用者對應一個模式。
-- 查詢其他模式下的表
select system.help.info from system.help;

-- ||表示連線字串
select ProductName, ProductPrice || '*0.8=' || ProductPrice*0.8 as DiscountPrice
from productinfo;

-- 除去重複
select distinct(OriginName) from origin;

-- 條件查詢
-- 不等於也可以用!=
-- 模糊查詢(_匹配單字元,%匹配多個字元)
-- in在某個範圍之內
-- is null查詢空
select * 
from origin
where OriginName <> '海南省萬寧市' 
and OriginId between '1' and '3'
and OriginName like '%廣東%'
and OriginId in('1','2')
and OriginId is not null;

-- group by / having子句
-- 先where篩選再分組
-- 根據產品名分組後再根據產地ID分組,計算平均價格,最後having篩選
select ProductName, avg(ProductPrice) 平均價格, OriginId
from productinfo
where OriginId <= 2
group by ProductName, OriginId
having avg(ProductPrice) <= 10;

-- 子查詢
-- >=any表示大於它的最小值
-- <=any表示小於它的最大值
-- >=all表示大於它的最大值
-- <=all表示小於它的最小值
select *
from productinfo
where ProductPrice >=
any (select ProductPrice from productinfo where ProductId != '1')
and ProductPrice <=
all (select ProductPrice from productinfo where ProductId != '1');

-- 連線查詢 內連線=簡單連線
select p.ProductId, p.ProductName, o.OriginName
from productinfo p, origin o
where p.OriginId = o.OriginId;
-- 另一種寫法(內連線)
-- select p.ProductId, p.ProductName, o.OriginName
-- from productinfo p inner join origin o on p.OriginId = o.OriginId;

-- 外連線
-- left join左外連線
-- right join右外連線
-- full join全連線
select p.ProductId, p.ProductName, o.OriginName
from productinfo p left join origin o on p.OriginId = o.OriginId;
--另一種方法(左外連線)
select p.ProductId, p.ProductName, o.OriginName
from productinfo p, origin o
where p.OriginId = o.OriginId(+);

-- 自連線
-- 查詢自身價格相同的商品
select p1.ProductId, p1.ProductName
from productinfo p1, productinfo p2
where p1.ProductPrice = p2.ProductPrice
and p1.ProductName <> p2.ProductName;

----------------------------------------------------------------------------------------------------------------
DCL

 

----------------------------------------------------------------------------------------------------------------
如需轉載請註明出處https://my.oschina.net/feistel/blog/3052024
參考:《Oracle