プログラマのためのSQL 読書会(19)に参加
「24 単純なSELECT文」から「25.3.3 自然外部結合と条件付き外部結合」まで読みました。
内容的にはSELECT文、結合などが中心です。
プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに
- 作者: Joe Celko
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/19
- メディア: Kindle版
- この商品を含むブログ (11件) を見る
結合って、初心者が挫折しやすいところではないでしょうか。 この本のようにcross joinから説明を始めると、わかりやすいのかもしれません。
MySQLのExplain
MySQLではExplain extendを使うことでより詳細な実行計画を表示できる。
https://dev.mysql.com/doc/refman/5.6/ja/explain-extended.html
結合前の絞り込み件数などが見えるようです。
サブクエリのネスト
「25.1相関サブクエリ」
相関サブクエリを入れ子にできる深さに理論上の制限はない。
とありますが、勿論格RDBMS製品にサブクエリのネスト制限があります。
例
字句解析・構文解析
などの話題が出た。 SQLのBNFを食わせることでパーサーを作れるらしい。
Cコンパイラを作ろう的な本で軽くみたことがあるので、この辺はしっかり掘り下げていきたい。
コードファースト、テーブルファースト
チームの考え方によってはテーブルをそこまで重視しない場合もあるらしい(アジャイル等) コード(クラス)から生成させるもの、という視点の現場ではテーブルの変更が運用中に入ることも多いらしい。
まぁ普通はテーブル作ってから開発入ると思いますが。*1
upc
「25.2 標準的な構文の内部結合」に突如出ていた謎のコードことupc。
もし読者の使っているスキーマの中にproduct_idやproduct_nbr、あるいはupcといった列名が複数のテーブルで使われているようであれば、それぞれの要素が一意な名前を持つようスキーマ全体を変更するべきだろう。
upcってなんだ?という話題になりました。
https://www.keyence.co.jp/ss/products/autoid/codereader/basic_jan.jsp
よく探せば「4.2.3 業界標準の一位識別子」に書いてありますね。
GIIN(国際取引商品番号)は小売業の商品についている商品識別コードの総称で「ジーティン」と読む。北米では、UPCというGTINの一種がよく利用されている。
外部結合はSQL99から
外部結合の構文はSQL99で追加になった。それ以前はUNIONを使った面倒のクエリが必要。 やってることは内部結合 + 左側の行で結合できず消えた列をunionで足している。
SELECT a.valu1,a.valu2,b.valu1 FROM a LEFT JOIN b on (a.id = b.a_id)
SELECT a.valu1,a.valu2,b.valu1 FROM a,b WHERE a.id = b.a_id UNION ALL SELECT a.valu1,a.valu2,CAST(NULL AS INTEGER) FROM a WHERE NOT EXISTS(SELEDT * FROM b where b.a_id = a.id);
迂回するUNION句は現実には存在しない?
OUTER JOIN導入以前は律儀に上記の迂回クエリを使っていたのかと思いきや・・・ そういうことはなく、各ベンダー早めに外部結合を入れる構文を導入していたのでそちらを利用して凌いでいた、というのが実情らしい。*2
実際に上記の外部結合と同等の結果を返すクエリの例。 https://www.shift-the-oracle.com/sql/left-right-outer-join.html https://msdn.microsoft.com/ja-jp/library/ee240720(v=sql.120).aspx
JOIN禁止?
- JOIN禁止という現場もあるらしい。
- IBM系で多いらしい。
JOIN禁止でググったらそれらしいブログが出てきた。
http://d.hatena.ne.jp/Sikushima/20110809/1312871002
RIGHT JOINは必要なのか?
RIGHT JOINだけで良いのでは無いか、標準SQLにはなぜRIGHT JOINが入っているのかという話題が出ました。 一説によると、FROM句の順番を変えられないフレームワーク等(ORM,BIツール)用にあるのでは?という話になりました。
プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに
- 作者: Joe Celko
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/19
- メディア: Kindle版
- この商品を含むブログ (11件) を見る