博主在工做中,經常須要使用sql語句來進行查詢,總結髮現,靈活使用這幾個要點,就能夠應付大部分簡單狀況。sql
一.鏈接:根據兩個或多個表中的列之間的關係,從這些表中查詢數據。學習
1.join/inner joinspa
必須使用inner join的狀況code
1 --查詢全部未講課的教師的Tname和Depart. 2 select TNAME,DEPART 3 from TEACHER 4 where TNO not in(select TEACHER.TNO from COURSE inner join 5 TEACHER on COURSE.TNO=TEACHER.TNO) 6 --或者使用 Except 7 select TNAME,DEPART from TEACHER 8 except 9 select TNAME,DEPART from COURSE join TEACHER on COURSE.TNO=TEACHER.TNO
上面的sql語句中的「select TEACHER.TNO from COURSE inner join TEACHER on COURSE.TNO=TEACHER.TNO」中,只能使用inner join,使用left join、right join、full join都是錯誤的。對象
2.left join和right join blog
使用了left join 的狀況,調換一下表的位置,就能夠用right join替換;反之亦然。排序
1 --查詢全部學生的Sname、Cname和Degree列。 2 select SNAME,CNAME,DEGREE 3 from STUDENT left join SCORE on STUDENT.SNO=SCORE.SNO 4 left join COURSE on SCORE.CNO=COURSE.CNO
也能夠寫成class
1 select SNAME,CNAME,DEGREE 2 from score right join STUDENT on STUDENT.SNO=SCORE.SNO 3 right join COURSE on SCORE.CNO=COURSE.CNO
3.使用full join的狀況較少,暫時尚未用到。select
2、嵌套sql語句
在sql語言中,一個select-from-where語句成爲一個查詢塊。
將一個查詢塊嵌套在另外一個查詢塊的where子句或having短語的條件中的查詢成爲嵌套查詢。
SQL語言容許多層嵌套查詢,但要注意的是,子查詢的select語句中不能使用order 不要子句,order by子句只能對最終查詢結果排序。
當掌握了sql語句的執行順序後,就會對這個限制的緣由有更深入的理解。
舉例
子查詢在where子句中
1 --查詢成績高於學號爲「109」、課程號爲「3-105」的成績的全部記錄。 2 select * from SCORE where DEGREE>(select DEGREE from SCORE where SNO='109' and CNO='3-105')
3、子查詢
上層的查詢塊稱爲外層查詢或者父查詢,下層查詢塊稱爲內層查詢或者子查詢。
子查詢的位置能夠很靈活,掌握這一點,感受sql學習就有了很大的進展。
1.子查詢能夠放到where子句或having短語的條件中,這就是咱們上面所介紹的嵌套查詢
2.子查詢能夠出如今from子句中,這時子查詢生成的臨時派生表,稱爲主查詢的查詢對象
1 --查詢全部選修了1號課程的學生姓名 (固然也可使用嵌套查詢) 2 select Sname from Student,(select * from SC where cno='1') SC1 where Student.sno=SC1.sno
3.子查詢能夠嵌套在INSERT語句中用以生成要插入的批量數據
1 --對每一個系,求學生的平均年齡,再把結果插入Dept_age(Sdept,Avg_age)中 2 insert into Dept_age(Sdept,Avg_age) 3 select Sdept.AVG(Sage) 4 from Student 5 group by Sdept
要點總結
1.鏈接:inner join、right join、left join 、full join
2.嵌套:將一個查詢塊嵌套在另外一個查詢塊的where子句或having短語的條件中
3.子查詢的位置能夠很靈活