結構化查詢語言SQL及其分類

簡單瞭解SQL(結構化查詢語言)

結構化查詢語言(英語:Structural Query Language,縮寫:SQL),是一種特殊目的之編程語言,用於數據庫中的標準數據查詢語言,IBM公司最早使用在其開發的數據庫系統中。1986年10月,美國國家標準學會對SQL進行規範後,以此作爲關係式數據庫管理系統的標準語言(ANSI X3. 135-1986),1987年得到國際標準組織的支持下成爲國際標準。不過各種通行的數據庫系統在其實踐過程中都對SQL規範作了某些編改和擴充。所以,實際上不同數據庫系統之間的SQL不能完全相互通用。

SQL分類:

  • 數據查詢語言(DQL)
  • 數據定義語言(DDL)
  • 數據操縱語言(DML)
  • 數據控制語言(DCL)
  • 事務控制語言(TCL)

圖片可在新窗口中打開,放大進行查看

1.數據查詢語言(DQL)

數據查詢語言(Data Query Language, DQL)是SQL語言中,負責進行數據查詢而不會對數據本身進行修改的語句,這是最基本的SQL語句。數據查詢語言DQL基本結構是由SELECT子句,FROM子句,WHERE子句組成的查詢塊:

常規字段
SELECT <字段名錶>
FROM <表或視圖名>
WHERE <查詢條件>

常用字段

SELECT [要提取的字段,或是用"*"代表全部的字段]

FROM [要提取的數據來源對象,包含數據表,視圖表等] -- 可搭配JOIN做連接。

WHERE [提取的查詢條件] -- WHERE可有可無。

GROUP BY [要做聚合的分組字段] -- GROUP BY在使用聚合指令時必須要有。

HAVING [要做爲條件的聚合字段] -- 要使用聚合函數作爲條件時使用

ORDER BY [要排序的字段和方向] -- ORDER BY可有可無,若沒有則是按照查詢引擎的輸出順序爲主。

2.數據定義語言(DDL)

1.CREATE - to create objects in the database 創建對象,可以用來創建用戶、數據庫,數據表,視圖,存儲過程,存儲函數,觸發器,索引等。
2.ALTER - alters the structure of the database 修改對象,負責數據庫對象修改的指令。
3.DROP - delete objects from the database 刪除對象,只需要指定要刪除的數據庫對象名即可。
4.TRUNCATE - remove all records from a table, including all spaces allocated for the records are removed
Truncate table 表名 速度快,而且效率高,因爲:
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。
DELETE 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置爲該列的種子。如果想保留標識計數值,請改用 DELETE。如果要刪除表定義及其數據,請使用 DROP TABLE 語句。
對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由於 TRUNCATE TABLE 不記錄在日誌中,所以它不能激活觸發器。

DDL使用示例

-創建一個名爲p_student的表
create table p_student(
sno varchar2(5) not null primary key,
sname varchar2(50) not null,
ssex varchar2(1) not null,
sage varchar2(2));

創建之後表狀態見下圖

--修改列的類型
alter table p_student modify(sno number(4));
--重命名一個列
alter table p_student rename column sage to age;
--增加一個數據列
alter table p_student add(score number(2));
--刪除一個數據列
alter table p_student drop column ssex;
--重命名錶名稱
alter table p_student rename to student;

修改完成表結構後的表的屬性狀態見下圖

--刪除已存在的p_student表
drop table student;

 

3.數據操縱語言(DML)

數據操縱語言(Data Manipulation Language, DML)是SQL語言中,負責對數據庫對象運行數據訪問工作的指令集,以INSERT、UPDATE、DELETE三種指令爲核心,分別代表插入、更新與刪除。

1.INSERT - insert data into a table 添加數據,將數據插入到數據庫對象中的指令,可以插入數據的數據庫對象有數據表以及可更新查看錶兩種。
2.UPDATE - updates existing data within a table 更新數據,依給定條件,將匹配條件的數據表中的數據更新爲新的數值。
3.DELETE - deletes all records from a table, the space for the records remain 刪除數據。

DML使用示例

INSERT INTO 表(列1 ,列2 …) VALUE (表達式1 ,表達式2 .. ) ;

INSERT INTO 表(列1 ,列2 …) VALUES (表達式1 ,表達式2 .. ) ,(表達式1 ,表達式2 .. ) ,...;

--不加列選項默認全插入
insert into student values(1,'abc',23,99);

--插入指定的列
insert into student (sno,sname,age) values (2,'oka',24);

利用INSERT語句還可以從另一個表中複製數據,這時要在INSERT語句中使用子查詢,對應的語法格式爲:
INSERT INTO 表1 (列1 ,列2 …)
SELECT 列 1 ,列2 ••• FROM 表2 WHERE 條件表達式;

這裏的SELECT子句實際上是一個子查詢。

執行這樣的語句時,首先執行SELECT 子句,將返回的查詢結果作爲指定列的值,插入到表中。
用這種方法可以-次向表中插入多行,但是需要注意的是,表指定的各列要與SELECT子句中的各列在排列順序、數據類型和數量上保持一致。

 --複製表

create table student_copy as select * from student;

--修改表中的數據
update student_copy set sno=3 where sno=1;
update student_copy set sno=4 where sno=2;

--整個記錄的每一列都插入
insert into student select * from student_copy where sno=3;

--插入記錄的指定列
insert into student (sno,sname) select sno,sname from student_copy where sno=4;

操作完畢數據狀態見下圖

UPDATE可以一次修改一行,也可以修改多行。
這條語句的語法格式爲:

UPDATE 表名稱 SET 列名稱=表達式1, 列名稱=表達式2 WHERE 條件;

UPDATE語句通過SET子句爲指定列指定新值,將列值修改爲指定的表達式。

在SET子句中指定所有需要修改的列。
在默認情況下,UPDATE語句不需要WHERE子句,這時UPDATE語句將修改表中的所有行。

如果通過WHERE子句指定了條件,那麼UPDATE語句只修改滿足條件的行。

在UPDATE語句的WHERE子句中,也可以使用子查詢。這時的條件並不是一個確定的條件,而是依賴於對另一個表的查詢。

--不加where條件的話默認修改表中的所有行
update student set score=66;

--更新指定列
update student set sname='xiaoming',age='20' where sno=4;

--使用子查詢進行更新
update student set (sname,age) =(select sname,age from student_copy where sno=3) where sno=4;
update student set sname=(select sname from student_copy where sno=3),age=(select age from student_copy where sno=4) where sno=3; 
update student set sname=(select sname from student_copy where sno=3),age=(select age from student_copy where sno=4);

 

DELETE語句的語法格式爲:

DELETE FROM 表名稱 WHERE 條件;

在默認情況下, DELETE語句可以不使用WHERE子句,這時將刪除表中的所有行。

如果希望只刪除表中的一部分數據,需要通過WHERE指定條件。

在DELETE語句的WHERE子句也可以使用子查詢,子查詢與SELECT語句中的子查詢用法相同。

--刪除指定行數據
delete from student where sno=4;
--刪除名稱爲abc的行數據
delete from student where sname='abc'
--刪除全部數據
delete from student;

--使用子查詢的刪除
delete from student where sname=(select sname from student_copy where sno=3);
delete from student where sname in (select sname from student_copy);

4.數據控制語言(DCL)

數據控制語言 (Data Control Language) 在SQL語言中,是一種可對數據訪問權進行控制的指令,它可以控制特定用戶賬戶對數據表、查看錶、預存程序、用戶自定義函數等數據庫對象的控制權。由 GRANT 和 REVOKE 兩個指令組成。DCL以控制用戶的訪問權限爲主,GRANT爲授權語句,對應的REVOKE是撤銷授權語句。

1.GRANT - gives user's access privileges to database 授權,允許對象的創建者給某用戶或某組或所有用戶(PUBLIC)某些特定的權限。
2.REVOKE - withdraw access privileges given with the GRANT command 收回已經授予的權限,可以廢除某用戶或某組或所有用戶訪問權限

DCL使用示例

--DCL數據控制語言
/**
系統權限:是在數據庫中執行某種特定操作的權利,系統權限並不針對某個特定的對象,而是針對整個數據庫範圍。常用的系統權限有:
CREATE SESSION 連接到數據庫上
CREATE SEQUENCE 創建序列,序列是一系列數字,通常用來自動填充主鍵列
CREATE SYNONYM   創建同名對象
CREATE TABLE  創建表
CREATE ANY TABLE 在任何模式中創建表
DROP TABLE 刪除表
DROP ANY TABLE    刪除任何模式中的表
CREATE PROCEDURE 創建存儲過程
EXECUTE ANY PROCEDURE 執行任何模式中的存儲過程
CREATE USER 創建用戶
DROP USER   刪除用戶
CREATE VIEW 創建視圖

對象權限
是針對特定的模式對象執行操作的權利,只能針對模式對象來設置和管理對象全新啊,這些對象包括表、視圖、存儲過程等常用的對象權限有:

SELECT 允許執行查詢操作
INSERT 允許執行插入操作
UPDATE 允許執行修改操作
DELETE 允許執行刪除操作
EXECUTE 語序執行存儲過程
**/
--創建用戶
create user xiaoming identified by 123;
--給用戶分配權限
grant create session,create user,create table to xiaoming;
--收回用戶某一權限
revoke create table from xiaoming;
--查看當前用戶下所對應的系統權限和對象權限
select * from user_sys_privs;
select * from user_tab_privs;

5.事務控制語言(TCL)

什麼是事務:用於確保數據的一致性,由一組相關的DML組成, 該組DML的操作要麼全確認,要麼全取消。事務控制是指對關係型數據庫管理系統(RDBMS)裏可能發生的各種事務的管理能力。

COMMIT - save work done 提交
SAVEPOINT - identify a point in a transaction to which you can later roll back 保存點
ROLLBACK - restore database to original since the last COMMIT 回滾
SET TRANSACTION - Change transaction options like what rollback segment to use 設置當前事務的特性,它對後面的事務沒有影響。

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