Orcle資料庫之SQL基礎
一、管理表
1.認識表:
表其實是我們儲存資料的一個基本單位。
在資料庫中的表都是一個二維結構;在一張表中,每一列的資料必須具有相同的資料型別;列名要具有唯一性每一行的資料也要保證其唯一性。
2.資料型別:
(1)字元型資料型別:
固定長度的資料型別: CHAR(n)型別;-- CHAR型別的n的最大值是2000; NCHAR(n)型別;-- NCHAR型別的n的最大值是1000; 可變長度的資料型別: VARCHAR2(n)型別;-- VARCHAR2(n)型別的n最大值是4000; NVARCHAR(n)型別;-- NVARCHAR(n)型別的n的最大值是2000;用於儲存Unicode格式的資料,更適合儲存中文資料。
(2)數值型資料型別:
NUMBER(p,s)型別:是Oracle中比較常用的的一個數值型,p在這裡代表這有效數字,而s則可以理解為效數點後的位數
-- 例:NUMBER(5,2)==有效數字是五位,保留兩位小數。
FLOAT(n)型別:主要是用來儲存二進位制資料,還能表示二進位制的位數是1~126位
(3)日期型資料:
DATE型別:DATE型別的儲存範圍是從公元前4712年1月1日到公元9999年12月31日,DATE型別可以精確到秒的資料型別。
TIMESTAMP型別:時間戳型別,能精確到小數秒的資料型別。
(4)其他型別:
存放大物件的資料: BLOB型別(以二進的形式來存放資料,最大值為4GB) CLOB型別(以字串的形式來存放資料,最大值為4GB)
3.管理表:
(1)建立表:
建立表的基本語法:
CREATE TABLE table_name -- 在同一個使用者下,表名要是唯一的
{
columu name datatype,
....
}
查看錶裡面的欄位資訊 :
desc table_name
(2)修改表:
alter table table_name add column_name datetype; -- 向表中新增欄位 alter table table_name modify column_name datatype; -- 修改欄位型別 alter table table_name drop cloumn column_name;-- 刪除欄位 alter table table_name rename column column_name to new_name;-- 修改欄位名 rename table_name to new_table_name;-- 修改表名
(3)刪除表:
DELETE FROM table_name [WHERE conditions];
delete | truncate | drop | |
---|---|---|---|
效果 | 只刪除資料 | 只刪除資料 | 刪除表結構、約束、觸發器、索引、... |
語言區別 | DML(事務提交後生效) | DLL(立即生效) | DLL(立即生效) |
速度 | 慢 | 快 | 最快 |
二、操作表中的資料
1.新增資料
(1)向表userinfo中新增資料:
-- 示例:
INSERT INTO table_name(column1,column2,…) VALUES(value1,value2,…);
-- sysdate是獲取當前日期
insert into userinfo values(1,‘xxx’,‘123123’,‘[email protected]’,sysdate);
(2)建立表userinfo2的時候,給表中設定預設值
-- DEFAULT關鍵字代表預設,sysdate代表當前時間
create table userinfo2
(
id number(6,0),
dates date DEFAULT sysdate
);
向表userinfo2中新增資料
insert into userinfo2(id) values(1);
(3)向表userinfo中新增預設值
alter table userinfo modify email default ‘無’;
insert into userinfo(id) values(3);
-- 不想要預設值的時候,直接賦予值就行
insert into userinfo(id,email) values(4,‘[email protected]’)
(4)複製表table_old的資料到表table_new
-- 在建表時複製
create table table_new as select column1,...|* from table_old;
-- 在新增資料是複製
insert into table_name [(column1,...)] select column1,...|* from table_old;
2.修改資料
Update table_name Set column1=value1,column2=value2,...[where conditions]
(1)無條件修改
(2)有條件修改
3.刪除資料
DELETE FROM table_name [WHERE conditions];
三、查詢語句
1.基本查詢語句:
-- FROM (可以多表查詢) WHERE 子句可帶多個條件 DISTINCT 顯示不重複資料
select [Distinct] 列名 .. From 表名 [where condition]
2.在sqlplus中設定格式
(1)作用:配合select語句使用,設定查詢結果顯示的格式,不會修改資料庫表字段。
(2)給欄位設定別名:
-- 設定返回紀錄每行的寬度,超過寬度N則截掉,不夠這個寬度則補空格
SET LINESIZE N
-- COLUMN 可以簡寫成COL
COLUMN column_name HEADING new_name;
(3)設定欄位的格式化樣式:
COLUMN column_name FORMAT dataformat;
-- 如果是字元型別的值,只能設定它顯示的長度;
-- 其中a後面跟數字表示字串顯示長度,例:a10 表示顯示10位的長度的字串;
-- 數字則用‘9’代表一位,例:999.9 表示整數位為三位,小數位為一位;
-- 如果設定的長度超出資料最大長度,則用‘#’顯示;
-- 還可以在數字前面加‘$’,例:$999.9 則查詢後顯示的結果會在結果前加上'$'符。
-- a後面跟數字表示字串顯示長度,例:a10 表示顯示10位的長度的字串;
-- 數字則用‘9’代表一位,例:999.9 表示整數位為三位,小數位為一位;
(4)清除設定格式 語法:
COLUMN column_name CLEAR;
3.查詢所有欄位和指定欄位
-- 查詢所有
select * from table_name;
-- 查詢指定欄位
select column1, ... from table_name;
4.給欄位設定別名
-- as可省略
select column_name as new_name, ... from table_name;
5.運算子和表示式
(1)表示式 = 運算元 + 運算子
(2)oracle中的運算元可以是常量、變數和欄位
(3)oracle中的運算子:算數運算子(+ - * /)、比較運算子(> < = >= <= <>)、邏輯運算子(and or not)
(4) () 可以改變運算子優先順序
6.在select語句中使用運算子
-- 在查詢語句中,使用算術運演算法對欄位進行運算,並不影響真正表中的資料
-- 所有工資結果加200
select id,username,salary+200 from users;
select username from users where salary>800 or salary<>1801;
7.帶條件的查詢
邏輯運算子的優先順序:按not、and、or的順序依次遞減; 比較運算子的優先順序高於邏輯運算子
8.模糊查詢
萬用字元的使用: 一個_只能代表一個字元,一個%可以代表0到多個任意字元
-- 查詢以a開頭的使用者名稱
select * from users where username like 'a%';
-- 查詢第二個字元為a的使用者名稱
select * from users where username like '_a%';
9.範圍查詢
(1)BETWEEN...AND/NOT BETWEEN...AND:查詢結果為閉合區間
(2)IN/NOT IN:結果為一個具體的值
10.對查詢結果進行排序
SELECT [DISTINCT] column_name1,...|* FROM table_name [WHERE conditions] ORDER BY column_name1 DESC|ASC,...
-- DESC是降序排序,ASC是升序排序,預設情況下是升序排序