こんにちは!セイトです。
今回はエンジニアならぜひとも習得しておきたい言語「SQL」について解説します。

この記事では、SQLが全く初めての方でも「なるほど!」と思っていただけるよう、一番基本的な部分をゆっくり丁寧に解説します。

1.SQLって、そもそも何?

SQL(エスキューエル)は、「データベース言語」と呼ばれるものの1つで、「データベース」から、必要な情報を取り出したり、新しく情報を追加したりするときに使う専用の言語です。

例えば、皆さんがAmazonなどECサイトでネットショッピングをするとき、たくさんの「商品データ」がデータベースに保存されています。
「スニーカー」と検索すればスニーカーの一覧が、「価格が安い順」で並び替えればその通りに表示されますよね。

あの裏側では、私たちが操作するたびに「スニーカーのデータを見せて!」「安い順に並び替えて!」というSQLの命令がデータベースに送られているのです。

SQLの仕組み

2.基本の「SELECT」文

SQLで最もよく使うのが、データを「見せてください(検索してください)」とお願いする SELECT(セレクト)文です。/
ここでは、ECサイトの「商品(products)」テーブルを例に見てみましょう。
このようなデータが入っていると想像してください。

▼ products(商品)テーブル

product_id (商品ID)

product_name (商品名)

category (カテゴリ)

price (価格)

release_date (発売日)

1001

魔法のノート

文房具

500

2023-04-01

1002

走るボールペン

文房具

300

2023-09-15

1003

よく飛ぶスニーカー

ファッション

8000

2023-05-20

1004

虹色Tシャツ

ファッション

3500

2024-01-10

1005

はじめてのSQL

書籍

2800

2023-11-01

2-1. 全データを表示させたいとき (SELECT *)

SELECT * FROM products;

この命令は「products というテーブルから(FROM products)、すべての列からデータを表示(SELECT *)」という意味になります。
これを実行すると、上の表がそのまま全部表示されます。

※ちなみにSQLに限らず、他の言語においてもプログラミングにおいてしばしば「*(アスタリスク)」は「全データ」の意味で扱われます。

2-2. 特定の列だけ見たいとき (SELECT カラム名)

SELECT product_name FROM products;

この命令は「products というテーブルから(FROM products)、商品名のみを表示(SELECT product_name, price )」という意味になります。
次の例のように、複数の列を指定することも可能です。

SELECT product_name, price FROM products;

この命令は「products というテーブルから(FROM products)、商品名と価格のみを表示(SELECT product_name, price )」という意味になります。
複数の列を指定する場合は列名の間に「, (コンマ)」をつける必要があるので注意です。

これを実行すると、以下のようになります。

product_name (商品名)

price (価格)

魔法のノート

500

走るボールペン

300

よく飛ぶスニーカー

8000

虹色Tシャツ

3500

はじめてのSQL

2800

category (カテゴリ)やrelease_date (発売日)といったデータは不要、必要な列データだけ抽出したい、という場合に使います。

3.欲しいデータだけを選ぶ「WHERE」句

SELECT でデータを取り出せるようになりましたが、実世界のデータは何万件、何億件とあります。全部見せられても困ってしまいますよね。

そこで使うのが WHERE(ウェア)句です。
WHERE を使うと、「条件に合うものだけを表示させる」ことができ、データを絞り込むことができます。

3-1. 価格で絞り込む(数値の条件)

例えば、「価格が1,000円より安い商品だけ見たい」場合は次のように書きます。

SELECT * FROM products WHERE price < 1000;

この命令は「price(価格)が 1000 より小さい条件で、products というテーブルから(FROM products)、すべての列からデータを表示(SELECT *)」という意味になります。

先程のテーブル例でいえば、これを実行すると、条件に合う2つの商品だけが表示されます。

product_id

product_name

category

price

release_date

1001

魔法のノート

文房具

500

2023-04-01

1002

走るボールペン

文房具

300

2023-09-15

※ >(より大きい)、=(等しい)、>=(以上)、<=(以下)なども使えます。

3-2. カテゴリで絞り込む(文字の条件)

文字列を使った条件も指定することができます。
例えば、「カテゴリが『文房具』の商品だけ見たい」場合は次のように書きます。

SELECT * FROM products WHERE category = '文房具';

この命令は「category が '文房具' と等しい条件で、products というテーブルから(FROM products)、すべての列からデータを表示(SELECT *)」という意味になります。

3-3. 発売日で絞り込む(日付の条件)

「日付」を使った絞り込みも見てみましょう。
例えば、「2024年以降に発売された商品だけ見たい」場合は次のように書きます。

SELECT * FROM products WHERE release_date >= '2024-01-01';

この命令は「release_date(発売日)が '2024-01-01' 以降という条件で、products というテーブルから(FROM products)、すべての列からデータを表示(SELECT *)」という意味になります。
これを実行すると、「虹色Tシャツ」だけが表示されます。

4.データを並び替える「ORDER BY」句

データを取り出せましたが、順番がバラバラだと見にくいですね。
そこで使うのが ORDER BY(オーダーバイ)句です。これは、データを特定のルールで「並び替えて」とお願いする命令です。

4-1. 価格が安い/高い順に並び替える (ASC/DESC)

例えば、「商品を、価格が安い順に並び替えて表示させる」場合は次のように書きます。

SELECT * FROM products ORDER BY price ASC;

ORDER BY price は、「price(価格)を基準に並び替える」という意味です。
ASC はAscending(アセンディング)の略で、「昇順(小さい順・古い順)」を意味します。ASC は省略してもOKです。

一方で、「降順(大きい順・新しい順)」の場合は DESC を使います。こちらの場合はASCとは違い省略NGなので、必ず指定するようにしましょう。
以下は DESC の例です。

SELECT * FROM products ORDER BY price DESC;

4-2. 発売日が新しい順に並び替える(日付のソート)

先程は価格でソートする例を紹介しましたが、日付での並び替えももちろんできます。
例えば「発売日が新しい順に並び替えたい」場合は次のように書きます。

SELECT * FROM products ORDER BY release_date DESC;

5.組み合わせてみよう (WHERE と ORDER BY)

WHERE と ORDER BY は、一緒に使うことができます。これがSQLの便利なところです。
例えば、「『文房具』カテゴリの商品を、価格が高い順に並び替えて表示」する場合は次のように書きます。

SELECT product_name, price FROM products WHERE category = '文房具' ORDER BY price DESC

これを実行すると、products テーブルから、

  1. まず WHERE で「文房具」だけが絞り込まれ、
  2. 次に ORDER BY で「価格が高い順」に並び替えられます。

結果はこうなります。

product_name (商品名)

price (価格)

魔法のノート

500

走るボールペン

300

6.つまづきやすいポイント (Q&A)

SQLを書き始めると、いくつか「あれ?」と思う小さな疑問が出てきます。
そこでよくある質問をまとめました。

6-1. シングルクォート('')を使うべき? ダブルクォート ("") は?

A. 「文字」や「日付」は、原則としてシングルクォート (') で囲みましょう。

この記事の例でも WHERE category = '文房具' のように使いましたね。 ダブルクォート (") は、データベースの種類によっては(例: PostgreSQL, MySQLなど)テーブル名や列名を囲む特別な記号として使われることがあり、文字列として認識されない場合があります。 迷ったら「データ(文字や日付)は '(シングルクォート)」と覚えておくと安全です。

6-2. SELECTselect、大文字と小文字の区別はある?

A. SELECT, FROM, WHERE といったSQLの「命令文(予約語)」は、大文字・小文字を区別しないデータベースがほとんどです。

つまり、select * from products; と書いても、SELECT * FROM products; と書いても、同じように動くことが多いです。
ただし、テーブル名 (products) や列名 (product_name) は、データベースの設定によって大文字・小文字を区別する場合があります。

読みやすさの観点から、

  • 命令文(SELECT, WHERE など)は 大文字
  • テーブル名、列名(products, price など)は 小文字 のように、自分でルールを決めて書くことを強くおすすめします。

6-3. SQLを気軽に試してみたいけど、環境を作るのが大変…

A. スプレッドシートで、SQLに似た体験ができます。

本格的なデータベースを自分のPCに準備するのは少し大変です。
もし Googleスプレッドシート をお使いなら、QUERY(クエリ)関数を使ってみてください。 これは、スプレッドシートのデータに対して、SQLによく似た命令文でデータ抽出や並び替えができる関数です。

(例: =QUERY(A1:E6, "SELECT A, B, D WHERE C = '文房具' ORDER BY D DESC")

※ExcelでQUERY関数を使うことはできないので注意。

おわりに

今回は、SQLの本当に基本的な「き」の字である、

  • SELECT : データを見る
  • WHERE : データを選ぶ(絞り込む)
  • ORDER BY : データを並び替える

の3つを中心にご紹介しました。

「データベースに命令する」と聞くと難しそうですが、やっていることは「(どのテーブル)から、(どの条件)、(どの項目)、(どう並び替えて)見せて」という、意外とシンプルな「お願い」なのです。

SQLが使えるようになると、膨大なデータの中から自分が見たい情報を、まるでExcelのフィルターや並び替え機能を使うように、自由自在に取り出せるようになります。

まずはこの3つの命令文を、ぜひ覚えてみてください!
最後までお読みいただき、ありがとうございました。

もし、

「プログラミングを体系的に学びたい」
「エンジニア転職を頑張りたい」
「独学に限界を感じてきた...」
「コミュニティで仲間と共に学びたい」

などと感じられたら、ぜひ検討してみてください。

個別面談・説明会はこちら!


まずは様子見...という方は、公式LINEにぜひご登録下さい。
学習や転職ノウハウに関する豪華特典11個を無料配布しています!
LINE紹介ページで特典を確認する


■YouTube(SiiD受講生さま実績)

■YouTube(セイト先生メイン)

■X(旧Twitter)