資料庫系統概論—標準語言SQL

来源:https://www.cnblogs.com/wht-de-bk/archive/2023/04/24/17348816.html
-Advertisement-
Play Games

資料庫系統概論—基礎篇(2) 三、關係資料庫標準語言SQL 1、數據定義 1.1基本表的定義、刪除與修改 定義基本表 #建立學生表 CREATE TABLE Student( Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex CHAR(2), ...


資料庫系統概論—基礎篇(2)

三、關係資料庫標準語言SQL

1、數據定義

1.1基本表的定義、刪除與修改

  • 定義基本表
#建立學生表
CREATE TABLE Student(
    Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(20) UNIQUE,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20)
);
  • 修改基本表
ALTER TABLE 表名
ADD 列名 數據;#增
或
DROP 列名 CASCADE/RESTRICT;#刪
或
ALTER 列名 類型 #改
  • 刪除基本表
DROP TABLE 表名 CASCADE/RESTRICT;

CASCADE:與其相關的全部刪除,比如視圖,索引等

RESTRICT:如果有依賴關係或是建立索引等,就不刪除

但是不同的數據管理系統的執行不同

1.2索引的建立與刪除

  • 建立索引
CREATE UNIQUE/CLUSTER INDEX 索引名
ON 表名 (列名1 順序1(ASC/DESC),列名2 順序2...);
  • 刪除索引
DROP INDEX 索引名;

2、數據查詢

  • 基本結構
SELECT ALL/DISTINCT 列名/目標表達式
FROM 表名/視圖名
WHERE 條件#選擇的條件
GROUP BY 列名 HAVING 條件#分組後根據條件選擇,分組:可以理解成大表分為好幾個小表
ORDER BY 列名 順序(ASC/DESC);#查詢結構排序

2.1單表查詢

利用上述的基本結構進行查.

註意:

  • 字元型要加' '號
  • Distinct可以消除重覆的列
  • 如果要顯示一列字元,在SELECT後+’ ‘號
  • 模糊查詢中%表示任意長度,_表示一個字元
  • ESCAPE後+'轉義字元'
  • 與空值有關要用IS NULL或是IS NOT NULL
  • ORDER BY子查詢不能使用
  • WHERE中不能用聚集函數
  • CROUP BY和HAVING同時出現

2.2連接查詢

  • 等值連接和非等值連接

運算符為 = 稱為等值連接(列名不同),其餘為非等值連接

取消重覆列則為自然連接

eg:查詢選修2號課程且成績在90及分以上的所有學生的學號和姓名

Select S1.Sno,S1.Sname
From STUDENT S1,SC S2
Where S1.Sno = S2.Sno and S2.Cno = '2'and S2.Grade >= 90;
  • 自身連接

兩個相同的表自己連接,註意起別名

  • 外連接
#外連接
From STUDENT OUTER SC join on(STUDENT.Sno = SC.Sno);
#左外連接
From STUDENT left OUTER SC join on(STUDENT.Sno = SC.Sno);
#右外連接
From STUDENT right OUTER SC join on(STUDENT.Sno = SC.Sno); 

2.3嵌套查詢

分為不相關查詢(父查詢和子查詢無關)和相關查詢(父查詢和子查詢有關)

  • 帶IN的子查詢(不相關子查詢)

子查詢結果是一個屬性的集合


eg:查詢與"劉晨"所在同一個系的的學生的學號

Select Sno
Fron STUDENT
Where Sdept in(
    Select Sdept
    Fron STUDENT
    Where Sname = '劉晨');


  • 有比較運算符的子查詢

查詢順序:先在父查詢中選擇第一個個元組的信息,將其傳入子查詢中計算結果,再進行比較

子查詢的結果和父查詢傳入的數據有關


eg:查詢每個學生超過自己選修課平均成績的學號和課程號

Select Sno,Cno
From SC X
Where Grade >= (Select AVG(Grade)
                From SC Y
                Where Y.Sno = X.Sno);

也可以先建立一個新的表:學號、成績,再查詢這裡就是基於派生表的查詢

Select Sno,Cno
From SC,(Select Sno AVG_Sno,AVG(Crade) AVG_Grade
         From SC
         GROUP BY Sno) AS AVG_SG
Where SC.Sno = AVG_SG.AVG_Sno AND SC.Crade >=AVG_SG.AVG_Grade;

2.4帶有EXISTS的查詢

EXISTS代表存在量詞,其子查詢只返回“true”或是“false”

將父查詢中的每一條記錄代入到子查詢中去試,要有一個連接的條件像,STUDENT.Sno = SC.Sno

  • EXISTS

將父查詢中的每一條記錄代入到子查詢中去試,滿足則輸出,不滿足則查詢下一條

使用EXISTS時子查詢的Select後面的目標列使用*


eg:查詢選擇1號課程的學生

Select Sno
From STUDENT
Where EXISTE
    (Select *
     From SC
     Where STUDENT.Sno = SC.Sno AND Cno = '1');


  • NOT EXISTS

將父查詢中的每一條記錄代入到子查詢中去試,滿足則查詢下一條;不滿足則輸出


eg:查詢沒用選擇1號課程的學生

Select Sno
From STUDENT
Where NOT EXISTE
    (Select *
     From SC
     Where STUDENT.Sno = SC.Sno AND Cno = '1');


  • 不同形式查詢的替換

並不是所有帶有EXISTS的子查詢都可以替換;帶有IN,比較運算符,ANY和ALL的子查詢可以被帶有EXISTS的子查詢替換

  • 代替全稱量詞

eg:查詢選修了全部課程的學生姓名

#等價於沒有一門課程是他不選的
Select	Name From STUDENT1
Where NOT EXISTS
    (Select * From COURSE
     Where NOT EXISTS
         (Select * From SC
           Where STUDENT1.Sno = SC.Sno and COURSE.Cno = SC.Cno));

相當於兩個for迴圈,從學生表中取出第一個數據,然後遍歷課程表並於SC表進行比較,若都可以對應上則經過兩次取反後輸出,否則從學生表中選取下一條記錄


  • 實現邏輯蘊含

image

Select DISTINCT Sno
From SC S1
Where NOT EXISTS
    (Select * From SC S2
     Where S2.Sno = '201215122' AND NOT EXISTS
     (Select * From SC S3
      Where S3.Sno = S1.Sno and S2.Cno = S3.Cno));

2.5集合查詢

  • 交:INTERSECT

  • 並:UN1ON

  • 差:EXCEPT

3.數據更新

3.1插入數據

  • 插入元組
INSERT INTO 表名 (列名1,列名2...)
VALUES (值1,值2...);
  • 插入子查詢結果

將子查詢結果插入指定表中

INSERT INTO 表名 (列名1,列名2...)
子查詢;

3.2修改數據

修改滿足Where條件的元組

UPDATE 表名
SET (列名1 = 值1/表達式1,列名2 = 值2/表達式2...)
Where...;

  • 帶有子查詢的修改語句
UPDATE 表名
SET (列名1 = 值1/表達式1,列名2 = 值2/表達式2...)
Where 條件 關係 子查詢;

3.3刪除數據

刪除滿足Where條件的元組,若無篩選條件,則刪除全部數據,表還在

DELETE FROM 表名
Where 條件;

4.空值的處理

NULL:當前不知具體值;不該有值;不便填寫。不清楚,不知道

註:

  • 有NOT NULL / 加了UNIQUE / 碼屬性不能為空值
  • NULL的算術運算結果為NULL
  • NULL的比較運算結果為UNKNOWN

5.視圖

  • 是一個虛表
  • 資料庫中只存放視圖的定義,而不存放視圖對應的數據
  • 基本表中數據變化,視圖中數據也隨之變化

5.1定義視圖

CREAT VIEW 視圖名(列名1,列名二...)
AS 子查詢
WITH CHECK OPTION;#對於視圖的操作都有上述子查詢的Where約束

註:視圖後的列名要不不寫,要不全寫

​ 創建的結果是把視圖的定義存在數據字典,不執行SELECT語句

​ 基於一個表的視圖叫做行列子集視圖

5.2刪除視圖

DROP VIEW 視圖名;
#CASCADE:強制刪除,可選

5.3查詢視圖

和上面的數據查詢差不多,將表名換成視圖名即可

5.4更新視圖

和上述的數據更新差不多...

不是所有的視圖都可以更新,行列子集視圖可以更新,其他視情況而定

5.5視圖作用

  • 視圖能簡化用戶操作

  • 視圖使用戶能以多種角度看待同同一數據

  • 視圖對重構資料庫提供了一定程度的邏輯獨立性

  • 視圖能夠對機密數據提供安全保護

  • 適當利用視圖可以更清晰地表達查詢


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 功能03-優惠券秒殺01 4.功能03-優惠券秒殺 4.1全局唯一ID 4.1.1全局ID生成器 每個店鋪都可以發佈優惠券: 當用戶搶購時,就會生成訂單,並保存到tb_voucher_order這張表中。訂單表如果使用資料庫的自增id就存在一些問題: id的規律性太明顯:用戶可以根據id猜測一些信息 ...
  • 這裡介紹一下如何在Zabbix 6下麵,使用預設自帶的模板MSSQL by ODBC來監控SQL Server資料庫。官方關於Template DB MSSQL By ODBC的介紹如下鏈接所示: https://www.zabbix.com/integrations/mssql 這個項目對應的gi ...
  • 1、通過慢查日誌等定位那些執行效率較低的SQL語句 2、explain 分析SQL的執行計劃 需要重點關註type、rows、filtered、extra。 type由上至下,效率越來越高 ALL 全表掃描 index 索引全掃描 range 索引範圍掃描,常用語<,<=,>=,between,in ...
  • 4月22日,2023首屆雲資料庫技術沙龍 MySQL x ClickHouse 專場,在杭州市海智中心成功舉辦。本次沙龍由玖章算術、菜根發展、良倉太炎共創聯合主辦。圍繞“技術進化,讓數據更智能”為主題,匯聚位元組跳動、阿裡雲、玖章算術、華為雲、騰訊雲、百度的6位資料庫領域專家,深入 MySQL x C... ...
  • 摘要:“銀行業數字化轉型實踐交流會”杭州站順利收官。 由華為與北京先進數通聯合主辦的“銀行業數字化轉型實踐交流會”杭州站順利收官,會議邀請了金融科技先鋒企業、機構和多位資深專家,一起深入交流銀行業數字化轉型業務場景的探索和實踐。其中,華為雲資料庫專家在現場分享了華為雲GaussDB的前沿技術和項目實 ...
  • 實驗一、Flume 組件安裝配置 1、下載和解壓 Flume 可 以 從 官 網 下 載 Flume 組 件 安 裝 包 , 下 載 地 址 如 下 URL 鏈 接 所 示 https://archive.apache.org/dist/flume/1.6.0/ [root@master ~]# l ...
  • 實時同步是 ChunJun 的⼀個重要特性,指在數據同步過程中,數據源與⽬標系統之間的數據傳輸和更新⼏乎在同⼀時間進⾏。 在實時同步場景中我們更加關註源端,當源系統中的數據發⽣變化時,這些變化會⽴即傳輸並應⽤到⽬標系統,以保證兩個系統中的數據保持⼀致。這個特性需要作業運⾏過程中 source 插件不 ...
  • 序列(sequence)是 PostgreSQL 中的一種對象,用於生成自動遞增的唯一標識符。通常,序列會與表的自增主鍵一起使用,以確保每個新插入的行都有一個唯一的標識符。在某些情況下,可能需要更新序列的值: 從另一個資料庫中導入數據,自增列的值也從原來的數據中導入。導入的過程中,目標資料庫的序列不 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...