SELECT文でデータベースから列 (一列・全列・複数列) を取得してみよう!超初心者のSQLの練習

2020-04-12

動作環境

SQL FIDDLEでMySQL5.6、PostgreSQL9.6、SQLiteで動作確認しました。
下記文章は主にPostgreSQLで仕様で調べています。

SELECT文とは

    SELECTはテーブル(データベース)からデータを取り出すための文です。
    SQLで一番使うのはSELECT文かもしれないですね。

基本構文

SELECT カラム名 FROM テーブル名;

※「;」セミコロンはSQL文の文末につけます。

SELECT文を使ってみよう

準備

使用するテーブル

itemiditemnamequantityarrivedate
1ゼリー302020-04-20
2プリン252020-04-20
3ヨーグルト282020-04-20

CREATE文

実際に動きを見たい場合の上記テーブルのCREATE文です。

CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
ItemName character varying (20) not null,
Quantity numeric(8, 0),
ArriveDate DATE,
primary key(ItemID)
);

CREATE文について詳しくはこの記事でまとめています。

Insert文

実際に動きを見る場合CREATE文で作成したテーブルにデータを挿入します。

insert into item
values(0001, 'ゼリー', 30, '2020-04-20'),
(0002, 'プリン', 25, '2020-04-20'),
(0003, 'ヨーグルト', 28, '2020-04-20');

INSERT文については以下にまとめています。

それでは、SELECT文の練習をしましょう!

例 列を取り出す

itemテーブルからItemIDの列情報だけ抜き取ってみましょう。

SELECT ItemID FROM item;

■ 結果

ItemID
1
2
3

   ItemIdの列を取得できたことが確認できたと思います。

例 複数の列を取り出す

itemテーブルからItemID, Quantity, ArriveDateの列情報だけ抜き取ってみましょう。

SELECT ItemID,Quantity, ArriveDate FROM item;

■ 結果

ItemIDQuantityArriveDate
1302020-04-20
2252020-04-20
3282020-04-20

       ItemID, Quantity, ArriveDateの列を取得できたことが確認できたと思います。

例 全ての列を取り出す

前列の取得方法は少し変わりますが以下のようになります。

SELECT * FROM item

■ 結果

ItemIDItemNameQuantityArriveDate
1ゼリー302020-04-20
2プリン252020-04-20
3ヨーグルト282020-04-20

全ての列が取得できました。
テストの時や検証の時はこの「*」を使用しますが、プログラミング時にSQLを書く際は一つ一つカラムを書く(例 複数の列を取り出す)方法が常です。(予期しないエラーやデバッグや修正時に見づらい等理由があるようです)

復習問題

ここまで読んでくださった方には簡単かとは思いますが、せっかくなので問題です。

問題 1 結果が以下のテーブルになるようSELECT文を書いてみてください。

ItemName
ゼリー
プリン
ヨーグルト

※答えは下にスクロールするとあります。

問題 2 結果が以下のテーブルになるようSELECT文を書いてみてください。

ItemIDItemNameArriveDateQuantity
1ゼリー2020-04-2030
2プリン2020-04-2025
3ヨーグルト2020-04-2028

解答 1

SELECT ItemName From item;

列を取り出す書き方で作成できます。簡単すぎかもしれません。

解答2

SELECT ItemID, ItemName, ArriveDate, Quantity From item;

少しひっかけです。
「*」で全列取得すると順番がCREATE文で作った順番通りになります。
「*」を使うとデータベースからテーブルを表示する際の順番を変えなければいけないときなどいちいち書くの面倒ですよね(最初に書く人も面倒だけど)。そういったこともふまえてプログラミング時に「*」を使ってはいけないようです。

以上データベースから列を取り出す方法でした。