日記

日本語の勉強のためのブログ

基本情報技術者試験 平成20年春期 午前問58のSQL文が理解できない → ASの省略だった

問題文と解答は以下を参照。
www.fe-siken.com

理解できなかった点

上のサイトから画像を引用して説明する。

f:id:kalax:20211003182741p:plain
図1. 選択肢の一部
引用元:「平成20年春期問58 部署コードを探すSQL文」、基本情報技術者試験.com、https://www.fe-siken.com/kakomon/20_haru/q58.html (2021年10月3日閲覧)

図1より、選択肢中にS1S2という表記が確認できる。FROM 社員 S1のように書かれているため、自分は最初、「社員」表のほかに「S1」表が存在し、それらの表を結合しているのだろうと思った。
しかしこれら(S1S2)は問題のどこを見ても説明されていない
さらによく考えてみると、もし結合しているのであればFROM 社員, S1のようにカンマ区切りで表記するはずである。しかし図1を見てわかるように、この選択肢においては空白区切りで表記されている
これはいったいどういうことなのか。

結論

ずばりASの省略である。

「テーブル名 AS 別名」とすることで、テーブル名を別名に変更することが出来ます。
次のSQLでは、TAB1テーブルをAという別名に変更しています。
SELECT * FROM tab1 AS A;
ASキーワードは省略し、次のように書くこともできます。
SELECT * FROM tab1 A;

引用元:「【SQL】asでテーブル名やカラム名を別名に変更する方法」、SE日記、https://oreno-it.info/archives/2663 (2021年10月3日閲覧)

つまり図1に示した選択肢

SELECT DISTINCT 部署コード FROM 社員 S1
 WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員 S2
  WHERE S1.部署コード = S2.部署コード
  AND S2.職務 = 'プログラマ')

SELECT DISTINCT 部署コード FROM 社員 AS S1
 WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員 AS S2
  WHERE S1.部署コード = S2.部署コード
  AND S2.職務 = 'プログラマ')

というコードと同一である。

おわりに

選択肢のSQL文の意味は理解できたものの、問題自体はまだ理解できていない・・・
数日置いてからまた解き直してみようと思う。