[SQL] テーブルからデータを抽出する(SELECT)

2020年4月18日

テーブルからデータを抽出するのがSELECT文

SELECT * FROM テーブルが全ての基本。これを覚えておけば後は順次必要な条件を追加していくと欲しいデータが取れるようになる。

BigQueryにすでにある自社のデータを使う場合は‘データセット.テーブル’。「‘」はバッククォート 。データセットが無いとエラーになる。

サンプルの場合はテーブル名だけでよい。これはWITH句でテーブルを作っているためで、詳しくは後で学ぶがそれまでは気にせずともよい。

データ

次のファイルをDLしてコンソールにコピーする。

全てのデータを抽出する(SELECT)

テーブルから全てのデータを抽出する。

SELECT * FROM di_sql_sample01

*は「アスタリスク」と読み、「全てのカラム」の意味。つまり「テーブルdi_sql_sample01の全てのデータを取得する」ということ。

これで抽出はできるのだが、基本的に実行してはいけない

理由は全てのデータを抽出することになり、たくさんの人に迷惑をかけたり偉い人に怒られるから。 サンプルは小さいが実際には数千万、数億あるいはそれ以上の巨大なデータであることもあるので非常に大きなデータをダウンロードしようとしてしまう。

実際には何らかの条件を絞って抽出することになるので、ここからはその方法を解説していく。

行数に制限を付けて抽出する(LIMIT)

SELECT * FROM di_sql_sample01 LIMIT 100

「LIMIT 数値」を最後につけると指定した件数だけを抽出する。慣れないうちはいつでもつけるようにしよう。

カラムを指定して抽出する

SELECT name,age FROM di_sql_sample01 LIMIT 100

*ではなく代わりにカラム名を指定するとそのカラムだけが取り出せる。

複数のカラムを取り出す場合はカンマで区切ってつなげる。上のSQLを実行すると結果の最初の3行はこのようになる

name age
佐藤 24
斎藤 18
鈴木 35

カラムは書いた順に抽出される

*の場合は元の順番だが、それ以外は書いた順に結果が返ってくる。

SELECT join_date,name,age FROM di_sql_sample01 LIMIT 100

join_date name age
2019-11-01 佐藤 24
2019-12-01 斎藤 18
2019-11-21 鈴木 35

カラムの名前を変更する(as)

カラム名の後にas~を付けると名前を変えられる。ageをnenreiと変えて見る。

SELECT age as nenrei FROM di_sql_sample01 LIMIT 100

nenrei
24
18
35

ユニークな値だけを取り出す・重複をなくす(DISTINCT)

カラムの前にDISTINCT(“ディスティンクト”と読む)を付けると重複をなくして(一意に、ユニークになど表現はいろいろあるが同じことを言っている)抽出できる。

SELECT DISTINCT カラム FROM テーブル

組としてユニークにしたければカンマでつなぐ。

SELECT DISTINCT カラム1,カラム2 FROM テーブル

特定のカラムを除外する(EXCEPT)

たくさんあるカラムを全部書きたくないが大体全部欲しい場合にはいらないカラムだけ指定すればよい。

SELECT * EXCEPT(選択しないカラム1, 選択しないカラム2,・・・) FROM テーブル

また、結合時に同じ名前のカラムをキーにした場合や、結合キーは違うが両方のテーブルに同じ名前のカラムが存在するときは両方のテーブルで*を選択するとduplicateでエラーになるので特定のカラムを除外するのに便利。

SQL

Posted by 管理人