質問: 下記のテーブルからuriaが最大のものを取得する際、 ``` MariaDB [db1]> select * from tb; +------+------+------+ | bang | uria | tuki | +------+------+------+ | A103 | 101 | 4 | | A102 | 54 | 5 | | A104 | 181 | 4 | | A101 | 184 | 4 | | A103 | 17 | 5 | | A101 | 300 | 5 | | A102 | 205 | 6 | | A104 | 93 | 5 | | A103 | 12 | 6 | | A107 | 87 | 6 | +------+------+------+ ``` `select * from tb where uria in (select max(uria) from tb);`というSQL文で取得できます。 ``` +------+------+------+ | bang | uria | tuki | +------+------+------+ | A101 | 300 | 5 | +------+------+------+ 1 row in set (0.04 sec) ``` ところで`select bang,max(uria),tuki from tb;`というSQL文を発行すると ``` +------+-----------+------+ | bang | max(uria) | tuki | +------+-----------+------+ | A103 | 300 | 4 | +------+-----------+------+ 1 row in set (0.00 sec) ``` というレコードが取得できます。 カラムbangとtukiの値は、tbテーブルの一番上の部分から、uriaは、関数の通りtbテーブル内で一番大きい数を取得しています。 ここで、素朴な疑問なのですが、なぜ、一番上の部分から取得しようとしたのでしょうか。仕様と言われるとそれまでですが、何か理由があるのでしょうか。
回答: > > 仕様と言われるとそれまでですが、何か理由があるのでしょうか。 > > > 重箱の隅をつつくようで申し訳ないですが、 「仕様」はそもそもが「理由」が含まれているものです。 なので「仕様」ということでそれまでにされては? 技術者として興味・探求心があるのは結構なことなのですが、 自身が作ったものでなければ深く追ったところで利用者がどうにかできるわけでもなく、 既に回答が出ているように、確実に保証されているものではないので、 そのような仕様であると理解した上で、 **気にしなくて済むようにorder byは何であっても入れるように習慣づける**または **必ずorder byを入れて取得するような設計をする**だけかと思います。