5、檢視(VIEW)
阿新 • • 發佈:2022-03-26
什麼是檢視?
-
檢視是一種虛擬存在的表,基於 SQL 語句的結果集的視覺化的表。本身是
不具有資料
的,佔用很少的記憶體空間。 - 檢視建立在已有表的基礎上, 檢視賴以建立的這些表稱為基表。檢視的建立和刪除不影響對應的基表。
- 在資料庫中,檢視不會儲存資料,資料真正儲存在資料表中。
- 檢視包含行和列,就像一個真實的表。檢視中的欄位是來自一個或多個數據庫中的真實的表中的欄位。我們可以向檢視新增 SQL 函式、WHERE 以及 JOIN 語句,我們也可以提交資料,就像這些來自於某個單一的表。向檢視提供資料內容的語句為 SELECT 語句, 可以將檢視理解為儲存起來的SELECT語句
建立檢視
1 CREATE [OR REPLACE]
2 [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
3 VIEW 檢視名稱 [(欄位列表)]
4 AS 查詢語句
5 [WITH [CASCADED|LOCAL] CHECK OPTION];
精簡版:
CREATE VIEW 檢視名稱 AS 查詢語句;
檢視檢視
-- 檢視資料庫的表物件、檢視物件
SHOW TABLES;
-- 檢視檢視的結構
DESC / DESCRIBE 檢視名稱;
-- 檢視檢視的屬性資訊(顯示資料表的儲存引擎、版本、資料行數和資料大小等)
SHOW TABLE STATUS LIKE ' 檢視名稱';
-- 檢視檢視的詳細定義資訊
SHOW CREATE VIEW 檢視名稱;
刪除檢視
-- 刪除檢視只是刪除檢視的定義,並不會刪除基表的資料
DROP VIEW IF EXISTS 檢視名稱;
示例:列出流水錶詳細資訊
-
建立賬號表
CREATE TABLE account( account_id VARCHAR(36) PRIMARY KEY, -- 使用UUID生成隨機的唯一值 account_name VARCHAR(15) NOT NULL, balance DECIMAL(10,2) NOT NULL, reg_date DATE
-
插入兩條記錄到賬號表
INSERT INTO account(account_id,account_name,balance,reg_date) VALUES(UUID(),'張三',1000,CURDATE()); INSERT INTO account(account_id,account_name,balance,reg_date) VALUES(UUID(),'李四',2000,CURDATE());
-
建立流水錶
create table transrecord( trans_id varchar(36) primary key, -- 使用UUID_SHORT函式生成隨機的唯一值 sender_id varchar(36), receiver_id varchar(36), trans_balance decimal(10,2), trans_datetime datetime );
-
插入測試記錄到賬號表
INSERT INTO transrecord(trans_id,sender_id,receiver_id,trans_balance,trans_datetime) VALUES( UUID_SHORT(), 'aec59761-ab3b-11ec-b6ed-0a0027000018', -- 張三 'aec8301d-ab3b-11ec-b6ed-0a0027000018', -- 李四 200, SYSDATE()); INSERT INTO transrecord(trans_id,sender_id,receiver_id,trans_balance,trans_datetime) VALUES( UUID_SHORT(), 'aec8301d-ab3b-11ec-b6ed-0a0027000018', -- 李四 'aec59761-ab3b-11ec-b6ed-0a0027000018', -- 張三 100, SYSDATE());
-
示例列出流水錶詳細資訊
-- 流水號傳送者ID傳送者姓名收款者ID 收款者姓名轉賬金額轉賬時間 SELECT a.trans_id, a.sender_id,b.account_name, a.receiver_id,c.account_name, a.trans_balance,a.trans_datetime FROM transrecord a INNER JOIN account b ON a.sender_id=b.account_id INNER JOIN account c ON a.receiver_id=c.account_id;
-
查詢指定使用者的轉出詳情
SELECT a.trans_id, a.sender_id,b.account_name, a.receiver_id,c.account_name, a.trans_balance,a.trans_datetime FROM transrecord a INNER JOIN account b ON a.sender_id=b.account_id INNER JOIN account c ON a.receiver_id=c.account_id where a.sender_id='aec8301d-ab3b-11ec-b6ed-0a0027000018';
-
查詢指定使用者的轉入詳情--轉入
SELECT a.trans_id, a.sender_id,b.account_name, a.receiver_id,c.account_name, a.trans_balance,a.trans_datetime FROM transrecord a INNER JOIN account b ON a.sender_id=b.account_id INNER JOIN account c ON a.receiver_id=c.account_id where a.receiver_id='aec8301d-ab3b-11ec-b6ed-0a0027000018';
示例:查詢流水賬詳情
建立檢視
create or replace view view_transrecord
as
select a.trans_id as transId,
a.sender_id as senderId,
b.account_name as sendName,
a.receiver_id as receiverId,
c.account_name as receiverName,
a.trans_balance as transBalance,
a.trans_datetime as transDatetime
FROM transrecord a INNER JOIN account b ON a.sender_id=b.account_id
INNER JOIN account c ON a.receiver_id=c.account_id;
①查詢流水賬詳情
select *from view_transrecord;
②查詢指定使用者的轉出詳情
select *from view_transrecord
where senderId = 'aec8301d-ab3b-11ec-b6ed-0a0027000018';
③查詢指定使用者的轉入詳情
select *from view_transrecord
where receiverID = 'aec59761-ab3b-11ec-b6ed-0a0027000018';