Oracle的常用SQL語句

1、創建表空間
create tablespace TBS
2、創建用戶
create user etlhss_y identified by XXX default tablespace TBS
3、賦予權限
grant connect,resource,dba to etlhss_y
4、創建數據庫
CREATE database database_name
5、創建表
CREATE TABLE 表名稱(列名稱1 數據類型,列名稱2 數據類型,列名稱3 數據類型,....)
例子:
CREATE TABLE om_test
(
serial_no number(18,0) DEFAULT 0 NOT NULL,
channel_id varchar2(50) DEFAULT ' ' ,
channel_name varchar2(100) DEFAULT ' ' ,
client_version varchar2(255) DEFAULT ' ' ,
create_time number(14,0) DEFAULT to_number(to_char(sysdate,'yyyymmddhh24miss')) ,
update_datetime number(14,0) DEFAULT to_number(to_char(sysdate,'yyyymmddhh24miss'))
) TABLESPACE TBS;
NOT NULL是表示該字段不能爲空 約束。
DEFAULT 0表示默認值爲 0 。
//添加主鍵
ALTER TABLE om_test ADD CONSTRAINT om_delivery_channel_idx1 PRIMARY KEY(serial_no);
//添加唯一索引
CREATE UNIQUE INDEX om_delivery_channel_idx2ON om_test(channel_name ASC ,client_version ASC );
6、約束:UNIQUE
UNIQUE 約束唯一標識數據庫表中的每條記錄。
Id_P int NOT NULL UNIQUE,
每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
多個列定義唯一約束:
create table test{
。。。
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
}
7、約束:primary key
PRIMARY KEY 約束唯一標識數據庫表中的每條記錄。
主鍵必須包含唯一的值。
主鍵列不能包含 NULL 值。
每個表都應該有一個主鍵,並且每個表只能有一個主鍵。
Oracle:
CREATE TABLE Persons(Id_P int NOT NULL PRIMARY KEY,。。。)
MySQL:
CREATE TABLE Persons(
。。。PRIMARY KEY,(Id_P))
多個列定義 主鍵 約束:
create table test{
。。。
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
}
SQL:
添加:
ALTER TABLE Persons ADD CONSTRAINT pk_PersonIDPRIMARY KEY(Id_P,LastName)
刪除:
ALTER TABLE PersonsDROP CONSTRAINT pk_PersonID
8、約束:foreign key
一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。
CREATE TABLE Orders(Id_O int NOT NULL,OrderNo int NOT NULL,Id_P int,PRIMARY KEY (Id_O),CONSTRAINT fk_PerOrdersFOREIGN KEY (Id_P) REFERENCES Persons(Id_P))
SQL:
添加
ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)REFERENCES Persons(Id_P)
刪除:
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders
9、約束:DEFAULT
DEFAULT 約束用於向列中插入默認值。
CREATE TABLE Persons(。。。City varchar(255) DEFAULT 'Sandnes')
SQL:
添加
ALTER TABLE PersonsALTER COLUMN CitySETDEFAULT 'SANDNES'
刪除
ALTER TABLE PersonsALTERCOLUMN CityDROP DEFAULT
10、索引:CREATE INDEX
表中創建索引,以便更加快速高效地查詢數據。
用戶無法看到索引,它們只能被用來加速搜索/查詢。
CREATE INDEX index_name ON table_name (column_name)
創建索引雖然大大增加了查詢效率,但是 修改更新 效率會變差。
11、Drop
刪除索引數據庫
DROP INDEX index_name
DROP TABLE 表名稱
DROP DATABASE 數據庫名稱
Mysql:
ALTER TABLE table_name DROP INDEX index_name
12、TRUNCATE 清空表數據
TRUNCATE TABLE 表名稱
13、ALTER TABLE修改表結構
ALTER TABLE 語句用於在已有的表中添加、修改或刪除列。
添加
ALTER TABLE table_name ADDcolumn_name datatype
刪除
ALTER TABLE table_name DROP COLUMN column_name
修改
ALTER TABLE table_nameALTER COLUMN column_name datatype
14、CREATE VIEW 創建視圖
視圖是基於 SQL 語句的結果集的可視化的表。
數據庫的設計和結構不會受到視圖中的函數、where 或 join 語句的影響。
CREATE VIEW view_name AS SELECT column_name(s)FROM table_nameWHERE condition
例子:
CREATE VIEW [Category Sales For 1997] AS SELECT DISTINCT CategoryName,Sum(ProductSales)AS CategorySalesFROM [Product Sales for 1997]GROUP BY CategoryName
SELECT * FROM [Category Sales For 1997]
刪除視圖:
DROP VIEW view_name
15、條件 IS NOT NULL
SELECT LastName,FirstName,Address FROM PersonsWHERE AddressIS NOT NULL
16、nvl()
若數據庫數據爲null,使用nvl()可返回0
oracle中nvl()
SQL Server中ISNULL()
Mysql中IFNULL()

17-23 主要用於SELECT查詢

17、Top()
TOP 子句用於規定要返回的記錄的數目。
取前兩條
SELECT TOP 2 * FROM Persons
Oracle
SELECT *FROM PersonsWHERE ROWNUM <= 5
Mysql
SELECT *FROM PersonsLIMIT 5
百分之50
SELECT TOP 50 PERCENT * FROM Persons
18、Like 搜索匹配
在 WHERE 子句中搜索列中的指定模式
SELECT * FROM PersonsWHERE City LIKE 'N%'
SELECT * FROM PersonsWHERE City LIKE '%lon%'
19、通配符 搜索匹配
% 替代一個或多個字符
_ 字符列中的任何單一字符
20、in 搜索範圍
IN 操作符允許我們在 WHERE 子句中規定多個值。
SELECT *FROM table_nameWHERE column_name IN (value1,value2,...)
21、BETWEEN搜索範圍
操作符 BETWEEN ... AND 會選取介於兩個值之間的數據範圍。這些值可以是數值、文本或者日期。
SELECT *FROM table_nameWHERE column_nameBETWEEN value1AND value2
取column_name在value1到value2之間的數值範圍
22、join
用於根據兩個或多個表中的列之間的關係,從這些表中查詢數據。
主鍵和外鍵
自連接
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM Persons, OrdersWHERE Persons.Id_P = Orders.Id_P
等同於
內連接
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P = Orders.Id_PORDER BY Persons.LastName
  • INNER JOIN: 如果表中有至少一個匹配,則返回行(只返回匹配的)
  • LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行(返回匹配的和左表)
  • RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行(返回匹配的和右表)
  • FULL JOIN: 只要其中一個表中存在匹配,就返回行(返回匹配的和不匹配的)
23、UNION 並
UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2
24、Select 查詢
SELECT 列名稱
FROM 表名稱
WHERE 列 運算符 值
AND/OR 列 運算符 值
GROUP BY
HAVING 函數(列)
ORDER BYDESC/ASC

ORDER BY 根據列排序
GROUP BY 子句可以將查詢結果按照某一列數據值進行分組。
GROUP BY 子句通常與統計函數聯合使用
HAVING 因爲where不能對函數,類似sum(OrderPrice)一起使用。當做where使用
25、INSERT 插入
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
26、UPDATE 修改更新
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
27、DETLLE 刪除
DELETE FROM 表名稱 WHERE 列名稱 = 值
DELETE FROM Person WHERE LastName = 'Wilson'
28、查詢 函數
1)AVG() 返回 平均值
2)COUNT()返回 總行數
3)FIRST() 返回指定的字段中第一個記錄的值
4)LAST() 返回指定的字段中最後一個記錄的值。
5)MAX() 返回指定的字段中的最大值
6)MIN() 返回指定的字段中的最小值
7)SUM() 返回指定的字段中值得和
8)UCASE() 返回字段的值轉換爲大寫。
9)LCASE() 返回字段的值轉換爲小寫。
29、分頁查詢
SELECT a2.*
FROM (SELECT a1.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) a1
WHERE ROWNUM<=10) a2
WHERE rn>=6;
指定查詢列、查詢結果排序等,都只需要修改最裏層的子查詢即可。

30、clob轉String

dbms_lob.substr(content)

31、獲取oracle數據庫時間
select to_char(sysdate ,'yyyymmdd') from dual
select to_char(sysdate ,'hh24miss') from dual

32、查詢用戶的所有表
select t.table_name,t.comments from user_tab_comments t

33、查詢用戶和表空間關係
select username,default_tablespace from dba_users;






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章