HOME»応用情報技術者試験掲示板»SQLのEXISTS句について
投稿する

SQLのEXISTS句について [2770]

 zimaoyoさん(No.1) 
なぜ、SQLのEXISTS句は語尾に"S"がつくのでしょうか。 
また、類似した質問として、なぜHAVING句だけ"ING"なのでしょうか。
※午後の問題の回答で、「EXISTS」と回答すべきところを「EXIST」と回答してしまいました。
2021.08.31 18:42
ぬるぽよさん(No.2) 
決まりなので応用情報を目指すうえで気にすべき点ではないかと思います。。
2021.08.31 21:32
 zimaoyoさん(No.3) 
回答ありがとうございます。たしかにこれは暗記すべきものとして片付けるものなのかもしれません。
しかし、私自身なかなか覚えられず、過去問を解いているなかで2回もスペルミス(sが抜けてることにより失点)をしてしまったので、もし理由があるのであれば知ることで覚えやすくなると考えた次第でした。
皆さん暗記されているということなのでしょうか?(皆さんは疑問に思いませんでしたでしょうか?)
2021.08.31 22:04
GinSanaさん(No.4) 
AP プラチナマイスター
結局EXISTS述語がbool値(真偽値)を返すから、世の中で使われているAPIよろしく
PHP
bool file_exists ( string $filename )

macOS/iOS の NSFileManager クラス
- (BOOL)fileExistsAtPath:(NSString *)path
Windows の File クラス
bool Exists( string path )
Android(Java) の File クラスでは
boolean exists()
と、大方キーワードコンテキストで生きている(設計された)SQLの最大公約数はEXISTSだった
のだろうと思うのですよ。まあそれを言い出したらSQLも標準キーワードのEXCEPTがMINUS(OracleはMINUS)になってたりどういうことだよと言いたいことは結構あるわけですが・・・。
じゃあANSIに文句を言えばいいかというと、ANSIのSQL86の以前はRDBMSベンダがオレオレ規格でやってましたから、もしかしたらEXISTS述語のキーワードが違ったかもしれませんね。

>皆さんは疑問に思いませんでしたでしょうか?
いいセンスしてます。謎なキーワードセンスがSQLも光るところがあるんですよ。INTERSECTとかDIVIDEとか(集合演算)。
2021.09.01 09:30
GinSanaさん(No.5) 
AP プラチナマイスター
having句は、たしかにと思っていろいろ読み返しましたが、わかりませんねえ。whereフィルタを通した後の時制とかの分詞の最大公約数がこうなったのかはわかりませんが、なぜよりによってこのキーワードなのかは理解しがたい。
stackoverflowとかもさすがにキーワードの由来は興味がないみたいですね。
2021.09.01 09:48
 zimaoyoさん(No.6) 
とてもご丁寧なご回答ありがとうございます。また、色々と調べていただいたようで助かりました。
明確な理由についてはわからないまでも、世の中的に、多くの他言語などのbool関数などではEXISTSが採用されているのですね。勉強になりました。(幅広い知識をお持ちなのですね。)
※having句についてはGinSanaさんでもわからないようですので一旦諦めることにします。笑

なんとなく自分の中で納得の落とし所を見つけれた気がします。
質問してよかったです!ありがとうございました!!
2021.09.01 21:38
JPさん(No.7) 
英語文法にしたがったものだから。
EXISTSは動詞、HAVINGはGROUP BY句に対する分詞。
Sつけるか(=動詞の主語を三人称単数と見なすか否か)若干慣習的なものなので不合理な部分あるかもしれません
2021.09.02 02:55
GinSanaさん(No.8) 
AP プラチナマイスター
>HAVINGはGROUP BY句に対する分詞

ある意味名残なような実際の意味ではいまも続いている(集約処理に対する分詞、という意味で)部分で、

SQL86以前のオレオレ群雄割拠時代は、HAVING句はGROUP BY句と併用しなければならなかったから、たまにQiitaとかで勘違いされていることがありますが、現在の標準SQLではHAVING句を単独で使えるから、じゃあGROUP BYはどこいった?ってなりかねないのですが、こういう場合、テーブル全体が1行に集約され(元テーブルの列は参照不能になる)ますから、そこにかかったのか、と気づかされました。


SELECT '1' AS gap
  FROM SeqTbl
HAVING COUNT(*) <> MAX(seq);
2021.09.02 07:28

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop