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