国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

數(shù)據(jù)庫SQL語言語法總結(jié)3---查詢語句

2019-11-09 13:36:11
字體:
供稿:網(wǎng)友

SQL查詢語句,即在數(shù)據(jù)庫中查詢符合條件的記錄

語法格式: select [all|distinct] <目標列表達式> [,<目標列表達式>] […..] from 表名|視圖表 [where <條件表達式>] [group by <列名> [having <條件表達式>]] ———————按屬性列分組顯示 [order by <列名> [asc|desc]] ————————————–表示按屬性列進行排序

語法格式表達式中[]表示括號中內(nèi)容可以省略。|的兩邊二選一,即為或。而<>無意義 且語法格式中all為全部查詢顯示出來,distinct為刪除相同的記錄,將不同的記錄查詢顯示出來

目標列表達式: 1) * : 表示“from”后所跟的關(guān)系列表中的全部屬性(因為“from”后可以跟有多個列表,*將所有列表的屬性全部顯示) 2) 表名.* :表示單個表的全部屬性(將“from”后跟著的多個表中的一個選定的表的全部屬性全部顯示) 3) count(*):統(tǒng)計關(guān)系表中符合條件的記錄的個數(shù) 4) 字段名表達式:可以是屬性列,也可以是屬性列與庫函數(shù)結(jié)合使用

庫函數(shù): 1)count [distinct] + 屬性列名稱:在此屬性列下不同的值的個數(shù) 2)sum +屬性列名稱:求和 3)avg + 屬性列名稱 :求平均值 4)max + 屬性列名稱 :求最大值 5)min + 屬性列名稱 :求最小值 (每個庫函數(shù)都可以在其關(guān)鍵字后加[distinct]來將此屬性下相同的記錄去除,所以到底加不加distinct 視情況而定)

where條件 1)字段名 運算符 {字段名|常量} 2)字段名 [not] between {字段名|常量} and {字段名|常量} 3)字段名 [not] like 字符串常數(shù) 4)字段名 is [not] null 5){字段名|常量} {[not] in | 運算符 {any | all}}{值1[,值2]……|select子句} 6)[not] exists (select子句) 7)條件表達式{and|or}條件表達式

下面結(jié)合幾個例子來進一步了解SQL查詢語句

前提條件:數(shù)據(jù)庫中現(xiàn)存在3個關(guān)系表 Student (Sno ,Sname,Ssex,Sage,Sdept); 解釋:學(xué)生(學(xué)號,學(xué)生姓名,學(xué)生性別,學(xué)生年齡,學(xué)生專業(yè)); Course(Cno,Cname,Cpno); 解釋:課程(課程號,課程名,可能的先修課程); SC(Sno,Cno,Grade); 解釋:學(xué)生選課情況(學(xué)號,課程號,成績);

查詢語句: 1) 查詢學(xué)生的學(xué)號,姓名 —— select Sno,Sname from Student 2)查詢學(xué)生的全部信息——- select * from Student 3)查詢學(xué)生的姓名和出生年份——-select Sname,2017-Sage from Student 其中Sage是年齡,所以2017-Sage表示出生年份 4)查詢學(xué)生的姓名出生年月和專業(yè),其中出生年月以Year of birth為標題,專業(yè)以小寫顯示并以Department為標題——–select Sname,2001-Sage ‘Year of birth’,is lower(Sdept) Department from Student 其中,在屬性名后加一個空格,再跟著一串字符即為標題,而is lower為轉(zhuǎn)化為小寫的函數(shù),將專業(yè)轉(zhuǎn)化為小寫,而如果標題內(nèi)部沒有空格則不需要用‘’,此例中Department中無空格則直接寫,Year of birth因為有空格則加‘’。 5)查詢選了課的學(xué)生的學(xué)號——select distinct Sno from SC 6)顯示選了課的學(xué)生的學(xué)號,不刪除相同的記錄———-select Sno from SC = select all Sno from SC 7)查詢專業(yè)為CS的學(xué)生的姓名——–select Sname from Student where Sdept = ‘CS’ 8)查詢成績<60分的學(xué)生的學(xué)號(刪除相同的記錄)——–select distinct Sno from SC where Grade <60 9)查詢年齡在20至30歲的學(xué)生的姓名專業(yè)和年齡 ——–select Sname,Sdept,Sage from Student where Sage between 20 and 30 10)查詢專業(yè)為CS MA IS 三者中任何一個的學(xué)生的姓名和性別——–select Sname,Ssex from Student where Sdept in (‘CS’,’MA’,’IS’) 11)查詢名字不以“劉”開頭的學(xué)生的全部信息——–select * from Student where Sname not like ‘劉%’ (%為通配符,可以匹配任意長度的字符串,劉%就表示姓劉的所有人) 12)查詢姓歐陽,然后名為一個字的學(xué)生的信息———select * from Student where Sname like ‘歐陽_ ‘( 為通配符,但只匹配一個字節(jié),而中文是兩個字節(jié),所以匹配一個字要用兩個 _ ) 13)查詢課程名為DB_ Design的課程的全部信息———select * from Course where Cname like ‘DB/ _ Design’(當字符串中出現(xiàn)通配符%或者_ 時,需要在通配符前加入轉(zhuǎn)義字符/即DB/ _Design為DB_Design) 14)查詢分數(shù)為空即沒有成績的學(xué)生的學(xué)號和該課程號———select Sno,Cno from SC where Grade is null 15)查詢專業(yè)為CS且年齡<20歲的學(xué)生的姓名———select Sname from Student where Sdept = ‘CS’ and Sage <20

查詢結(jié)果排序: 1)查詢選修課程號為3的記錄,按照分數(shù)從高到低降序排列,desc為降序排列———select * from SC where Cno = ‘3’ order by Grade desc 2) 將Student關(guān)系表按照學(xué)生所在專業(yè)的ASCII碼的升序排列,專業(yè)名相同時按照年齡的降序排列———select * from Student order by Sdept,Sage desc(默認為升序排列,顯性表示desc為降序排列)

庫函數(shù)的使用: 1)查詢Student表中的記錄數(shù)———select count(*) from Student 2)查詢選了課的學(xué)生的數(shù)量———select count(distinct(Sno)) from SC(選了課的學(xué)生的數(shù)量即在SC中不同的學(xué)號的數(shù)量) 3)查詢選修了1號課程的學(xué)生的平均分———select avg(Grade) from SC where Cno = ‘1’ 4)查詢選修了1號課程的學(xué)生的最高分———select max(Grade) from SC where Cno = ‘1’

對查詢結(jié)果進行分組 1)查詢各課程的課程號以及選修了這門課的學(xué)生的人數(shù)———select Cno,count(Sno) from SC group by Cno(按照課程號分組,即一個課程號為一組。一個課程號對應(yīng)的學(xué)號的數(shù)量即為選修了這門課的學(xué)生的人數(shù)) 2)查詢選修了3門課以上的學(xué)生的學(xué)號———- select Sno from SC group by Sno having count(*) >3(按照學(xué)號進行分組,一個學(xué)號為一組,SC中對應(yīng)的記錄為一個學(xué)號選修了一門課的選修情況,所以一個學(xué)號對于的記錄大于3為選修了超過3門課的學(xué)生)

連接查詢: 1)等值連接:查詢每個學(xué)生的信息和選修課程情況—————–select Student.* from Student,SC where Student.Sno = SC.no 2)復(fù)合條件連接:查詢選修了2號課程且分數(shù)在90分以上的學(xué)生的全部信息————–select Student.* from Student,SC where Student.Sno = SC.no and SC.Cno = ‘2’ and SC.Grade >90( Student.Sno = SC.no為隱含條件,需要注意)

嵌套查詢: 1)查詢與‘劉晨’在同一個專業(yè)學(xué)習的學(xué)生———select Sno,Sname,Sdept from Student where Sdept in (select Sdept from Student where Sname = ‘劉晨’)(分析時可以從后向前分析,如此例分析:select Sdept from Student where Sname = ‘劉晨’ 為 劉晨 所學(xué)的專業(yè),select Sno,Sname,Sdept from Student where Sdept in 為查詢某個專業(yè)的學(xué)生的學(xué)號,姓名,專業(yè),所以共同組成了這個查詢,即為查詢在劉晨所學(xué)的專業(yè)中的學(xué)生的學(xué)號,姓名,專業(yè)。顯示專業(yè)因為劉晨可能重名,并且在不用的專業(yè),所以因此要顯示詳細信息) 2)查詢選修了‘信息系統(tǒng)’的學(xué)生學(xué)號和姓名————–select Sno,Sname from Student where Sno in (select Sno from SC where Cno in (select Cno from Course where Cname = ‘信息系統(tǒng)’)) (分析:select Cno from Course where Cname = ‘信息系統(tǒng)’表示查詢課程名為信息系統(tǒng)的課程號,select Sno from SC where Cno in表示查詢選修信息系統(tǒng)的學(xué)生的學(xué)號,select Sno,Sname from Student where Sno in為查詢選修了信息系統(tǒng)的學(xué)生的相關(guān)信息)等價于 select Sno,Sname from Student,SC,Course where Student.Sno = SC.Sno and SC.Cno = Course. Cno and Course.Cname = ‘信息系統(tǒng)’

帶比較運算符的子查詢: 查詢與‘劉晨’在同一個專業(yè)學(xué)習的學(xué)生————-select * from Student where Sdept = (select Sdept from Student where Sname = ‘劉晨’)

帶any,all子查詢 1)查詢其他系統(tǒng)比信息系某一學(xué)生年齡小的學(xué)生姓名和年齡—————select Sname,Sage from Student where Sage < any(select Sage from Student where Sdept = ‘IS’)and Sdept!=’IS’ 等價于 select Sname,Sage from Student where Sage <(select max(Sage) from Student where Sdept = ‘IS’)and Sdept!=’IS’ (any為滿足查詢到的所有記錄中的任意一個即可,此例為小于查詢到的記錄中的任何一個) 2)查詢其他系統(tǒng)比信息系全部學(xué)生年齡小的學(xué)生姓名和年齡—————select Sname,Sage from Student where Sage < all(select Sage from Student where Sdept = ‘IS’)and Sdept!=’IS’ 等價于 select Sname,Sage from Student where Sage <(select min(Sage) from Student where Sdept = ‘IS’)and Sdept!=’IS’ (all為滿足條件的所有記錄,此例表達意為<所有查詢到的記錄)

帶exists 的子查詢 1) 查詢選修了1號課程的學(xué)生的姓名 —————select Sname from Student where exists(select * from SC where Sno = Student.Sno and Cno=’1’) 2)查詢選修了課程1或者課程2的學(xué)生的學(xué)號———— select Sno from SC where Cno = ‘1’ union select Sno from SC where Cno = ‘2’ 等價于select Sno from SC where Cno = ‘1’ or Cno = ‘2’ 等價于select Sno from SC where Cno in(‘1’ , ‘2’)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 秭归县| 雷山县| 富民县| 格尔木市| 南雄市| 承德市| 宁都县| 洱源县| 双城市| 峨边| 天水市| 姚安县| 瓦房店市| 蛟河市| 瑞丽市| 溧水县| 滁州市| 蓬溪县| 腾冲县| 凯里市| 大新县| 佛山市| 乌拉特后旗| 东丰县| 阳东县| 永吉县| 麻城市| 山阴县| 大宁县| 涿鹿县| 岳西县| 香格里拉县| 泰宁县| 涟源市| 长岛县| 垫江县| 清丰县| 阿城市| 稻城县| 高青县| 永仁县|