SQL 基本查询语句
生活随笔
收集整理的這篇文章主要介紹了
SQL 基本查询语句
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這篇博客主要介紹SQl基本查詢語句
下面是查詢基于的表
Student表
SC表
Course表
下面是具體的代碼
1.創建表CREATE TABLE Student( //創建學生表 Sno CHAR(15) PRIMARY KEY, //指定主碼Sname CHAR(20) UNIQUE, //唯一性約束條件Ssex CHAR(6),Ssage CHAR(6),Sdept CHAR(6))CREATE TABLE Course( //創建課程表Cno CHAR(20) PRIMARY KEY,Cname CHAR(20), Cpno CHAR (20),Ccredit CHAR(10)FOREIGN KEY (Cpno) REFERENCES Course(Cno) //外碼的大小必須和依賴的碼大小相同,否則會出現不一致的現象,無法創建外碼)CREATE TABLE SC //創建選課表(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 //查詢學生學號,姓名,系FROM Student 1.2 查詢經過計算的值SELECT 2017-Ssage '年齡' //查詢學生的年齡,由于是計算值,所以計算完成后沒有表名。需要額外的加入表名FROM Student 1.3 查詢表中元祖SELECT DISTINCT Sno //查詢選修課的學號,用distinct消除重復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 //查詢在IS和CS系的學生FROM Student WHERE Sdept IN('IS','MA') //IN和等于的區別, 當IN里面只有一個元素的時候,和=是等價的,其余不等價字符匹配查詢SELECT Sname,SnoFROM StudentWHERE Sname LIKE '李%' //%號查詢是匹配任意長度, _劃線查詢是匹配單個字符長度SELECT Sname,Sno //如果出現like后面有和_一樣的符號,需要用轉義字符來區分FROM StudentWHERE Sname LIKE '李&_勇' ESCAPE '&' 1.5 ORDER BY 語句按一個或者多個屬性進行排列,ASC升序,DEC降序,默認升序SELECT Sno,GradeFROM SCORDER BY Grade DESC 1.6 聚集函數聚集函數是數據庫提供的一組用于計算的函數,它有COUNT(統計數量),SUM(計算總和),AVG(求平均值),MAX(求最大值),MIN(求最小值),SELECT COUNT(Sno) '人數' //求人數FROM Student 1.7 GROUP BY GROUP BY 是對聚集函數的細化,如果沒有GROUP BY,聚集函數作用的是整張表,有了GROUP BY 可以按照分組來進行劃分SELECT Cno,COUNT(Sno) '人數' //查詢選修各門課的人數,SELECT后面的元素,必須在group by 里面,或者 聚集函數里面FROM SCGROUP BY Cno 1.8 HAVING和WHERE的區別SELECT Sno //查詢選修課大于三門課的同學的學號FROM SCGROUP BY SnoHAVING COUNT(Sno)>=3HAVING作用于表或視圖。WHERE作用于分祖。2 連接查詢當涉及多個表的查詢的時候,可以采用連接查詢 2.1 等值連接,非等值連接,自然連接等值連接是兩張表里面找出相等的兩列自然連接是把重復的列去掉SELECT Student.*,SC.Cno,SC.Grade //這是自然連接,表中沒有重復的列。如果把SC換成SC.*,那么就是等值連接FROM Student,SCWHERE Student.Sno=SC.Sno 2.2 自身連接如果一張表自己和自己相連,那么就是自身連接,自身連接的時候必須起別名來區分第一張表和第二張表。因為涉及兩張表的,所以他們的同名屬性要加別名區分。SELECT First.Cno,First.Cname,Second.Cno,Second.Cname //查詢每一門課程的先行課,這里用Second.Cno而不用Second.Cpno可以避免選修課為空的情況FROM Course First,Course SecondWHERE FIRST.Cpno=Second.Cno 2.3 外連接普通連接只會把滿足條件的元組輸出,而外連接可以把不滿足條件的元組也輸出。如輸出學生選修課的成績,普通連接只是會輸出有成績的學生,外連接可以輸出沒有成績的學生外鏈接分為左外連接(列出左邊的所有元組),右外鏈接(列出右邊的所有元組),全連接(列出左邊右邊全部的元組) SELECT Student.Sno,Ssex,Sdept,Cno,GradeFROM Student LEFT OUTER JOIN SC ON(Student.Sno=SC.SnO) 2.4 復合條件連接,多表連接連接的時候where語句有好多條件,中間用AND連接。 多表連接和復合條件連接有相似的地方,比如三張表連接,連接的時候,兩張表兩張表的連接,最后用AND連接起來SELECT Student.Sno,SnameFROM Student,SCWHERE Student.Sno=SC.Sno AND Grade>90 3 嵌套查詢一個SELECT-FROM-WHERE是一個查詢塊,將一個查詢塊放在另一個查詢的where或者,having里,為嵌套查詢相關子查詢,不相關子查詢 子查詢不依賴于父查詢為不相關子查詢,依賴于子查詢為相關子查詢 3.1 帶有IN謂詞的嵌套查詢SELECT Sno //查詢選修課成績大于90分的學生的學號FROM StudentWHERE Sno IN(SELECT SnoFROM SCWHERE Grade>=90)//查詢選修了信息系統這門課的學生的學號和姓名SELECT Sno,Sname //這是一個不相關的子查詢,FROM StudentWHERE Sno IN(SELECT SnoFROM SCWHERE Cno IN (SELECT CnoFROM CourseWHERE Cname='信息系統'))對于不相關子查詢也可換成連接查詢SELECT Student.Sno,SnameFROM Student,SC,CourseWHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname='信息系統'‘ 3.2 帶有比較符的嵌套查詢SELECT Sno,Cno //相關子查詢,如果涉及一張表里的屬性在父查詢和子查詢中都出現。必須要加入別名FROM SC x //查詢每門課程中大于自己選修課平均分的課程WHERE Grade>=(SELECT AVG(Grade)FROM SC yWHERE X.Sno=Y.Sno) 3.3 帶有ANY,ALL謂詞的子查詢ANY是任何一個,all是所有,在應用的時候,往往和比較運算符來結合使用>any,比最小的元素大(等價于>MIN),>all,比最大的元素(等價于>MAX),,比最大的元素小(等價于<MAX),<all,比最小的元素小(等價于<MIN)SELECT Sno,Sname //查詢除了IS系之外的其他的系的年齡小于IS系中最大的年齡的人FROM StudentWHERE Ssage<ANY(SELECT SsageFROM StudentWHERE Sdept='IS' )AND Sdept<>'IS'下面是等價的式子SELECT Sno,SnameFROM StudentWHERE Ssage<(SELECT MAX(Ssage)FROM StudentWHERE Sdept='IS' )AND Sdept<>'IS' 3.4 帶有ESTSIS謂詞的查詢EXISTS表示存在的意思,他只有true和false的意思,如果內層查詢為空,則返回false給where,如果內層查詢為非空,則返回trueNOT EXISTS 表示不存在的意思。和上面的正好相反。查詢的結果依賴于EXISTS后面是TRUE還是false//查詢選修了一號課程學生的姓名SELECT SnameFROM StudentWHERE EXISTS (SELECT *FROM SCWHERE Student.Sno=SC.Sno AND Cno='1') 4 集合查詢UNION 并操作,EXCEPT 差操作, INTERSECT 交操作 參加集合的操作的列數必須相同,而且數據類型必須相同//查詢IS系的同學或年齡小于19的同學SELECT * //UNION 會自動去掉重復的列 UNION ALL 不會去掉重復的列FROM StudentWHERE Sdept='IS'UNIONSELECT *FROM StudentWHERE Ssage<=19 //等價于select后面的語句是where Sdept='IS' or Ssage<=19總結
以上是生活随笔為你收集整理的SQL 基本查询语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教育项目--阿里云视频点播【34】
- 下一篇: 生成树算法