sql語言主要分類(SQL語言基礎語法特點)
2023-05-19 10:10:52 4
1、SQL的概述
SQL全稱: Structured Query Language,是結構化查詢語言,用於訪問和處理資料庫的標準的計算機語言。 SQL語言1974年由Boyce和Chamberlin提出,並首先在IBM公司研製的關係資料庫系統SystemR上實現。美國國家標準局(ANSI)開始著手制定SQL標準,並在1986年10月公布了最早的SQL標準,擴展的標準版本是1989年發表的SQL-89,之後還有1992年制定的版本SQL-92和1999年ISO發布的版本SQL-99。SQL標準幾經修改和完善,其功能更加強大,但目前很多資料庫系統只支持SQL-99的部分特徵,而大部分資料庫系統都能支持1992年制定的SQL-92。 2、 SQL的特點具有綜合統一性,不同資料庫的支持的SQL稍有不同非過程化語言語言簡捷,用戶容易接受以一種語法結構提供兩種使用方式3、SQL語言的組成
數據定義語言-DDL數據操縱語言-DML數據控制語言-DCL數據查詢語言-DQLSQL語言基礎
語法特點
SQL 對關鍵字的大小寫不敏感SQL語句可以以單行或者多行書寫,以分行結束SQL的注釋:
SQL和資料庫管理系統的關係 SQL是一種用於操作資料庫的語言,SQL適用於所有關係型資料庫。
MySQL、Oracle、SQLServer是一個資料庫軟體,這些資料庫軟體支持標準SQL,也就是通過SQL可以使用這些軟體,不過每一個資料庫系統會在標準SQL的基礎上擴展自己的SQL語法。
sql的數據定義語言1.建立資料庫
create database 資料庫名
2.建立基本表
create table 表名
完整性約束主要有3種子句:主鍵字句(primary key)、檢查子句(check)和外鍵子句(foreign key)。
定義時使用的基本數據類型如下:
INTEGER:整數(也可寫成INT)。FLOAT(n):浮點數,精度至少為n位數字。NUMERIC(p,d):定點數,由p位數字(不包括符號、小數點)組成,小數點後面有d位數字(也可寫成DECIMAL(p,d)或DEC(p,d))。CHAR(n):長度為n的定長字符串。DATETIME:日期時間型。3.增加一個新列的基本語句
alter table 表名 add 列名 類型
4.修改一個新列的基本語句
alter table 表名 alter column 列名 新類型
5.刪除一個列的語句
alter table 表名 drop column 列名
6.刪除基本表
drop table 表名
sql的數據操縱語句1.直接插入元組值
insert into 表名(列名序列) values (元組值)
或者
insert into 表名(列名序列) (table (元組值),(元組值),...)
2.插入一個查詢的結果值
insert into 表名(列名序列) select 查詢語句
3.delete刪除語句
delete from 表名 [where 條件表達式]
4.update修改語句
update 表名
sql數據查詢功能
1.select語句的完整語法
select 目標表的列名或列表達式序列
其中,SELECT子句中的輸出項可以是列名,或者由列名、常數和「 」、「-」、「*」、「/"運算符構成的算術表達式,使用DISTINCT選項可保證查詢結果集中不存在重複元組。
FROM子句中出現多個基本表或視圖時,系統首先執行笛卡爾積操作。
WHERE子句的條件表達式中可以使用的運算符有:比較運算符(<、、>=、=、)和BETWEEN運算符;
邏輯運算符(AND、OR、NOT);
集合成員運算符(IN、NOT IN);
字符串匹配運算符(LIKE);
謂詞(EXISTS、ALL、SOME、UNIQUE);
聚合函數;
空值比較運算符(IS NULL、IS NOT NULL);集合運算符(UNION、INTERSECT、EXCEPT)等。1.投影查詢
使用SELECT命令可以選擇查詢表中的任意列。其中,目標表的列名是指要檢索的列的名稱,可以為一個或多個列。當為多個列時,中間要用「,」分隔。FROM子句中的關係名表指明從什麼表中提取數據,如果是從多個表中提取數據,每個表的表名都要寫出,表名之間用「,」分隔開。
2.選擇查詢
選擇查詢就是指定查詢條件,只從源表提取或顯示滿足該查詢條件的記錄。其中,WHERE子句的行條件表達式指出記錄應滿足的條件。選擇查詢通常使用下列幾類運算。
(1)條件表達式的比較運算
在WHERE條件表達式中包含比較運算。
(2)字符串的匹配運算
通常可以利用字符串的匹配運算進行模糊查詢。謂詞LIKE可以用來進行字符串的匹配運算。
[NOT] LIKE '匹配串' [ESCAPE '匹配串']
其含義是查找指定的屬性列值與「匹配串」相匹配的元組。「匹配串」可以是一個完整的字符串,也可以含有通配符%和_。
%(百分號):代表任意長度(長度可以為0)的字符串。_(下劃線):代表任意單個字符。(3)集合的比較運算
在WHERE條件表達式中包含集合成員運算符。
4)邏輯組合運算
在WHERE條件表達式中包含多個條件子句,這些子句通過邏輯運算符組合起來。
3.排序查詢
通過在SELECT命令中加入ORDER BY子句來控制選擇行的顯示順序。ORDER BY子句可以按升序(默認或ASC)、降序(DESC)排列各行,也可以按多個列來排序。也就是說,ORDER BY子句用於對查詢結果進行排序。
ORDER BY子句必須是SELECT命令中的最後一個子句。
4.使用聚合函數
聚合函數實現數據統計等功能,用於對一組值進行計算並返回一個單一的值。聚合函數常與SELECT語句的GROUP BY子句一起使用。常用的聚合函數如下所示。
函敗名
功能
AVG
計算一個數值型表達式的平均值
COUNT
計算指定表達式中選擇的項數,COUNT(*)統計查詢輸出的行數
MIN
計算指定表達式中的最小值
MAX
計算指定表達式中的最大值
SUM
計算指定表達式中的數值總和
STDEV
計算指定表達式中所有數據的標準差
STDEVP
計算總體標準差
聚合函數參數的一般格式為:
[ALL|DISTINCT] expr
其中,ALL表示對所有值進行聚合函數運算,它是默認值;DISTINCT指定每個唯一值都被考慮;expr指定進行聚合函數運算的表達式。
5.數據分組
前面的例子中使用了聚合函數,還可以加上GROUP BY子句進行數據分組。通常一個聚合函數的作用範圍是滿足WHERE子句中指定條件的所有記錄。在加上GROUP BY子句後,SELECT命令把查詢結果按指定列分成集合組。當一個聚合函數和一個GROUP BY子句一起使用時,聚合函數的範圍變成每組的所有記錄。換句話說,一個結果是由組成一組的每個記錄集合產生的。用HAVING子句定義這些組所必須滿足的條件,以便將其包含在結果中。
當WHERE 子句、GROUP BY子句、HAVING子句和聚合函數同時出現在一個查詢中時,SELECT命令的執行順序如下:
①執行WHERE子句,從表中選取行。
②由GROUP BY對選取的行進行分組。
③執行聚合函數。
④執行HAVING子句選取滿足條件的分組。
6.表的連接查詢
在數據查詢中,經常涉及提取兩個或多個表的數據,這就需要使用表的連接來實現若干個表數據的聯合查詢。
在一個查詢中,當需要對兩個或多個表連接時,可以指定連接列,在WHERE子句中給出連接條件,在FROM子句中指定要連接的表,其格式如下:
SELECE 列名1,列名2,...
對於連接的多個表通常存在公共列,為了區別是哪個表中的列,在連接條件中通過表名前綴指定連接列,由此來區別連接列所在的表。
在SQL Server中,連接分為內連接(INNER JOIN)和外連接(OUTER JOIN)兩種類型。
1)內連接
內連接是最基本的連接方式,使用INNER JOIN關鍵字,不使用該關鍵字時默認均為內連接。內連接又包括等值連接、非等值連接和自連接。
(1)等值連接
指表之間通過「等於」關係連接起來,產生一個連接臨時表,然後對該臨時表進行處理後生成最終結果。
(2)非等值連接
指表之間的連接關係不是「等於」,而是其他關係。通過指定的非等值關係將兩 個表連接起來,產生一個連接臨時表,然後對該臨時表進行處理後生成最終結果。
(3)自連接
在數據查詢中有時需要將同一個表進行連接,這種連接稱之為自連接,進行自連接就如同兩個分開的表一樣,可以把一個表的某行與同一表中的另一行連接起來。
2)外連接
僅當至少有一個同屬於兩表的行符合連接條件時,內連接才返回行,所以內連接消除與另一個表中的任何行不匹配的行。而外連接會返回FROM子句中提到的至少一個表或視圖的所有行,只要這些行符合任何WHERE或HAVING搜索條件。將檢索通過左外連接引用的左表的所有行,以及通過右外連接引用的右表的所有行。全外連接中兩個表的所有行都將反回。
外連接又分為左外連接、右外連接和全外連接,其關鍵字如下:
LEFT OUTER JOIN或LEFT JOIN(左外連接)。RIGHT OUTER JOIN或RIGHT JOIN(右外連接)。FULL OUTER JOIN或FULL JOIN(全外連接)。(1)左外連接
左外連接簡稱為左連接,其結果包括第一個命名表(「左」表,出現在JOIN子句的最左邊)中的所有行,不包括右表中的不匹配行。
(2)右外連接
右外連接簡稱為右連接,其結果中包括第二個命名表(「右」表,出現在JOIN子句的最右邊)中的所有行,不包括左表中的不匹配行。
(3)全外連接
若要通過在連接結果中包括不匹配的行即保留不匹配信息,可以使用全外連接。SQL Server 2005提供全外連接運算符FULL OUTER JOIN,不管另一個表是否有匹配的值,此運算符都包括兩個表中的所有行。
7.子查詢
1)一般子查詢
當一個查詢是另一個查詢的條件時,換言之,當從表中選取數據行的條件依賴於該表本身或其他表的聯合信息時,需要使用子查詢來實現。子查詢可以使用幾個簡單命令構造功能強大的複合命令。子查詢最常用於SELECT語句的WHERE子句中。
一個子查詢的返回值為多行時,需要使用ANY、ALL、IN和NOT IN等選項,它們與查詢條件一起構造返回一組值的子查詢。
2)相關子查詢
每個子查詢僅執行一次,返回的值為主查詢的WHERE子句所用。在有的查詢中,子查詢不只執行一次。
3)帶EXISTS測試的子查詢
在子查詢中還可以使用EXISTS,它一般用在WHERE子句中,其後緊跟一個SELECT子查詢,從而構成一個條件。
EXISTS代表存在量詞∃。帶有EXISTS謂詞的子查詢不返回任何數據,只返回邏輯真值和邏輯假值。當子查詢的結果不為空集時返回邏輯真值,否則返回邏輯假值。
8.查詢結果的並、交、差運算
可以使用以下運算符將兩個SELECT查詢語句的結果進行相應運算:
UNION:並.
INTERSECT:交.
EXCEPT:差.
sql數據控制語句1.授予權限
SQL語句採用GRANT語句向用戶授予操作權限,一般格式如下:
GRANT 權限 ON 對象 TO 用戶 [WITH GRANT OPTION]
2.收回權限
可以使用REVOKE命令撤銷已授予用戶的某些權限,REVOKE的使用語法與GRANT類似。
例如,使用命令撤銷用戶User1的create table語句權限:
revoke create table to User1
視圖視圖是從一個或幾個基本表(或視圖)導出的表,它與基本表不同,是一個虛表。資料庫中只存放視圖的定義,而不存放視圖對應的數據,這些數據仍存放在原來的基本表中,在對視圖進行查詢時要執行對應的SELECT語句。
若一個視圖是從單個基本表導出來的,並且只是去掉了基本表的某些行和某些列,但保留了主碼,我們稱這類視圖為行列子集視圖。
1.視圖的作用
視圖能夠簡化用戶的操作。視圖使用戶能以多種角度看待同一數據。視圖對於資料庫的重構提供了一定程度的邏輯獨立性。視圖能夠對機密數據提供安全保護。2.視圖的更新操作的限制
一個視圖對應一個SELECT語句,SQL中規定允許進行更新操作的視圖的SELECT語句必須滿足以下規則:
FROM子句只能包含一個關係R,不能再有其他關係。
WHERE子句在子查詢中不能使用關係R。
SELECT (而非SELECT DISTINCT)中的屬性列表必須包含足夠多的屬性,以保證對該視圖進行元組插入時,能夠用null或默認值來填充所有其他不屬於該視圖的屬性。
視圖上的一個插入操作可以直接應用到基本關係R,僅有的差別是這裡視圖SELECT子句中的屬性是提供值的屬性。
3.創建和刪除視圖
(1)創建視圖
create view 視圖名 (列名序列) as select 查詢語句
(2)刪除視圖
drop view 視圖名
索引1.索引的作用
提高查詢速度;提高連接、ORDER BY和GROUP BY執行的速度;查詢優化過程依賴索引;強制實施行的唯一性。2. SQL Server中索引類型
SQL Server提供了3種類型的索引:聚集索引、非聚集索引和唯一性索引。
聚集索引(CLUSTERED):在聚集索引中,數據表中記錄的物理順序與索引順序相同,即索引順序決定了表中記錄行的存儲順序,因為記錄行是經過排序的,所以每個表只能有一個聚集索引。
非聚集索引(NONCLUSTERED):一個數據表中只能有一個聚集索引,而表中的每一列上都可以建立自己的非聚集索引。
唯一性索引:聚集索引和非聚集索引是按照索引的結構劃分的。按照索引實現的功能還可以劃分為唯一性索引和非唯一性索引。唯一性索引表示表中任何兩個記錄的索引值都不相同,與表的主鍵類似。它可以確保索引列不包含重複的值。在多列唯一性索引的情況下,該索引可以確保索引列中每個值組合都是唯一的。
在創建主鍵和唯一性約束的列上會自動創建唯一性意引。如果表中沒有創建提示其他的聚集索引,則在表的主鍵列上自動創建聚集索引。
3.創建索引
create [UNIQUE] [CLUSTERED|NONCLUSTERED] index 索引名稱
4.刪除索引
drop index 表名.索引
嵌入式SQL1.SQL的運行環境
SQL的運行環境有交互式SQL和嵌入式SQL兩種。
交互式SQL是在某個DBMS中運行的,如前面的所有SQL語句均是在SQLServer資料庫管理系統中直接運行的。嵌入式SQL是將SQL語句嵌入到宿主語言程序(如C程序)中運行的。嵌入式SQL有兩種處理方式:一種是擴充宿主語言的編譯程序,使之能處理SQL語句:另一種是採用預處理方式,其處理包含嵌套SQL語句的過程。
2.嵌入式SQL的使用規定(在宿主語言程序中使用SQL)
所有SQL語句必須加上前綴和結束標誌,作為與宿主語言語句的區分;共享變量必須由宿主語言的程序定義,並用SQL的DECLARE語句聲明;SQL語句中引用共享變量時,必須加冒號「:」前綴,使其區別於資料庫中的變量(在SQLServer中規定共享變量名以@開頭)。
3.嵌入式SQL的使用技術
包括不涉及遊標和涉及遊標的兩種使用方法如果嵌入到宿主語言程序中的是SQL的數據更新語句,或查詢結果為單個元組的SELECT語句,則不需使用遊標。如果SELECT語句的查詢結果是多個元組,必須利用遊標將多個元組逐個傳送給宿主語言程序進行處理。
Python大數據方向Python 大數據開發自學教程_Python 大數據開發視頻教程從入門到精通_黑馬程式設計師
2022最新大數據Hadoop入門視頻教程,最適合零基礎自學的大數據Hadoop教程2022年大數據spark3.2入門Spark全套視頻教程,4天spark3.2快速入門到精通,全網首套基於Python語言的spark教程2022年MySQL基礎入門2022最新MySQL知識精講 mysql實戰案例_零基礎mysql資料庫入門到高級全套教程Python 大數據開發MySQL資料庫:2022最新MySQL知識精講 mysql實戰案例_零基礎mysql資料庫入門到高級全套教程Hadoop入門:2022最新大數據Hadoop入門視頻教程,最適合零基礎自學的大數據Hadoop教程Hive數倉項目:大數據項目實戰教程_大數據企業級離線數據倉庫,在線教育項目實戰(Hive數倉項目完整流程)PB內存計算Python入門:全套Python教程_Python基礎入門視頻教程,零基礎小白自學Python必備教程Python編程進階:Python高級語法進階教程_python多任務及網絡編程,從零搭建網站全套教程spark3.2從基礎到精通:Spark全套視頻教程,4天spark3.2快速入門到精通,全網首套基於Python語言的spark教程Hive Spark離線數倉工業項目實戰:全網首次披露大數據Spark離線數倉工業項目實戰,Hive Spark構建企業級大數據平臺
,