日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL 基本查询语句

發(fā)布時(shí)間:2024/5/14 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL 基本查询语句 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇博客主要介紹SQl基本查詢語(yǔ)句

下面是查詢基于的表

Student表


SC表


Course表



下面是具體的代碼

1.創(chuàng)建表CREATE TABLE Student( //創(chuàng)建學(xué)生表 Sno CHAR(15) PRIMARY KEY, //指定主碼Sname CHAR(20) UNIQUE, //唯一性約束條件Ssex CHAR(6),Ssage CHAR(6),Sdept CHAR(6))CREATE TABLE Course( //創(chuàng)建課程表Cno CHAR(20) PRIMARY KEY,Cname CHAR(20), Cpno CHAR (20),Ccredit CHAR(10)FOREIGN KEY (Cpno) REFERENCES Course(Cno) //外碼的大小必須和依賴的碼大小相同,否則會(huì)出現(xiàn)不一致的現(xiàn)象,無(wú)法創(chuàng)建外碼)CREATE TABLE SC //創(chuàng)建選課表(Sno CHAR(15),Cno CHAR(20),Grade CHAR(5)PRIMARY KEY(Sno,Cno),FOREIGN KEY (Sno) REFERENCES Student(Sno),FOREIGN KEY (Cno) REFERENCES Course(Cno)) 1單表查詢1.1 查詢表中的某一列SELECT 列名FROM 表名eg:SELECT Sno,Sname,Sdept //查詢學(xué)生學(xué)號(hào),姓名,系FROM Student 1.2 查詢經(jīng)過(guò)計(jì)算的值SELECT 2017-Ssage '年齡' //查詢學(xué)生的年齡,由于是計(jì)算值,所以計(jì)算完成后沒(méi)有表名。需要額外的加入表名FROM Student 1.3 查詢表中元祖SELECT DISTINCT Sno //查詢選修課的學(xué)號(hào),用distinct消除重復(fù)FROM SC 1.4 查詢滿足條件的元祖常用的滿足條件的元祖有,比較>,<,=,<>,確定范圍的BETWEEN AND,NOT BETWEEN AND,確定集合的IN,NOT IN,字符匹配的LIKE,NOT LIKESELECT Sno,Sname,SsageFROM StudentWHERE Sno>19 查詢年齡大于19的, WHERE Ssage BETWEEN 19 AND 20 //查詢年齡在 19到20之間的SELECT Sno,Sdept //查詢?cè)贗S和CS系的學(xué)生FROM Student WHERE Sdept IN('IS','MA') //IN和等于的區(qū)別, 當(dāng)IN里面只有一個(gè)元素的時(shí)候,和=是等價(jià)的,其余不等價(jià)字符匹配查詢SELECT Sname,SnoFROM StudentWHERE Sname LIKE '李%' //%號(hào)查詢是匹配任意長(zhǎng)度, _劃線查詢是匹配單個(gè)字符長(zhǎng)度SELECT Sname,Sno //如果出現(xiàn)like后面有和_一樣的符號(hào),需要用轉(zhuǎn)義字符來(lái)區(qū)分FROM StudentWHERE Sname LIKE '李&_勇' ESCAPE '&' 1.5 ORDER BY 語(yǔ)句按一個(gè)或者多個(gè)屬性進(jìn)行排列,ASC升序,DEC降序,默認(rèn)升序SELECT Sno,GradeFROM SCORDER BY Grade DESC 1.6 聚集函數(shù)聚集函數(shù)是數(shù)據(jù)庫(kù)提供的一組用于計(jì)算的函數(shù),它有COUNT(統(tǒng)計(jì)數(shù)量),SUM(計(jì)算總和),AVG(求平均值),MAX(求最大值),MIN(求最小值),SELECT COUNT(Sno) '人數(shù)' //求人數(shù)FROM Student 1.7 GROUP BY GROUP BY 是對(duì)聚集函數(shù)的細(xì)化,如果沒(méi)有GROUP BY,聚集函數(shù)作用的是整張表,有了GROUP BY 可以按照分組來(lái)進(jìn)行劃分SELECT Cno,COUNT(Sno) '人數(shù)' //查詢選修各門課的人數(shù),SELECT后面的元素,必須在group by 里面,或者 聚集函數(shù)里面FROM SCGROUP BY Cno 1.8 HAVING和WHERE的區(qū)別SELECT Sno //查詢選修課大于三門課的同學(xué)的學(xué)號(hào)FROM SCGROUP BY SnoHAVING COUNT(Sno)>=3HAVING作用于表或視圖。WHERE作用于分祖。2 連接查詢當(dāng)涉及多個(gè)表的查詢的時(shí)候,可以采用連接查詢 2.1 等值連接,非等值連接,自然連接等值連接是兩張表里面找出相等的兩列自然連接是把重復(fù)的列去掉SELECT Student.*,SC.Cno,SC.Grade //這是自然連接,表中沒(méi)有重復(fù)的列。如果把SC換成SC.*,那么就是等值連接FROM Student,SCWHERE Student.Sno=SC.Sno 2.2 自身連接如果一張表自己和自己相連,那么就是自身連接,自身連接的時(shí)候必須起別名來(lái)區(qū)分第一張表和第二張表。因?yàn)樯婕皟蓮埍淼?#xff0c;所以他們的同名屬性要加別名區(qū)分。SELECT First.Cno,First.Cname,Second.Cno,Second.Cname //查詢每一門課程的先行課,這里用Second.Cno而不用Second.Cpno可以避免選修課為空的情況FROM Course First,Course SecondWHERE FIRST.Cpno=Second.Cno 2.3 外連接普通連接只會(huì)把滿足條件的元組輸出,而外連接可以把不滿足條件的元組也輸出。如輸出學(xué)生選修課的成績(jī),普通連接只是會(huì)輸出有成績(jī)的學(xué)生,外連接可以輸出沒(méi)有成績(jī)的學(xué)生外鏈接分為左外連接(列出左邊的所有元組),右外鏈接(列出右邊的所有元組),全連接(列出左邊右邊全部的元組) SELECT Student.Sno,Ssex,Sdept,Cno,GradeFROM Student LEFT OUTER JOIN SC ON(Student.Sno=SC.SnO) 2.4 復(fù)合條件連接,多表連接連接的時(shí)候where語(yǔ)句有好多條件,中間用AND連接。 多表連接和復(fù)合條件連接有相似的地方,比如三張表連接,連接的時(shí)候,兩張表兩張表的連接,最后用AND連接起來(lái)SELECT Student.Sno,SnameFROM Student,SCWHERE Student.Sno=SC.Sno AND Grade>90 3 嵌套查詢一個(gè)SELECT-FROM-WHERE是一個(gè)查詢塊,將一個(gè)查詢塊放在另一個(gè)查詢的where或者,having里,為嵌套查詢相關(guān)子查詢,不相關(guān)子查詢 子查詢不依賴于父查詢?yōu)椴幌嚓P(guān)子查詢,依賴于子查詢?yōu)橄嚓P(guān)子查詢 3.1 帶有IN謂詞的嵌套查詢SELECT Sno //查詢選修課成績(jī)大于90分的學(xué)生的學(xué)號(hào)FROM StudentWHERE Sno IN(SELECT SnoFROM SCWHERE Grade>=90)//查詢選修了信息系統(tǒng)這門課的學(xué)生的學(xué)號(hào)和姓名SELECT Sno,Sname //這是一個(gè)不相關(guān)的子查詢,FROM StudentWHERE Sno IN(SELECT SnoFROM SCWHERE Cno IN (SELECT CnoFROM CourseWHERE Cname='信息系統(tǒng)'))對(duì)于不相關(guān)子查詢也可換成連接查詢SELECT Student.Sno,SnameFROM Student,SC,CourseWHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname='信息系統(tǒng)'‘ 3.2 帶有比較符的嵌套查詢SELECT Sno,Cno //相關(guān)子查詢,如果涉及一張表里的屬性在父查詢和子查詢中都出現(xiàn)。必須要加入別名FROM SC x //查詢每門課程中大于自己選修課平均分的課程WHERE Grade>=(SELECT AVG(Grade)FROM SC yWHERE X.Sno=Y.Sno) 3.3 帶有ANY,ALL謂詞的子查詢ANY是任何一個(gè),all是所有,在應(yīng)用的時(shí)候,往往和比較運(yùn)算符來(lái)結(jié)合使用>any,比最小的元素大(等價(jià)于>MIN),>all,比最大的元素(等價(jià)于>MAX),,比最大的元素小(等價(jià)于<MAX),<all,比最小的元素小(等價(jià)于<MIN)SELECT Sno,Sname //查詢除了IS系之外的其他的系的年齡小于IS系中最大的年齡的人FROM StudentWHERE Ssage<ANY(SELECT SsageFROM StudentWHERE Sdept='IS' )AND Sdept<>'IS'下面是等價(jià)的式子SELECT Sno,SnameFROM StudentWHERE Ssage<(SELECT MAX(Ssage)FROM StudentWHERE Sdept='IS' )AND Sdept<>'IS' 3.4 帶有ESTSIS謂詞的查詢EXISTS表示存在的意思,他只有true和false的意思,如果內(nèi)層查詢?yōu)榭?#xff0c;則返回false給where,如果內(nèi)層查詢?yōu)榉强?#xff0c;則返回trueNOT EXISTS 表示不存在的意思。和上面的正好相反。查詢的結(jié)果依賴于EXISTS后面是TRUE還是false//查詢選修了一號(hào)課程學(xué)生的姓名SELECT SnameFROM StudentWHERE EXISTS (SELECT *FROM SCWHERE Student.Sno=SC.Sno AND Cno='1') 4 集合查詢UNION 并操作,EXCEPT 差操作, INTERSECT 交操作 參加集合的操作的列數(shù)必須相同,而且數(shù)據(jù)類型必須相同//查詢IS系的同學(xué)或年齡小于19的同學(xué)SELECT * //UNION 會(huì)自動(dòng)去掉重復(fù)的列 UNION ALL 不會(huì)去掉重復(fù)的列FROM StudentWHERE Sdept='IS'UNIONSELECT *FROM StudentWHERE Ssage<=19 //等價(jià)于select后面的語(yǔ)句是where Sdept='IS' or Ssage<=19

總結(jié)

以上是生活随笔為你收集整理的SQL 基本查询语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。