SQLにおける文字列の不等号
達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへを学んでいる最中、挙動が分からなくなった箇所があった。
自己結合の使い方、演習問題の箇所。 文字列はどういう基準で比較されるのか簡単にまとめておく。
準備データ
CREATE TABLE meibo ( ,name text ); INSERT INTO meibo VALUES('たなか'); INSERT INTO meibo VALUES('やまだ'); INSERT INTO meibo VALUES('さとう');
重複を含めた2列の組み合わせの求めかた
SELECT * FROM meibo m1 CROSS JOIN meibo m2 WHERE m1.name >= m2.name -- 出力結果 name | name_1 -------+--------- たなか たなか たなか さとう やまだ たなか やまだ やまだ やまだ さとう さとう さとう
CROSS JOINで自己結合しているが、 WHEREで条件指定しなかった場合、以下の出力となる
name | name_1 | |
---|---|---|
たなか | たなか | |
たなか | やまだ | |
たなか | さとう | |
やまだ | たなか | 不要(すでに「たなか」×「やまだ」で出ている) |
やまだ | さとう | |
やまだ | やまだ | |
さとう | たなか | 不要(すでに「たなか」×「さとう」で出ている) |
さとう | やまだ | 不要(すでに「やまだ」×「さとう」で出ている) |
さとう | さとう |
上記の不要の箇所を取り除くために不等号で除去している。 文字列の比較は、辞書式順序に従う。
name | where | name_1 | |
---|---|---|---|
たなか | >= | たなか | True |
たなか | >= | やまだ | False(や の方が大きい) |
たなか | >= | さとう | True |
やまだ | >= | たなか | True |
やまだ | >= | さとう | True |
やまだ | >= | やまだ | True |
さとう | >= | たなか | False(た の方が大きい) |
さとう | >= | やまだ | False(や の方が大きい) |
さとう | >= | さとう | True |