changed 3 years ago
Published Linked with GitHub

MySQL 第二堂0329

作業3-第四題分段解析:

1.先算出加6個月的日期。
A=ADDDATE(hiredate, INTERVAL 6 MONTH)

2.加6個月後,要幫還沒到星期一的補上天數。讓它到星期一,但已經是星期一的就+0天。
先把加6個月後的日期在星期幾算出,用WEEKDAY來算出(星期一=0星期日=6)
B=WEEKDAY(ADDDATE(hiredate, INTERVAL 6 MONTH))

3.再來算分別差幾天能到星期一,所以用7減(B)來算出差幾天,所以會得出(星期一差7天星期日差1天)
C=7-WEEKDAY(ADDDATE(hiredate, INTERVAL 6 MONTH))

但原本就星期一因為己經是當天了,再7天就會進到下個星期一,所以這邊要讓7變成0
所以透過MOD(7)求餘數讓7成為0而其它數值不變
D=MOD(7-WEEKDAY(ADDDATE(hiredate, INTERVAL 6 MONTH)),7)

然後把要補上的天數(D)加到加了6個月的日期(A)中
F=ADDDATE(A, INTERVAL D DAY)

最後把算出來的結果(F),以老師指定的格式呈現。
DATE_FORMAT( F ,' %W, the %D of %M ')

注意:以上為拆解後的程式碼,不是真正解答的格式。結合後的答案如下。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


IFNULL

用於讓NULL以別的方式呈現,例如:範例comm中的null值,若想用別的方式呈現為'沒傭金',可透過IFUNLL(comm,"沒傭金")來做置換。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

也可透過讓0取代NULL值來做運算,例如:計算薪水+傭金


My SQL子句執行順序:

在MySQL中,別名可以出現在HAVING,但不能出現在WHERE,因為SELECT還未被執行,會不知道別名是誰。

此用法在其它SQL中不一定可行,因為SELECT正規的執行順序是在HAVING後。


JOIN:

當資料來自於不同表格時,就需要透過用JOIN來進行結合應用。

1.交叉連結 CROSS JOIN(不常用)
將表格可能對應的項目全部對應列出,因此難以確認誰是誰。

2.自然連結 Natural JOIN(不建議用)
自動找到同名的欄位來做連結,但在其它SQL中不一定支援此語法。不建議使用。

3.相等連結 Equal JOIN(建議使用,較正規)
將要連結的表格名列在FROM中,透過join與on來設定連接條件。


錯誤回報

若筆記內有發現錯誤隨時可以登入後在這邊留言~

Select a repo