SQL入門基礎(chǔ)語(yǔ)法_第1頁(yè)
SQL入門基礎(chǔ)語(yǔ)法_第2頁(yè)
SQL入門基礎(chǔ)語(yǔ)法_第3頁(yè)
SQL入門基礎(chǔ)語(yǔ)法_第4頁(yè)
SQL入門基礎(chǔ)語(yǔ)法_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SQL語(yǔ)句的概述SQL語(yǔ)言的分類數(shù)據(jù)定義語(yǔ)言(Data Definition Language)主要用于修改、創(chuàng)建和刪除數(shù)據(jù)庫(kù)對(duì)象,其中包括CREATE ALTER DROP語(yǔ)句。數(shù)據(jù)查詢語(yǔ)言(Data Query Language)主要用于查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù),其主要是SELECT語(yǔ)句,SELECT語(yǔ)句包括五個(gè)子句,分別是FROM WHERE HAVING GROUP BY 和WITH語(yǔ)句。數(shù)據(jù)操作語(yǔ)言(Data Manipulation Language)主要用于更新數(shù)據(jù)庫(kù)里數(shù)據(jù)表中的數(shù)據(jù),包括INSERT UODATE DELETE語(yǔ)句。數(shù)據(jù)控制語(yǔ)言(Data Control Langua

2、ge)主要用于授予和回收訪問(wèn)數(shù)據(jù)庫(kù)的某種權(quán)限。包括GRANT REVOKE等語(yǔ)句。事物控制語(yǔ)言,主要用于數(shù)據(jù)庫(kù)對(duì)事物的控制,保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性,包括COMMIT ROLLBACK語(yǔ)句。常用的數(shù)據(jù)類型MYSQL:整型整數(shù)類型取值范圍TINYINT-128至127(1字節(jié))SMALLINT-32768至32767(2字節(jié))MEDIUMINT-sqrt(2,23)至sqrt(2,23)-1INT-sqrt(2,31)至sqrt(2,31)-1BIGINT-sqrt(2,63)至sqrt(2,63)-1浮點(diǎn)型浮點(diǎn)數(shù)類型取值范圍FLOAT(M,N)DOUBLE(M,N)字符類型CHAR(N)定長(zhǎng)1

3、至255個(gè)字符VARCHAR(N)可變長(zhǎng)1至65535TINYTEXT(N)可變長(zhǎng)1至65535TEXT(N)MEDIUMTEXT(N)LONGTEXT(N)SQL語(yǔ)句的書寫規(guī)范SQL語(yǔ)句中不區(qū)分關(guān)鍵字的大小寫SQL語(yǔ)句中不區(qū)分列名和對(duì)象名的大小寫SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的大小寫敏感SQL語(yǔ)句中使用-注釋,當(dāng)使用-注釋時(shí),-后面至少有-個(gè)空格,多行注釋用/* */數(shù)據(jù)庫(kù)的創(chuàng)建與刪除數(shù)據(jù)庫(kù)的創(chuàng)建CREATE DATABASE database_name;在MYSQL COMMAND LINE CLIENT中書寫SQL語(yǔ)句時(shí),在SQL語(yǔ)句后面都要加上分號(hào)數(shù)據(jù)庫(kù)的刪除DROP DATABASE da

4、tabase_name;數(shù)據(jù)表的創(chuàng)建與更新數(shù)據(jù)庫(kù)中的表數(shù)據(jù)記錄:在數(shù)據(jù)表中的每一行被稱為數(shù)據(jù)記錄字段:數(shù)據(jù)表中的每一列被稱為字段主鍵(PRIMARY KEY):作為數(shù)據(jù)表中唯一的表示,保證了每一天數(shù)記錄的唯一性。主鍵在關(guān)系數(shù)據(jù)庫(kù)中約束實(shí)體完整性。所謂的實(shí)體完整性,是指對(duì)數(shù)據(jù)表中行的約束。外鍵(FOREIGN KEY):外鍵用來(lái)定義表與表之間的關(guān)系。在數(shù)據(jù)表中,如果屬性列F是關(guān)系B中的一個(gè)屬性(并不是關(guān)系B的主鍵),并且屬性列F是關(guān)系A(chǔ)的主鍵,則F就是B的外鍵。外鍵在關(guān)系數(shù)據(jù)庫(kù)中約束參照完整性。所謂的參照完整性是指表與表之間的約束。索引:索引是指向數(shù)據(jù)表中的一個(gè)指針,指向索引字段在數(shù)據(jù)表中的物理

5、位置。一般可以在如下幾種情況下建立索引在主鍵列中創(chuàng)建索引多表連接時(shí),在經(jīng)常使用的連接列上創(chuàng)建索引在經(jīng)常使用WHERE子句查詢的列上創(chuàng)建索引在經(jīng)常進(jìn)行分組GROUP BY及排序ORDER BY的列上創(chuàng)建索引約束:為了保證數(shù)據(jù)的完整需要使用約束1. 唯一約束(UNIQUE)使用唯一約束的某一列或者某一組中沒(méi)有相同的值,即保證了值的唯一性。但是唯一約束中可以插入NULL值2. 主鍵約束(PRIMARY KEY)保證使用主鍵約束的列中只能有唯一的值,并且不能包含NULL值,數(shù)據(jù)表中每一列只能定義一個(gè)PRIMARY KEY3. 外鍵約束(FOREIGN KEY)保證表參照完整性,確保對(duì)一個(gè)數(shù)據(jù)表的數(shù)據(jù)操

6、作不會(huì)對(duì)與之關(guān)聯(lián)的表造成不利的影響4. 檢查約束(CHECK)限制列的取值范圍或者取值條件,可以為一個(gè)列定義多個(gè)CHECK約束5. 非空約束(NOT NULL)用于對(duì)列的約束創(chuàng)建數(shù)據(jù)表CREATE TABLE table_name(column_name1 datatype constraint_condition1,column name2 datatype constraint_condition2)使用約束1.唯一約束(UNIQUE)用來(lái)保證某一列或者某一組列中沒(méi)有相同的值,一般為列創(chuàng)建了一個(gè)唯一約束后,數(shù)據(jù)庫(kù)會(huì)自動(dòng)為該列建立一個(gè)唯一索引,其索引名與約束名相同 例如:CREATE TAB

7、LE T_dept(dept_ID VARCHAR(15) UNIQUE,dept_Name VARCHAR(10) 2.主鍵約束CREATE TABLE T_result(stuID VARCHAR(15),cruID VARCHAR(15),result DOUBLE,PRIMARY KEY(stuID,curID)3.外鍵約束FOREIGN KEY表名1(列名1) REFERENCES 表名2 (列名2)ON UPDATE CASCADE|SET NULL|RESTRICTON DELETE CASCADE|SET NULL|RESTRICT其中,F(xiàn)OREIGN KEY是關(guān)鍵字,表名1是

8、可選的,列名1是指定數(shù)據(jù)表中用于外鍵約束的外鍵,表名2表示主表的名字,列名2主表中與從表中列名1對(duì)應(yīng)列的名字,后面的ON UPDATE ON DELETE表示對(duì)表中的數(shù)據(jù)的修改或者刪除,主從表之間采取什么樣的操作方式,是可選的CASCADE:級(jí)聯(lián)刪除,如果主表中一條數(shù)據(jù)記錄被刪除,從表中的數(shù)據(jù)也將刪除SET NULL:置空刪除,如果主表中的一條數(shù)據(jù)記錄南北刪除,從表中與之相連的數(shù)據(jù)也將置空RESTRICT:受限刪除,如果主表中的一條數(shù)據(jù)被刪除,則在執(zhí)行DELETE語(yǔ)句時(shí)系統(tǒng)會(huì)報(bào)錯(cuò),通知用戶與主表相對(duì)應(yīng)的數(shù)據(jù)在從表中仍然存在,但是與主表相對(duì)應(yīng)的數(shù)據(jù)在從表中不被刪除,它是默認(rèn)的方式CREATE T

9、ABLE T_result(stuID VARCHAR(15),curID VARCHAR(15),result DOUBLE,FOREIGN KEY (stuID) REFERCES T_student (stuID) ON DELETE CASCADE,PRIMARY KEY(stuID,curID)3.檢查約束CHECKCREATE TABLE T_curriculum(curID VARCHAR(15) PRIMARY KEY,curName VARCHAR(10),credit INT,CHECK(credit BETWEEN 3 AND 8)4.非空約束NOT NUL使用索引1.

10、唯一索引:在數(shù)據(jù)表中使用UNIQUE可以為一個(gè)數(shù)據(jù)列定義一個(gè)唯一索引,唯一索引中的每一個(gè)索引值只對(duì)應(yīng)數(shù)據(jù)表中的一條記錄,保證了數(shù)據(jù)列中記錄的唯一性2. 主索引:在數(shù)據(jù)表中使用PRIMARY KEY可以為一個(gè)數(shù)據(jù)列定義一個(gè)主索引,所謂的主索引就是在主鍵列中建立索引3. 單列索引:定義在數(shù)據(jù)表中一個(gè)數(shù)據(jù)列上的索引就是單列索引,一般在數(shù)據(jù)查詢時(shí),如果WHERE子句中經(jīng)常用到的數(shù)據(jù)表中的某一列作為查詢條件,就可以把該列創(chuàng)建為單列索引4. 復(fù)合索引:索引可以定義在一個(gè)數(shù)據(jù)表的多個(gè)數(shù)據(jù)列上,像這樣的索引被稱為復(fù)合索引5. 聚簇索引:創(chuàng)建與刪除索引CREATE UNIQUE|CLUSTER INDEX in

11、dex_nameON table_name(column_name 排序方式)排序:關(guān)鍵字ASC表示升序排列,關(guān)鍵字DESC表示降序排列修改數(shù)據(jù)庫(kù)中的表1. 向表中增加一列ALTER TABLE table_name ADD(column_name datatype constraint_condition)例如:ALTER TABLE T_teacher ADD salary INT NOT NULL2. 增加一個(gè)約束ALTER TABLE table_name ADD constraint_type (column_name)例如:ALTER TABLE dept ADD PRIMARY

12、KEY (dept_ID)3. 增加一個(gè)索引ALTER TABLE table_name ADD INDEX(column_name1,column_name2)例如:ALTER TABLE T_curriculum ADD INDEX i_credit(credit)4. 修改表中的某一列ALTER TABLE table_name MODIFY column_name datatype例如:ALTER TABLE T_student MODIFY sex CHAR(2)5. 刪除表中的某一列ALTER TABLE table_name DROP column_name6. 刪除一個(gè)約束條件

13、ALTER TABLE table_name DROP constraint_type7. 刪除數(shù)據(jù)庫(kù)中的表DROP TABLE table_nameCASCADE CONSTRAINTS刪除表時(shí)要使用CASCADE CONSTRAINTS級(jí)聯(lián)刪除從表中的外鍵約束數(shù)據(jù)的查詢操作查詢?nèi)苛械臄?shù)據(jù)記錄SELECT * FROM table_name or view_name,table_name1 or view_name1查詢表中指定的列SELECT 目標(biāo)列,目標(biāo)列FROM 表名或者視圖名,表名或者視圖名在SELECT語(yǔ)句中查詢數(shù)據(jù)表或者視圖指定的列時(shí),在SELECT語(yǔ)句中指定的列名必須是指定的

14、數(shù)據(jù)表或者視圖中存在的列查詢表中不重復(fù)的記錄SELECT DISTINCT 目標(biāo)列,目標(biāo)列FROM 表名或者視圖名,表名或者視圖名使用列別名查詢SELECT 目標(biāo)列 AS 列別名 ,目標(biāo)列 AS 列別名FROM 表名或者視圖名 ,表名或者視圖名在SELECT語(yǔ)句中使用列別名的形式對(duì)數(shù)據(jù)表或者視圖查詢時(shí),可以再在查詢的列名后面使用一個(gè)空格鍵來(lái)代替AS,空格后面再跟上列別名的名字。如果列別名對(duì)字母大小寫敏感,或者在使用包含有空格或者特殊字符的列別名,則必須使用單引號(hào)或者雙引號(hào)將其引起來(lái),否則系統(tǒng)將報(bào)錯(cuò)對(duì)查詢的記錄進(jìn)行運(yùn)算SELECT語(yǔ)句還可以使用算數(shù)運(yùn)算符對(duì)指定的列進(jìn)行運(yùn)算,其中算術(shù)運(yùn)算符包括加減

15、乘除以及模除,在SELECT語(yǔ)句中對(duì)指定的列進(jìn)行算術(shù)運(yùn)算符進(jìn)行運(yùn)算時(shí),只會(huì)改變顯示的結(jié)果,并不會(huì)改變數(shù)據(jù)表中列的原有值使用連接符(|)連接字段在ORACLE中,可以使用|連接符連接多個(gè)字段,在使用連接符時(shí),連接的數(shù)據(jù)類型應(yīng)該是相同的,如果不同系統(tǒng)將會(huì)報(bào)錯(cuò),如果需要在連接的字段中加入字符或者是日期類型的值,需要將該字符值或者日期類型的值使用單引號(hào)引起來(lái)。注意,在MYSQL和MS SQL SERVER中并不支持連接符|,在MYSQL中可以使用CONCAT函數(shù),在MS SQL SERVER中可以使用+來(lái)連接關(guān)于NULL值在數(shù)據(jù)庫(kù)中,如果沒(méi)有為該列賦值,而且該列也沒(méi)有默認(rèn)值,此時(shí)查詢的結(jié)果就為空,即N

16、ULL使用WHERE子句查詢表中滿足條件的記錄比較查詢比較運(yùn)算符分為三類,算術(shù)比較運(yùn)算符,BETWEEN AND ,IN算術(shù)比較運(yùn)算符SQL語(yǔ)句中的算術(shù)比較運(yùn)算符主要包括 = = != (不等于) !(不大于) ! (不小于),在SELECT 語(yǔ)句的WHERE子句中可以使用算術(shù)比較運(yùn)算符對(duì)指定的列進(jìn)行比較,應(yīng)指出的是,在MS SQL SERVER中,不是不等于的意思WHERE 字段1 比較運(yùn)算符 值在SQL語(yǔ)句中,如果在WHERE子句中比較的時(shí)整數(shù)型數(shù)據(jù),則可以不用使用單引號(hào),如果比較的時(shí)其他的數(shù)劇類型,如字符串、日期等,則必須用單引號(hào)引起來(lái),另外,WHERE 子句中比較運(yùn)算符的左側(cè)和右側(cè)的數(shù)

17、據(jù)類型必須是類型兼容的BETWEEN AND運(yùn)算符字段1 BETWEEN 值1 AND 值2在SQL中使用BETWEEN AND 運(yùn)算符可以查詢指定條件范圍的記錄,也可以使用 NOT BETWEEN AND運(yùn)算符來(lái)排除一些記錄IN運(yùn)算符查詢與列表匹配的記錄字段1 IN (屬性值1,屬性值2)在SQL語(yǔ)句中也可以使用NOT IN來(lái)排除一些記錄SELECT teaID,teaName,age,sex,deptFROM T_teacherWHERE dept IN(計(jì)算機(jī)系,數(shù)學(xué)系)字符串比較使用比較運(yùn)算符對(duì)字符串進(jìn)行比較在使用比較運(yùn)算符對(duì)字符串進(jìn)行查詢和比較時(shí),有的數(shù)據(jù)庫(kù)需要區(qū)分大小寫,如ORAC

18、LE,但是在MS SQL SERVER 和MYSQL中不區(qū)分,為了避免由于不注意字符串大小寫而查詢不到正確的結(jié)果,可以使用干將字符串轉(zhuǎn)換為大小的函數(shù)UPPER LOWER對(duì)字符串進(jìn)行轉(zhuǎn)換使用BINARY關(guān)鍵字對(duì)字符串進(jìn)行二進(jìn)制比較BINARY可將字符串轉(zhuǎn)換為二進(jìn)制對(duì)象再進(jìn)行比較SELECT string1 比較運(yùn)算符 BINARY string2或者SELECT BINARY string1 比較運(yùn)算符 string2邏輯查詢?cè)赟QL中邏輯查詢主要包括AND OR NOT三種ANDSELECT stuID,stuName,age,sexFROM T_studentWHERE age20 AND

19、 sex=男SQL語(yǔ)句中AND運(yùn)算符兩側(cè)的條件必須都為TRUE,否則將顯示FALSE使用OR運(yùn)算符查詢滿足任一條件的記錄SELECT teaID,teaName,age,sex,dept,professionFROM T_teacher WHERE age45 OR profession=教授使用NOT運(yùn)算符查詢滿足相反條件的記錄在 MS SQL SERVER中,使用 代替NOT空值查詢當(dāng)使用NULL查詢數(shù)據(jù)表中的記錄是否為空時(shí),不能使用比較運(yùn)算符,只能是用IS NULL或者使用IS NOT NULL,如果使用運(yùn)算符對(duì)NULL進(jìn)行比較其查詢條件返回的結(jié)果始終是FALSE,也就是說(shuō)使用比較運(yùn)算符

20、對(duì)NULL值進(jìn)行比較不會(huì)檢索出任何結(jié)果使用LIKE操作符實(shí)現(xiàn)模糊查詢匹配任意單個(gè)字符在SQL中,通配符“_”表示單個(gè)字符,一個(gè)“_”只能表示一個(gè)字符SELECT stuID,stuName,age,sex,birthFROM T_studentWHERE stuID LIKE s_3(WHERE stuID NOT LIKE s_3)MYSQL數(shù)據(jù)庫(kù)中的LIKE操作符進(jìn)行匹配時(shí),對(duì)字母的大小寫不敏感匹配0個(gè)或者多個(gè)字符通配符“%”表示0個(gè)或者多個(gè)字符SELECT stuID,stuName,age,sex,birthFROM T_studentWHERE stuName LIKE 王%LIKE

21、關(guān)鍵字后面的匹配符必須使用單引號(hào),對(duì)字母進(jìn)行匹配時(shí),還要注意區(qū)分大小寫使用轉(zhuǎn)義字符如果在查詢時(shí)數(shù)據(jù)表中的某個(gè)字段中的字符值本身就包含了“%”和“_”,這時(shí)就要用到轉(zhuǎn)義字符,用關(guān)鍵字ESCAPE來(lái)轉(zhuǎn)義,步驟:1. 在需要轉(zhuǎn)義的“%” “_”字符前加一個(gè)轉(zhuǎn)義符,該轉(zhuǎn)義符可以是任意字符2. 在ESCAPE關(guān)鍵字后指定該轉(zhuǎn)義字符的名稱SELECT deptID,deptNameFROM T_deptWHERE deptID LIKE %$_% ESCAPE $使用REGEXP關(guān)鍵字進(jìn)行模式匹配1. 用來(lái)匹配字符串的開(kāi)始2. $ 用來(lái)匹配字符串的結(jié)尾3. 在方括號(hào)中的任意字符都可以匹配4. + 表示用于

22、匹配的該字符在匹配的字符串中出現(xiàn)至少一次或多次5. * 表示用于匹配的該字符在匹配的字符串中出現(xiàn)零次或者多次6. () 括號(hào)中的內(nèi)容將被看成是一個(gè)整體7. m 整數(shù)m表示花括號(hào)中的字符串需要出現(xiàn)的次數(shù)表中數(shù)據(jù)的排序與分組使用GROUP BY 子句對(duì)數(shù)據(jù)記錄進(jìn)行排序指定表中的一列進(jìn)行排序使用ORDER BY可對(duì)查詢的結(jié)果進(jìn)行排序,ASC表升序,DESC表降序ORDER BY column1 ASC|DESCSELECT teaID,teaName,dept,profession,salaryFROM T_teacherORDER BY salary ASC如果指定要排序的列中存在空值,則在升序排

23、列中顯示在最前,降序排列中顯示在最后ORDER BY也可以放在WHERE子句后面SELECT teaID,teaName,dept,profession,salaryFROM T_teacherWHERE dept=計(jì)算機(jī)系ORDER BY salary ASC指定表中列的位置序號(hào)進(jìn)行排序SELECT teaID,teaName,dept,profession,salaryFROM T_teacherORDER BY 5 ASCsalary的位置是5,可以用5來(lái)代替對(duì)SELECT語(yǔ)句中的非選擇列進(jìn)行排序使用ORDER BY子句中也可以對(duì)沒(méi)有在SELECT中出現(xiàn)的選擇列進(jìn)行排序操作SELECT

24、teaID,teaName,dept,professionFROM T_teacherWHERE dept=計(jì)算機(jī)系ORDER BY salary ASC不過(guò)一般的情況下都會(huì)使用在SELECT中出現(xiàn)的列進(jìn)行排序,這樣顯得很直觀指定數(shù)據(jù)表中的多列進(jìn)行排序ORDER BY可以指定數(shù)據(jù)表中的多列進(jìn)行排序操作,這時(shí)指定排序的列之間使用分號(hào)隔開(kāi)ORDER BY column1,column2 ASC|DESCSLEECT teaID,teaName,dept,profession,salaryFROM T_teacherORDER BY dept,salary使用ORDER BY 進(jìn)行多列排序時(shí),遵循以下規(guī)則:1. 根據(jù)ORDER BY 指定的第一列,按照指定的升序或者降序進(jìn)行排序2. 當(dāng)ORDER BY 子句中指定的第一列中出現(xiàn)相同的數(shù)據(jù)時(shí),再根據(jù)ORDER BY指定的第二列的升序或者降序進(jìn)行排列3. 當(dāng)ORDER BY 子句中指定的第二列中出現(xiàn)相同的數(shù)據(jù)時(shí),再根據(jù)ORDER BY指定的第三列的升序或者降序進(jìn)行排列,依次類推常用的聚合函數(shù)函數(shù)功能COUNT(列|表達(dá)式)計(jì)算給定列或者表達(dá)式中的非空行數(shù)COUNT(*)計(jì)算數(shù)據(jù)表中的總行數(shù),包括空值MAX(列|表達(dá)式)計(jì)算給定列或者表達(dá)式中的最大值MIN()SUM(列|表達(dá)式)AVG()使用MYSQL

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論