數據庫知識梳理

數據庫

前文

​ 數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫;隨着信息技術和市場的發展,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。數據庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統都在各個方面得到了廣泛的應用。
​ 數據庫現在已經成爲數據管理的重要技術,也是計算機的重要分支。由於數據庫具有數據結構化,最低冗餘度、較高的程序與數據獨立性,易於擴展、易於編制應用程序等優點,較大的信息系統都是建立在數據庫設計之上的。數據庫的運用從一般管理擴大到計算機輔助技術、人工智能以及科技計算等領域。
​ 隨着數據庫技術的發展,計算機技術也隨着得到了很大的發展,數據庫爲我們提供了可以快速存儲以及檢索的便利,它也爲近幾年軟件可以如此普及貢獻不小的力量。

一、DBMS

​ 數據庫管理系統(Database Management System)是一種操縱和管理數據庫的大型軟件,用於建立、使用和維護數據庫,簡稱 DBMS。它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。用戶通過 DBMS 訪問數據庫中的數據,數據庫管理員也通過 dbms 進行數據庫的維護工作。它可使多個應用程序和用戶用不同的方法在同時或不同時刻去建立,修改和詢問數據庫。大部分 DBMS 提供數據定義語言DDL(Data Definition Language)和數據操作語言 DML(Data ManipulationLanguage),供用戶定義數據庫的模式結構與權限約束,實現對數據的追加、刪除等操作。
​ 根據存儲模型可將數據庫劃分爲關係型數據庫和非關係型數據庫。關係型數據庫,是建立在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。簡單來說,關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。標準數據查詢語言 SQL 就是一種基於關係數據庫的語言,這種語言執行對關係數據庫中數據的檢索和操作。
​ 當前主流的關係型數據庫有 Oracle、DB2、Microsoft SQL Server、MicrosoftAccess、MySQL 等。
​ Oracle Database,又名 Oracle RDBMS,或簡稱 Oracle。是甲骨文公司的一款關係數據庫管理系統。它是在數據庫領域一直處於領先地位的產品。可以說 Oracle 數據庫系統是目前世界上流行的關係數據庫管理系統,系統可移植性好、使用方便、功能強,適用於各類大、中、小、微機環境。它是一種高效率、可靠性好的 適應高吞吐量的數據庫解決方案。

二、SQL 語言介紹

​ SQL(Structured Query Language)爲數據庫的語言,在 1974 年由 Boyce【博伊斯】和 Chamberlin【錢伯林】提出的一種介於關係代數與關係演算之間的結構化查詢語言,是一個通用的、功能極強的關係型數據庫語言。它包含三部分:
在這裏插入圖片描述
在這裏插入圖片描述

(一)SELECT篇

一、表(Table)

1、理解

​ 1)、表是從屬於用戶的 ,查詢表(用戶名.表名),當前用戶查詢自己的表時,用戶名.可以省略,其他用戶查詢 別的用戶表 ,不能省略,同時必須存在權限。

2)、表是邏輯表(概念表),不是物理表

​ 塊(8k) —>區(連續塊)–>段(連續區) -->表(多個段) ,數據段不全是表,表一定是數據段。還有其他段:如索引段

2、表結構

​ 表由表名、字段(名稱+類型+約束)、記錄 組成。

二、三範式

​ 在設計數據庫時,存在行業的標準,這個標準也稱爲條件,即範式 NormalForm。一般遵循三個條件即可,也就是”三範式”(3NF)。

​ 1NF:是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義一個新的實體,新的實體由重複的屬性構成,新實體與原實體之間爲一對多關係。在第一範式(1NF)中表的每一行只包含一個實例的信息。

​ 2NF:是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求數據庫表中的每個實例或行必須可以被唯一地區分。爲實現區分通常需要爲表加上一個列,以存儲各個實例的唯一標識。如 emp 表中加上了員工編號(empno)列,因爲每個員工的員工編號是唯一的,因此每個員工可以被唯一區分。這個唯一屬性列被稱爲主關鍵字或主鍵、主碼。同時要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關係。爲實現區分通常需要爲表加上一個列,以存儲各個實例的唯一標識。即第二範式就是非主屬性非部分依賴於主鍵

​ 3NF:必須先滿足第二範式(2NF)。3NF 要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(deptno)、部門名稱、地址等信息。那麼員工信息表(emp)中列出部門編號後就不能再將部門名稱、部門地址等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三範式(3NF)也應該構建它,否則就會有大量的數據冗餘。即第三範式就是屬性不依賴於其它非主屬性。

簡而言之,最終的目的避免數據重複冗餘,1NF列不可再分,最小原子 (避免重複) ;2NF 主鍵依賴 (確定唯一);3NF消除傳遞依賴(建立主外鍵關聯 拆分表)

三、SELECT

命令不區分大小寫

1、查詢列(字段)

*select distinct |字段|表達式 as 別名 from 表 表別名
SELECT * FROM 表名; 查詢某個表中所有的記錄的所有字段信息
SELECT 列名 FROM 表名; 查詢某個表中所有的記錄的指定字段信息
SELECT 列名1,列名2 FROM 表名; 查詢某個表中所有的記錄的字段1 字段2
SELECT distinct 列名 FROM 表名; 去除重複記錄
SELECT 表達式 FROM 表名; 查詢表達式
SELECT xxx as 別名 FROM 表名 表別名 使用別名

1)、部分列

​ 查詢 部分字段,指定的字段名

2)、所有列

​ 查詢所有的字段 通配符 *( 書寫方便、可以檢索未知列;但是降低檢索的性能) ,數據的順序跟定義表結構的順序一致

3)、去除重複

​ 使用distinct去重,確保查詢結果的唯一性

4)、別名

​ 使用別名便於操作識別 隱藏底層信息。存在字段別名和表別名

5)、字符串

使用’’表示字符串(注意區分””) ,拼接使用 ||

6)、僞列

​ 不存在的列,構建虛擬的列

7)、虛表

​ 用於計算表達式,顯示單條記錄的值 dual

8)、null

​ null 遇到數字參與運算的結果爲 null,遇到字符串爲空串

2、查詢行(記錄)

1)、比較條件

​ = 、>、 <、 >=、 <=、 !=、 <>

2)、且 或 非

​ and、 or、 not

3)、null

null不能使用條件判斷,只能使用is

4)、集合操作

​ Union、Union All、Intersect、Minus
​ Union,並集(去重) 對兩個結果集進行並集操作,不包括重複行同時進行默認規則的排序;
​ Union All,全集(不去重) 對兩個結果集進行並集操作,包括重複行,不進行排序 ;
​ Intersect,交集(找出重複) 對兩個結果集進行交集操作,不包括重複行,同時進行默認規則的排序;
​ Minus,差集(減去重複) 對兩個結果集進行差操作,不包括重複行,同時進行默認規則的排序

5)、like :模糊查詢

​ 模糊查詢,使用通配符:
%:零個及以上(任意個數的)的字符
_:一個字符
遇到內容中包含 % _ 使用escape(‘單個字符’)指定轉義符

6)、in 與 exists

​ in相當於使用or的多個等值,定值集合 ,如果存在 子查詢,確保 類型相同、字段數爲1,如果記錄多,效率不高,用於 一些 少量定值判斷上

​ exists條件爲true,存在記錄則返回結果,後續不再繼續 比較查詢,與查詢的字段無關,與記錄有關

7)、獲取所有行的記錄

3、排序

​ 使用 ORDER BY 排序,排序不是真實改變存儲結構的順序,而是獲取的集合的順序。
順序 :asc(默認) desc(降序)
多字段: 在前面字段相等時,使用後面的字段排序
空排序: 降序爲 desc,注意 null 爲最後

四、函數—單行函數

​ 函數分爲系統內置函數 自定義函數(後期學習的 plsql 中定義);瞭解系統內置函數(方法),重點掌握 to_date 、 to_char (字符和日期的轉換)根據函數的返回結果,我們將函數分爲單行函數和多行函數
1、單行函數:一條記錄返回一個結果
2、多行函數 組函數 聚合函數 (重點) :多條記錄 返回一個結果 (重點)

1、日期函數

​ 日期函數: 注意區分 db數據庫時間 ,java應用服務器的時間。以一方爲準
​ **oracle以內部數字格式存儲日期:年,月,日,小時,分鐘,秒
sysdate/current_date 以date類型返回當前的日期
add_months(d,x) 返回加上x月後的日期d的值
LAST_DAY(d) 返回的所在月份的最後一天
months_between(date1,date2) 返回date1和date2之間月的數目
next_day(sysdate,‘星期一’) 下週星期一

2、轉換函數(重點***)

to_date(c,m)  字符串以指定格式轉換爲日期
​ to_char(d,m)  日期以指定格式轉換爲字符串

在這裏插入圖片描述

3、其他函數 (保證類型兼容)

1)、nvl nvl(string1,string2) 如果string1爲null,則結果爲string2的值

2)、decode decode(condition,case1,express1,case2 , express2,….casen , expressn, expressionm)

3)、case when then else end

在這裏插入圖片描述

五、組函數

​ 組函數|多行函數|聚合函數 即多條記錄 返回一個結果。我們需要掌握如下幾個組函數:
​ avg 、sum、 min、 max、 count
1)、count :統計記錄數 count() -->* 或一個列名
2)、max min: 最大值 最小值
3)、sum:求和
4)、avg:平均值
注意:
1、組函數僅在選擇列表和Having子句中有效
2、出現組函數,select 只能有組函數或分組字段
說明:
組信息 與單條記錄不能同時查詢
組函數 不能用在 where中,能使用的地方 select having
null 不參與運算

六、分組

分組: group by , 將符合條件的記錄 進一步的分組
​ 1)、select 出現分組函數,就不能使用 非分組信息,可以使用 group by 字段
​ 2)、group by字段 可以不出現 select 中 ,反之select 除組函數外的,其他字段必須出現在group by 中

過濾組:having , 過濾組信息 ,表達式 同 where 一致

where :過濾行記錄,不能使用組函數, having:過濾組 可以使用組函數

解析步
1)、from 2)、where 3)、group 4)、having 5)、select 6)、order by

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