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

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

2023-04-25 08:30:33 資料庫

資料庫系統概論—基礎篇(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視圖作用

  • 視圖能簡化用戶操作

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

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

  • 視圖能夠對機密資料提供安全保護

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

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/551130.html

標籤:MySQL

上一篇:技術干貨|如何利用 ChunJun 實作資料實時同步?

下一篇:返回列表

標籤雲
其他(158057) Python(38099) JavaScript(25391) Java(17999) C(15217) 區塊鏈(8260) C#(7972) AI(7469) 爪哇(7425) MySQL(7141) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5328) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4559) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2430) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1960) Web開發(1951) HtmlCss(1926) python-3.x(1918) 弹簧靴(1913) C++(1911) xml(1889) PostgreSQL(1873) .NETCore(1855) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • 資料庫系統概論—標準語言SQL

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

    uj5u.com 2023-04-25 08:30:33 more
  • 技術干貨|如何利用 ChunJun 實作資料實時同步?

    實時同步是 ChunJun 的?個重要特性,指在資料同步程序中,資料源與?標系統之間的資料傳輸和更新?乎在同?時間進?。 在實時同步場景中我們更加關注源端,當源系統中的資料發?變化時,這些變化會?即傳輸并應?到?標系統,以保證兩個系統中的資料保持?致。這個特性需要作業運?程序中 source 插件不 ......

    uj5u.com 2023-04-25 08:30:11 more
  • 輕松拿下PostgreSQL,這30個實用SQL陳述句你細品

    PostgreSQL是一款功能非常強大的開源關系型資料庫,它支持哈希索引、反向索引、部分索引、Expression 索引、GiST、GIN等多種索引模式,同時可安裝功能豐富的擴展包。相較于Mysql,PostgreSQ支持通過PostGIS擴展支持地理空間資料、支持嵌套回圈,哈希連接,排序合并三種表... ......

    uj5u.com 2023-04-24 09:17:41 more
  • kafka設計理念決議

    一.引言 kafka是廣泛使用的流處理組件,我們知道怎么使用它,也知道它的實作原理。但是更重要的部分是它的設計理念,即kafka設計者當時是如何考量各種方案的,了解這些,對提升我們的設計能力非常有幫助。 二.動機 我們將 Kafka 設計為一個統一平臺,來處理大型公司可能擁有的所有實時資料流。 為此 ......

    uj5u.com 2023-04-24 09:07:02 more
  • oracle邏輯備份exp匯出指定表名時需要加括號嗎?

    Oracle 的exp、imp、expdp、impdp命令用于資料庫邏輯備份與恢復; exp命令用于把資料從遠程資料庫server匯出至本地,生成dmp檔案。 筆者在實操中遇到: $exp user/pass file=exp.dmp tables = (TABLE1,TABLE3,TABLE3) ......

    uj5u.com 2023-04-24 09:01:52 more
  • 讀《mysql是怎樣運行的》有感

    最近讀了一本書《mysql是怎樣運行的》,讀完后在大體上對mysql的運行有一定的了解。在以前,我對mysql有以下的為什么: InnoDB中的表空間、段、區和頁是什么? redo log為什么就能實作事務的持久性? 到底什么是意向鎖?意向鎖有什么用? mysql中的外連接、內連接到底是什么? 事務 ......

    uj5u.com 2023-04-24 09:01:49 more
  • 《Redis設計與實作》讀書筆記

    《Redis設計與實作》讀書筆記 簡單動態字串 SDS的定義 結構: buf陣列:用于保存字串 len屬性:記錄SDS中保存字串的長度 free屬性:記錄buf中未使用位元組數量 遵循C字串以空字串結尾的慣例,保存空字串的位元組不計入長度 SDS與C字串的區別 常數復雜度獲取字串長度 因 ......

    uj5u.com 2023-04-24 09:01:39 more
  • 袋鼠云春季生長大會圓滿落幕,帶來數實融合下的新產品、新方案、新

    4月20日,以“數實融合,韌性生長”為主題的袋鼠云春季生長大會圓滿落幕。 在春季生長大會中,袋鼠云帶來了數實融合趨勢下的最新行業沉淀、最佳實踐經驗和行業前瞻性的產品發布。從大資料基礎軟體“數堆疊”、到低代碼數字孿生世界“易知微”,再到可觀測運維專家“云掣”,為廣大用戶帶來了一場場精彩內容,共話數字未來 ......

    uj5u.com 2023-04-24 09:00:57 more
  • 無懼百萬級并發,GaussDB(for Cassandra)讓華為推送服務更快觸達

    摘要:推送服務(Push Kit)是華為提供的訊息推送平臺,建立了從云端到終端的訊息推送通道。通過集成推送服務,您可以向客戶端應用實時推送訊息,讓應用更精準觸達用戶,是開發者提升用戶感知度和活躍度的一件利器。 本文分享自華為云社區《無懼百萬級并發,GaussDB(for Cassandra)讓華為P ......

    uj5u.com 2023-04-24 09:00:33 more
  • mysql+proxysql+replication-manager的主從半同步復制+高可用+讀

    環境: AlmaLinux release 9.1 MySQL Community Server Ver 8.0.33 Replication Manager v2.2.40 for MariaDB 10.x and MySQL 5.7 Series ProxySQL version 2.5.1-9 ......

    uj5u.com 2023-04-24 09:00:18 more