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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL伪代码的编写

發布時間:2023/12/9 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL伪代码的编写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  偽代碼編寫在JAVA、C#、PHP中都比較常見,但在SQL里面似乎用的比較少,如果能把它應用到SQL里面的話,對于復雜SQL語句的編寫會有很大幫助。這里拿一個較為常見的SQL來舉例,這個表格在很多面試的時候都有遇到過:
  有兩張表格,分別是學生信息表(Student)、分數表(Score),表格設計如下:

?

要求:取出每個人的數學、語文、物理三科的成績,結果行列設計如下:

姓名  數學  語文  物理

張三  80   80   80  

李四  80   80   80

王五  80   80   80

  以上為了方便起見,就沒有按數據庫里面的實際數據來寫,大家知道是什么意思就行了。

  這個問題是我早年參加筆試時的夢魘,因為總是想不到該怎么寫。但后來在一家互聯網公司里混,整天碰到的都是這類東西,寫的多了也就無所謂了。其實這就是偽代碼的一個應用,下面作個示例。

  表格設計良好的情況下,我們應該是這樣寫語句的:

SELECT st.StudentName AS 姓名,ISNULL(math.Score,0) AS 數學,ISNULL(chn.Score,0) AS 語文,ISNULL(phy.Score,0) AS 物理

FROM Student st

? ? LEFT JOIN Score_Math math ON math.StudentId=st.StudentId---關聯數學表

? ? LEFT JOIN Score_Chinese?chn?ON chn.StudentId=st.StudentId--關聯語文表

? ? LEFT JOIN Score_Physic?phy?ON phy.StudentId=st.StudentId--關聯物理表

  這個代碼一看就知道是有問題的,因為數學、語文、物理三個表格并不存在,如果我們能夠把這三張表格給構建起來,依次代替Math、Chinese、Physic這三張表的位置,這個SQL就算是完成了。

  首先構建Math表:

  SELECT Score,StudentId FROM Score WHERE SubjectName='數學'

  然后用構建好的Math表去替換偽代碼中的數學表:

SELECT st.StudentName AS 姓名,ISNULL(math.Score,0) AS 數學,ISNULL(chn.Score,0) AS 語文,ISNULL(phy.Score,0) AS 物理

FROM Student st

? ? LEFT JOIN (SELECT Score,StudentId FROM Score WHERE SubjectName='數學')math ON math.StudentId=st.StudentId---關聯數學表

? ? LEFT JOIN (SELECT Score,StudentId FROM Score WHERE SubjectName='語文')chn?ON chn.StudentId=st.StudentId--關聯語文表

? ? LEFT JOIN (SELECT Score,StudentId FROM Score WHERE SubjectName='物理')phy?ON phy.StudentId=st.StudentId--關聯物理表

  大功告成!

?

  當然還有另外一種寫法,這種寫法就是通過過濾數據來構建數學\語文\物理三個分數表,只是這種寫法看上去不是很直觀,不過也算一種方法,我也把它寫出來吧:

SELECT st.StudentName AS 姓名,ISNULL(math.Score,0) AS 數學,ISNULL(chn.Score,0) AS 語文,ISNULL(phy.Score,0) AS 物理

FROM Student st

?LEFT JOIN Score math ON math.StudentId=st.StudentId AND math.SubjectName='數學' ---關聯數學表
?LEFT JOIN Score chn ON chn.StudentId=st.StudentId AND chn.SubjectName='語文'--關聯語文表
?LEFT JOIN Score phy ON phy.StudentId=st.StudentId AND phy.SubjectName='物理'--關聯物理表

?

看下運行結果:

?

  總結一下,SQL偽代碼的思路有以下幾步:
  1、先按照題目中的要求,用SELECT 字段 FROM 表格關聯 WHERE 條件的方法,構建出一個最初的SQL語句。這個語句中僅包含必須提取的字段,以及提取這些字段所需要的表格(不存在的話就自己命名一個),這個就是我們需要的偽代碼
  2、查看語句中不存在的字段與表格,通過臨時表構建、數據篩選的方式建立關聯表,然后把它替代到偽代碼里面,結束。

  當然,實際的SQL編寫可能比這復雜的多,不過都可以通過類似的方法來構建,只是構建層級更多一些而已

總結

以上是生活随笔為你收集整理的SQL伪代码的编写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。