100日でPostgreSQLをマスター(15日目)~SQL~

PostgreSQL
※アフィリエイト広告を利用しています

 

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独自の個所を中心に勉強しました。

年末年始も続けますので、皆さんもお付き合いいただければ大変ありがたいです。

 

<14日目 | 目次 | 16日目>

<<1日目から読む

Photo by Iswanto Arif on Unsplash

コメント

タイトルとURLをコピーしました