SQL學習04 SQL中級查詢

2021-10-04 20:52:32 字數 2837 閱讀 9552

sql提供了連線運算的其他形式,包括能夠指定顯式的連線謂詞,能夠在結果中包含被自然連線排除在外的元組。

它等價於下面這條語句:

它與自然連線的區別在於:它的連線結果會產生兩個id,分別是student.id,takes.id,然而我們的自然連線只會產生乙個id屬性。

a join b using…和 a join b on …的區別(using後面跟屬性名字,on後面跟謂詞)

外連線:

用自然連線(內連線)可能會丟失一些資料,比如將學生表和選課表做內連線,就會漏掉這些學生的資料,他們可能沒有選任何課程。這時候,使用外連線可以保留這些丟失的資訊。

上面的例子(學生表和選課表作左外連線):

select

*from student natural

left

outer

join takes;

當遇到沒有選課的學生時,保留他們在student**中的資訊,然後他們在takes中的資訊設定為null(原本就沒有匹配到takes,因為沒有選課)

我們還可以順便把那些沒選課的人給揪出來:

select id

from student natural

left

outer

join takes

where course_id is

null

on與where的區別:對比下面這兩條語句:

使用on的語句可以獲取到沒有選課的學生資訊,而where不行,因為on條件是外連線宣告的一部分,而where子句不是,注意外連線只為那些對相應內連線結果沒有貢獻的元組補上空值並加入結果。

讓所有使用者都看到整個邏輯模型是不合適的。出於安全考慮,可能需要向使用者隱藏特定的資料。檢視可以完成這個要求。

定義:sql 允許通過查詢來定義「虛關係」,它在概念上包含查詢的結果。虛關係並不預先計算和儲存,而是在使用虛關係的時候才通過執行查詢被計算出來。任何像這種不是邏輯模型的一部分,但作為虛關係對使用者可見的關係稱為視圍(view)。

當我們定義-個檢視時,資料庫系統儲存檢視的定義本身,而不儲存定義該檢視的查詢表示式的執行結果。

格式

e.g.給出每個系中所有教師的工資總和:

乙個檢視可以被用到定義另乙個檢視的表示式中

列出physics繫在2023年秋季學期所開設的所有課程段:

列出physics繫在2023年秋季學期在watson大樓開設的所有課程段的標識和房間號:

特定資料庫系統允許儲存檢視關係,但是它們保證:如果用於定義檢視的實際關係改變,檢視也跟著修改。這樣的檢視被稱為物化梘圖(materialized view)。

在更新檢視時,需要更新實際的關係,比如:更新檢視faculty

這個插入必須表示為對關係instructor的插入,因為instructor是構造檢視faculty的實際關係,但是上面的插入沒有指出薪水是多少,有兩種解決辦法:

但是賦值null也會遇到問題,比如:

因為沒有指出dept_name的值,假設賦值為null,那麼instructor表和department表的dept_name都是null,但是兩個null是不會相等的,不滿足檢視的定義,所以不能設定為null

因為這些以及其他問題,不同的資料庫指定了不同的條件以允許資料庫的更新。

一般來說,如果定義檢視的查詢對下列條件都滿足,則說這個sql檢視是可更新的:

事務(transaction)由查詢和(或)更新語句的序列組成。sql標準規定當一條語句被執行,就隱式地開始了乙個事務。下列sql語句可以結束乙個事務:

現實中可能出現這種情況,a從銀行把錢打給了b,a扣了錢,但是在b收到錢之前系統崩潰了,這時,就會出現銀行賬戶的資訊不一致

解決的辦法是:讓事務具有原子性(atomic)

完整性約束保證授權使用者對資料庫所做的修改不會破壞資料的一致性。因此,完整性約束防止的是對資料的意外破壞。

not null約束

grant語句用於授予許可權:

舉例:用revoke語句來**許可權:

書上提供的術語回顧:

04 SQL簡介和資料定義語言

資料定義語言 ddl create alter drop 資料操縱語言 dml insert delete update select 事務控制語言 tcl commit rollback 資料控制語言 dcl grant revoke 資料定義語言用於改變資料庫結構,包括建立 更改和刪除資料庫物件...

資料庫學習04 SQL學習 增 刪 查 改

在前面資料庫學習03裡面也學到了資料庫的建立,以及表的建立,還有一些相關操作,接下來我們就可以像表裡面插入資料,03裡面不懂的,在本章節,將會細化。一 增 增 顧名思義,無非就是在表中插入資料,前面也提到了,向表中插入資料的語法為 insert 表名 values 值 第一步 我們先來建立乙個資料庫...

資料庫系統概念學習 04 SQL高階

繼續sql的深入學習,涉及到sql查詢的複雜形式 檢視定義 事務 完整性約束和許可權。1.join表示式 在之前有講過natural join,因避免遍歷計算笛卡爾積而相比較傳統的where子句效率更高 在指定關注的屬性時使用join using 句式,此外,join有個很有用的謂詞修飾on,對於內...