sql 倒数第二个_小白初探SQL(一)
? ? SQL(結構化查詢語言)是目前使用最廣泛的數據庫語言,可以同各種數據庫建立聯系、進行溝通,應用十分的廣泛。
◆
結構化查詢語言(Structured Query Language)簡稱SQL,是結構
化查詢語言,是關系數據庫的標準語言。是一個通用的、功能極強的關系數據庫語言
SQL用于存取數據以及查詢、更新和管理關系數據庫系統。是一種特殊目的的編程語言,是一種查詢和程序設計語言。
結構化查詢語言是高級的非過程數據庫化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同數據庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的接口。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。
SQL的產生于發展
在1970年代初,由IBM公司San Jose,California研究實驗室的埃德加·科德發表將數據組成表格的應用原則(Codd's Relational Algebra)。
1974年, D.D.Chamberlin和R.F. Boyce對Codd's Relational Algebra在研制關系數據庫管理系統System R中,研制出一套規范語言-SEQUEL(Structured English QUEry Language),并在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。
1980年改名為SQL。
1979年ORACLE公司首先提供商用的SQL。
1986年10月,美國ANSI采用SQL作為關系數據庫管理系統的標準語言(ANSI X3. 135-1986),后為國際標準化組織(ISO)采納為國際標準。
1989年,美國ANSI采納在ANSI X3.135-1989報告中定義的關系數據庫管理系統的SQL標準語言,稱為ANSI SQL 89,該標準替代ANSI X3.135-1986版本。
(想要了解更多有關SQL語言發展與淵源請點擊SQL的發展史)
SQl的功能:
(SQL具有數據查詢、數據定義、數據操縱和數據控制四
種功能)
1
數據定義功能:能夠定義數據庫的三級模式結構,即外模式、全局模式和內模式結構。
2
數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。
3
數據控制功能:主要是對用戶的訪問權限加以控制,以保證系統的安全性。
SQL語言相關功能的動詞
1)數據查詢:SELECT
2)數據定義:CREATE、DROP、ALTER
3)數據操縱:INSERT、UPDATE、DELETE
4)數據控制:GRANT、REVOKE
語言特點
1.SQL風格統一
2.高度非過程化
3.面向集合的操作方式
4.以同一種語法結構提供兩種使用方式
5.語言簡潔,易學易用
基本概念
1.概念圖:
2.基本表:
1)本身獨立存在的表。
2)SQL中一個關系就對應一個基本表。
3)一個(或多個)基本表對應一個存儲文件。
4)一個表可以帶若干索引。
3.存儲文件
1)邏輯結構組成了關系數據結構的內模式。
2)物理結構是任意的,對用戶透明的。
4.視圖
1)從一個或幾個基本表導出的表。
2)數據庫中只存放視圖的定義而不存放視圖對應的數據,
3)視圖是一個虛表。
4)用戶可以在視圖上再定義視圖。
下面以“習題”的方式為大家講解SQL的數據查詢功能——單表查詢
“學生-課程”數據庫
1.Student表
2.Course表
3.SC表
數據查詢
1.語句格式
SELECT[ALL|DISTINCT]<< span="">目標列表達式>[ , << span="">目標列表達式>]…
FROM<< span="">表名或視圖名>[>]…
[WHERE>]
[GROUP BY<< span="">列名1>[HAVING<< span="">條件表達式>]]
[ORDER BY << span="">列名2>[ASC|DESC]];
2.知識框架
單表查詢知識框架
單表查詢——選擇表中的若干列
1.查詢指定列
1)例一:查詢全體學生的學號與姓名
SELECT? Sno, Sname
FROM Studennt;
2)例二:查詢全體學生的姓名、學號、所在系。
SELECT Sname, Sno, Sdept
FROM Student;
2.查詢全部列
選出所有屬性列:
i.在SELECT關鍵字后面列出所有列名
ii.將
例三:查詢全體學生的詳細記錄。
SELECT Sno, Sname, Ssex, Sage, Sdept
FROM Student;
或
SELECT *
FROM Student
3.查詢經過計算的值
1)
1)SELECT子句的可以為:
i.算數表達式
ii.字符串常量
iii.函數
iv.列別名
2)例四:查詢全體學生的姓名及出生年份
SELECT Sname, 2016-Sage? /*假定當年的年份為2016年*/
輸出結果:
3)例五:查詢全體學生的姓名、出生年份和所有系,要求用小寫字母表示所有系名
SELECT Sname, ‘Year of Birth:’,2016-Sage,
LOWER(Sdept)
?? FROM Student;
輸出結果:
單表查詢——選擇表中的若干元組
1.消除取值重復的行
1)如果沒有指定DISTINCT關鍵詞,則缺省為ALL
例六:查詢選修了課程的學生學號。
SELECT Sno
FROM SC
等價于:
SELECT ALL Sno
FROM SC;
執行結果為:
2)指定DISTINCT關鍵詞,去掉表中重復的行
SELECT DISTINCT Sno
FROM SC;
執行結果:
2.查詢滿足條件的元組
1)常用的查詢條件
2)比較大小
(謂詞:>,=,<=,!=,<>,!>,!上述運算符)
i.例7:查詢計算機科學系全體學生的名單
SELECT Sname
FROM Student
WHERE Sage = ‘CS’:
ii.例8:查詢所有年齡在20歲以下的學生姓名及其年齡
SELECT Sname, Sage
FROM Student
WHERE Sage<20;< span="">
iii.例9:查詢考試成績有不及格的學生的學號
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;< span="">
3)確定范圍
(謂詞:BETWEEN…AND…;NOT BETWEEN…AND…)
i.例10:查詢年齡在20~23(包括20歲和23歲)之間的學生的姓名、系別和年齡。
SELECT Sname , Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
ii.例11:查詢年齡不在20~23歲之間的學生姓名、系別和年齡。
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
4)確定集合
(謂詞:IN<< span="">值表>、NOT IN >)
i.例12:查詢信息系(IS)、數學系(MA)和計算機科學系(CS)學生的姓名和性別。
SELECT Sname, Ssex
FROM Student
WHERE Sdept IN (‘IS’.’MA’,’CS’);
ii.例13:查詢既不是信息系(IS)、數學系(MA),也不是計算機科學系的學生的姓名和性別。
SELECT Sname, Ssex
FROM Student
WHERE Sdept NOT IN(‘IS’,’MA’,’CS’);
5)字符匹配
(謂詞:[NOT] LIKE? ‘<< span="">匹配串>’ [ESCAPE? ‘<< span="">換碼字符>’])
i.匹配串為固定字符串
【例14】:查詢學號為200215121的學生的詳細情況。
SELECT *
FROM Student
WHERE Sno LIKE ‘200215121’;
等價于:
SELECT *
FROM Student
WHERE Sno =’200215121’
ii.匹配串為含通配符的字符串
【例15】:查詢所有姓劉學生的姓名,學號和性別。
SELECT Sname, Sno, Ssex
FROM Student
WHERE Sname LIKE ‘劉%’
【例16】:查詢姓“歐陽”且全名為三個漢字的學生的姓名。
SELECT Sname
FROME Student
WHERE Sname LIKE ‘歐陽_’;
【例17】:查詢名字中第二個字為“陽”字的學生的姓名和學號。
???????? SELECT Sname, Sno
FROME Student
WHERE Sname LIKE’__陽%’;
【例18】:查詢所有不姓劉的學生姓名
SELECT? Sname,
FROM Student
WHERE Sname NOT LIKE ‘劉%’;
6)模式匹配
在LIKE操作符的模式中
1.用%(有時候用*)匹配任意子串
2.用__(有時候用?)匹配任意一個字符
3.在模式中為了使用特殊字符%和__等,允許用\將他們轉義成普通字符。
4.如:LIKE’__ __\%’ ESCAPE‘\’(ESCAPE‘\’表示“\”為轉換字碼)
5.在ACCESS中查找通配符用 [] 。
ii.使用轉碼字符將通配符轉義為普通字符
【例19】查詢DB_Design課程的課程號和學分。
SELECT Cno, Ccredit
FROM Course
WHERE Cname LIKE ‘DB\_Design’ESCAPE’\’
【例20】查詢以‘DB_’開頭,且倒數第三個字符為i的課程的詳細情況。
SELECT *
FROME Course
WHERE Cname LIKE ‘DB\_%i_ _’ESCAPE’\’
7)涉及空值的查詢
(謂詞:IS NULL或IS NOT NULL “IS”不能用“=”代替)
i.【例21】某些學生選修課程后沒有參加考試,所以有選課記錄,但是沒有考試成績。查詢缺少成績的學生的學號和相應的課程號。
SELECT Sno, Con
FROM SC
WHERE Grade IS NULL.
ii.【例22】查詢所有有成績的學生學號和課程號
SELECT Sno, Cno
FROM SC
WHERE Grade IS NOT NULL
8)多重條件查詢
i.邏輯運算符:AND 和OR 來聯結多個查詢條件
1.AND的優先級高于OR
2.可以用括號改變優先級
ii.可用來實現多種其他謂語
1.[NOT] IN
2.NOT] BETWEEN…AND…
iii.【例23】查詢計算機系年齡在20歲下的學生和姓名。
SELECT Sname
FROM Student
WHERE Sdept=‘CS’AND Sage<20;< span="">
iv.改寫【例12】
【例12】:查詢信息系(IS),數學系(MA)和計算機科學系(CS)學生的姓名和性別。
SELECT Sname, Ssex
FROM Student
WHERE Sdept IN(‘IS’,’MA’,’CS’)
可改寫為:
SELECT Sname,Ssex
FROME Student
WHERE Sdept=’IS’OR Sdept=’MA’OR Sdept =’CS’
9)ANY,ALL的使用
i.
ii.【例24】:查詢比計算機系所有學生年齡都小的學生姓名和年齡。
SELECT SNAME,AGE
FROM Student
WHERE? AGE
( SELECT AGE
FROM Student
WHERE DEPT=’計算機’);
3.ORDER BY子句
1)ORDER BY子句
可以按一個或多個屬性列排序
1.升序:ASC:
2.降序:DESC;缺省值為升序
2)當排序列含空值時
1.ASC:排序列為空值的元組最后顯示
2.DESC:排序列為空值的元組最先顯示。
3)【例25】:查詢選修了3號課程的學生的學號及其成績,查詢結果按分數降序排列
SELECT Sno, Grade
FROM SC
WHERE Cno=’3’
ORDER BY Grade DESC
4)【例26】:查詢全體學生請情況,查詢結果按所在系的系號升序排列,同一系中的學生按年齡降序排列。
SELECT *
FROM Student
ORDER BY Sdept, Sage DESC
4.聚集函數
1.計數:
COUNT ([DISTINCT|ALL]*)
COUNT? ([DISTINCT|ALL]<< span="">列名>)
2.計算總和
SUM ([DISTINCT|ALL]<< span="">列名>)
3.計算平均值
AVG ([DISTINCT|ALL]<< span="">列名>)
4.計算最大最小值
MAX ([DISTINCT|ALL]>)
MIN([DISTINCT|ALL]<< span="">列名>)
1)【例27】:查詢學生總人數
SELECT COUNT(*)
FROM Student;
【例28】:查詢選修了課程的學生人數
SELECT COUNT(DISTINCT Sno)
FROM SC;
【例29】:計算1號課程的學生平均成績
SELECT AVG(Grade)
FROM SC
WHERE Cno=’1’;
【例30】查詢選修了1號課程的學生最高分數。
SELECT MAX(Grade)
FROM SC
WHERE Cno=’1’;
【例31】查詢學號為200215012的學生選修課的總學分數。
SELECT SUM(Ccredit)
FROM SC, Course
WHERE Sno=’200215012’AND SC.Cno=Course.Cno;
5.GROUP BY 子句
GROUP BY子句分組:細化聚集函數的作用對象
1.未對查詢結果分組,聚集函數將作用于整個查詢結果
2.對查詢結果分組后,聚集函數將分別作用于每個組
3.作用對象是查詢的中間結果表
4.按指定的一列或多列分組,值相等的為一組。
1)【例32】:求各個課程號及相應的選課人數
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Con;
【例33】:查詢選修了3門以上課程的學生學號。
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3
HAVING短語和WHERE子句的區別(作用對象不同)1.WHERE子句作用于基表或視圖,從中選擇滿足條件的元組。2.HAVING短語作用于組,從中選擇滿足條件的組。這一期的文章就介紹到這里,感謝閱讀!,歡迎各界大佬后臺留言或私信我投稿、說出自己的想法、提出建議與批評!希望能通過這個平臺能與大家多多交流,結識更多志同道合的朋友!
總結
以上是生活随笔為你收集整理的sql 倒数第二个_小白初探SQL(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网购防骗指南:警惕红包和不明促销链接(傲
- 下一篇: sql另一个安装程序实例已在运行_SQL