質問: A~Zまでのアルファベットを格納しているカラムcolに対して、下記のように記述しているSQLがあるのですが、どういう意味でしょうか? ``` WHERE T1.col < T2.col ``` --- < > を数値ではなく文字列に適用する意味を教えてください。 もしかして、!= ってこと? ``` WHERE T1.col != T2.col ``` --- **対象SQL** ``` SELECT T1.col t1, T2.col t2 FROM Tbl T1, Tbl T2 WHERE T1.col < T2.col ``` **知りたいこと** ・「WHERE T1.col < T2.col」の意味 ・「WHERE T1.col > T2.col」との違い ・「WHERE T1.col != T2.col」との違い
回答: 文字列には辞書順と呼ばれる比較方法が適用されます。大雑把に言うと文字列`A`と`B`を比較する場合 * 先頭の文字`A[0]`と`B[0]`の大小を比較する * `A[0]` < `B[0]`であれば`A` < `B`、`A[0]` > `B[0]`であれば`A` > `B`とする * `A[0]` = `B[0]`の場合、次の桁`A[1]`、`B[1]`について同様の比較を行う * 片方の文字列の末尾まで比較して差が無かった場合、`A`と`B`の長さの比較結果を使用する というようなルールで順序が決定され、もちろん結果は`!=`とは異なります。 なお上の比較で文字同士の比較を行っていますが、その結果はデータベースの場合カラムの**照合順序**で指定されているルールによって決まります。