經常使用sql語法初級

博主在工做中,經常須要使用sql語句來進行查詢,總結髮現,靈活使用這幾個要點,就能夠應付大部分簡單狀況。sql

一.鏈接:根據兩個或多個表中的列之間的關係,從這些表中查詢數據。學習

  • JOIN或INNER JOIN: 返回左表和右表中相互匹配的行
  • LEFT JOIN: 返回左表和右表中相互匹配的行,及左表中不相匹配的行
  • RIGHT JOIN: 返回左表和右表中相互匹配的行,及右表中不相匹配的行
  • FULL JOIN或FULL OUTER JOIN: 返回左表和右表中相互匹配的行,及不相匹配的行
  •  
  • 應用舉例
  • 在一些題目中沒有明確的暗示狀況下,使用哪種鏈接方式均可以;
  • 也有一些狀況,只能使用特定的鏈接方式。

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.子查詢的位置能夠很靈活

相關文章
相關標籤/搜索