Yukiです。
そろそろ仕事納めの方もいらっしゃるのではないでしょうか。
当ブログは年末年始も続けるつもりです。年を明けたら、一気に7日進んでましたというのもどうかと思うので。
着々と資格取得に向けて勉強を進めていきます。
今日はSQLです。
SQLはOracleと同じところと違うところがありますね。別のDBMSなどで既にSQLについて知っていれば、ここでは時間をかけなくてよい気がします。PostgreSQLだからといってそれほど変わるものでもありませんし、試験でもPostgreSQL独自のマニアックな知識はそれほど聞いて来ないでしょう。(多分)
今後、Ping-tで練習問題を解くときに慣れていけばよいかなと思います。一応、普段あまり使わない部分を勉強しておこうかと思います。
SQL
LIMITとOFFSET
SELECTするときに何件スキップしたところ(OFFSET)から、上限何件まで(LIMIT)取得するかを指定できます。OFFSETは一見ゼロスタートに見えますね。
例えば、1ページに20件表示できる一覧があったとして、
2ページ目のデータ(21件目~40件目)を取得するには、
LIMIT 20 OFFSET 20
3ページ目(41件目~60件目)なら、
LIMIT 20 OFFSET 40
となりますね。
DISTINCT
DISTINCTはOracleにもあると思われるかもしれません。
ではDISTINCT~ON(~) はいかがでしょうか?
重複除去する列名を指定できるそうです。
例えば、
SELECT DISTINCT ON (id) id, name, age FROM person WHERE xxxxx = 'xxxxx';
のように、指定した列(この場合はid)だけで重複除去できます。
ONに複数の列を指定することも可能です。
SELECT DISTINCT ON (id, name) id, name, age FROM person WHERE xxxxx = 'xxxxx';
こういうこともできるんですね。標準SQLでしょうか。知りませんでした。
逆にid以外の列、例えばnameで重複除去するとどうなるんでしょうね?
同名の場合、片方の人の行のデータしか抽出されないんでしょうか?
SELECT DISTINCT ON (name) id, name, age FROM person WHERE xxxxx = 'xxxxx';
まとめ
今回は、SQLについてPostgreSQL独自の個所を中心に勉強しました。
年末年始も続けますので、皆さんもお付き合いいただければ大変ありがたいです。
Photo by Iswanto Arif on Unsplash
コメント