11019


A～Zまでのアルファベットを格納しているカラムcolに対して、下記のように記述しているSQLがあるのですが、どういう意味でしょうか？

[code]

    WHERE T1.col < T2.col
    
[/code]

* * *

< > を数値ではなく文字列に適用する意味を教えてください。  
もしかして、!= ってこと？

[code]

    WHERE T1.col != T2.col
    
[/code]

* * *

**対象SQL**

[code]

    SELECT
     T1.col t1, 
     T2.col t2 
    FROM
     Tbl T1, 
     Tbl T2 
    WHERE
     T1.col < T2.col 
    
[/code]

**知りたいこと**

・「WHERE T1.col < T2.col」の意味  
・「WHERE T1.col > T2.col」との違い  
・「WHERE T1.col != T2.col」との違い


CC BY-SA 3.0
2015-06-06T00:26:20.150
11018
2015-06-06T00:54:45.720
7886
question
mysql
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`の長さの比較結果を使用する

というようなルールで順序が決定され、もちろん結果は`!=`とは異なります。

なお上の比較で文字同士の比較を行っていますが、その結果はデータベースの場合カラムの **照合順序** で指定されているルールによって決まります。


CC BY-SA 3.0
2015-06-06T00:54:45.720
11019
2015-06-06T00:54:45.720
5750
11018
answer