SQLは難しい?難易度や具体的な学習方法を徹底解説!


SQLって難しいのかな・・・
SQLを基礎から学ぶときは、何から始めればいいんだろう?

SQLの難易度がわからず、SQLの学習に踏み切れていない人もいるのではないでしょうか。また、具体的に何から始めればいいかわからず、手が止まっている人もいるかもしれませんね。

こんにちは!フリーランスエンジニア兼テックライターのワキザカです。

この記事では、SQLの難易度やこれから学習するときのおすすめ手順について解説します!

また、SQLの基礎だけでなく応用力を付ける方法もまとめているので、ぜひ最後まで見てみてくださいね。

この記事はこんな人のために書きました。

  • SQLの難易度を詳しく知りたい人
  • SQLを学習するときのおすすめ手順を知りたい人

目次

SQLは難しい?具体的な難易度は?

まず、SQLの難易度について解説します。

結論から言うと、基礎的な書き方だけであれば難しくありません。

SQLはデータベース操作ができる言語で、データの登録・更新・削除・検索などができます。これらの基礎的なSQLの書き方を覚えて使うのであれば、学ぶことは難しくないです。

ただ、SQLはPHPやRubyなどの開発言語と同じく、IF文、For文、変数などを使って処理を組むことができます。そのため、データ検索した結果をもとに更新有無を判断したり、更新したテーブルと別のテーブルのデータを同時に更新したりする処理を作る時は、難易度が上がってしまいます。

とはいえ、いきなり難易度の高いSQLを覚える必要はありません。SQLの基礎的な書き方を覚えたあとに、変数、IF文、For文などを覚えていけば良いのです。

SQLをこれから学ぶためには何からやればいいの?

おすすめの学習方法は、以下の手順です。

おすすめの学習方法

  • SQLが実行できる環境を作る
  • 簡単なSQL文の実行方法を覚える
  • 条件式を使いこなす方法を覚える
  • 結合したデータの取得方法を覚える
  • サブクエリの作り方を覚える

それぞれ詳しく解説しますね。

SQLが実行できる環境を作る

まずは、SQLを実行できる環境を用意しましょう。

SQLの実行環境を用意する方法は、大きく分けて以下の2つです。

  • SQLが実行できるWEBサービスでアカウントを作る
  • 自分のパソコンにSQL実行環境を構築する

一番手軽なのは、アカウントを作るだけでSQL実行環境が作れる「paiza.io」です。作ってすぐにSQL実行環境が手に入るので、始めてSQLを使う人におすすめです。

引用:paiza.io https://paiza.io/ja/

ただ、アプリ開発するときは、パソコンにセットアップした環境でSQLを実行することの方が多いです。そのため、データベースの環境構築方法を覚えておくのがおすすめです。以下でMySQLのインストール方法について解説しているので、データベースの環境構築をしたい方におすすめです。

簡単なSQL文の実行方法を覚える

環境ができたら、簡単なSQL文を実行しましょう。

SQLにはいろいろ書き方がありますが、データを作って確認する方法をまずは覚えればOKです。

具体的には、以下の流れで簡単なSQLを書いていきます。

簡単なSQLを作る流れ

  • CREATE文でテーブル作成後にDESC文で定義確認
  • INSERT文でデータ作成後にSELECT文で結果確認

CREATE文でテーブル作成後にDESC文で定義確認

まず、CREATE文でテーブルを作ります。

今回はサンプルのため、以下の簡単なテーブルを作る方法を解説します。


ユーザー一覧テーブル

上記テーブルを作るSQLは、次のようになります。

ユーザ一覧テーブルを作るSQL:

-- ユーザ一覧テーブルを作成するCREATE文
create table users (
    id int(11)            -- ID
  , name varchar(50)      -- 名前
  , age int(11)           -- 年齢
);

-- テーブルの構造を表示するクエリ
DESC users;

実行結果:

| Field | Type | Null | Key | Default | Extra | 
| --- | --- | --- | --- | --- | --- | 
| id | int(11) | YES |  | \N |  | 
| name | varchar(50) | YES |  | \N |  | 
| age | int(11) | YES |  | \N |  |

「create table テーブル名」を指定し、カッコ()の中でデータの列を定義しています。列は「列名 型名」で定義しており、intは数値型、varcharは文字列を意味しています。

テーブルを定義する詳しい方法については以下で解説しているので、詳しく知りたい方は以下を見てみてくださいね!

INSERT文でデータ作成後にSELECT文で結果確認

次に、INSERT文でデータを作成していきます。今回は、以下の5行分データを作成します。


INSERT文で作成するデータ

登録したデータはSELECT文で確認できるので、SELECT文も合わせて解説しますね。

上記データを作成するSQLは、以下のとおりです。

データを挿入するSQL:

-- データ挿入するINSERT文
INSERT INTO users(id,name,age) VALUES(1,'侍1',22);
INSERT INTO users(id,name,age) VALUES(2,'侍2',23);
INSERT INTO users(id,name,age) VALUES(3,'侍3',25);
INSERT INTO users(id,name,age) VALUES(4,'侍4',27);
INSERT INTO users(id,name,age) VALUES(5,'侍5',21);

-- データの結果を確認するSELECT文
SELECT
  *
FROM
  users;

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍1 | 22 | 
| 2 | 侍2 | 23 | 
| 3 | 侍3 | 25 | 
| 4 | 侍4 | 27 | 
| 5 | 侍5 | 21 |

INSERT文で挿入したデータを、SELECT文で検索して表示しています。

INSERT文は「INSERT INTO users(列名1,列名2,…) VALUES(列1の値,列2の値,…)」のように書きます。SELECT文にあるアスタリスク(*)は全てのデータを指定しており、FROMでテーブル名を指定しています。

INSERT文やSELECT文の詳しい書き方を知りたい方は、以下がおすすめです!


【SQL】3分でSELECT文を完全マスター!データ取得の基礎から応用まで!
更新日:2024年3月1日

条件式を使いこなす方法を覚える

CREATE文、iNSERT文、SELECT文の基礎がわかったら、条件式を覚えていきましょう。

先ほどSELECT文は、以下のようにサンプルを解説しましたね。

SELECT文のサンプル:

SELECT
  *
FROM
  users;

上記以外に、「WHERE」を付けて条件を追加することができます。たとえば、「年齢が25歳以下のデータのみ表示」のように条件を絞って表示することができるのです。

上記をSQLで解説すると、以下のようになります。

WHEREで条件を追加した例:

SELECT
  *
FROM
  users;
WHERE
  age <= 25;

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍1 | 22 | 
| 2 | 侍2 | 23 | 
| 3 | 侍3 | 25 | 
| 5 | 侍5 | 21 |

先ほどまでは5行分データが出ていましたが、age(年齢)が27のデータは表示されなくなりましたよね。このように、条件を絞って表示することができるのです。

WHEREで条件を絞る方法については、以下で詳しく解説しています。ぜひ参考にしてみてくださいね!

結合したデータの取得方法を覚える

1つのテーブルだけであればWHEREだけでもなんとかなりますが、複数のテーブルからデータを取得することの方が多いです。

そのため、データを結合して複数テーブルから取得する方法を覚えておくのがおすすめです!

たとえば、以下のようなデータがあったとします。


テーブルの例

このデータを、以下のように1つのデータとして見たい場合は、テーブルを結合する必要があるのです。


テーブルを結合したときの例

テーブルを結合するときは、JOINを使います。JOINを使って上記データを取得するSQLは、次のようになります。

JOINでテーブルを結合してデータを取得するSQL:

SELECT 
  users.id,
  dept_users.dept_cd,
  users.name,
  users.age
FROM
  users
INNER JOIN dept_users        -- 結合するテーブルを指定
ON users.id = dept_users.id; -- 結合する条件を指定

実行結果:

| id | dept_cd | name | age | 
| ---: | --- | --- | ---: | 
| 1 | A0001 | 侍1 | 22 | 
| 2 | A0001 | 侍2 | 23 | 
| 3 | A0002 | 侍3 | 25 | 
| 4 | A0002 | 侍4 | 27 | 
| 5 | A0002 | 侍5 | 21 |

SELECT文だけとの違いは、以下のとおりです。

  • INNER JOINで結合するテーブルを指定
  • ONのあとに結合する条件を指定
  • SELECTの直後に列名を直接指定

「INNER JOIN テーブル名」と「ON 結合する条件」はセットで覚えておくのがおすすめです!

また、ID、部署コード、名前、年齢のように今回は表示する順番の指定があったので、SELECTの直後に直接指定しています。上記のように書くことで、複数テーブルを結合したデータを表示することができます。

テーブルを結合するJOINの詳しい使い方は、以下で詳しく解説しています。より深く知りたい方は、以下を見てみてくださいね!

サブクエリの作り方を覚える

最後に、サブクエリの作り方について解説します。

サブクエリは、SELECT文で取得した結果を利用して、もう一度別のSQLを(SELECT文やUPDATE文など)を実行する方法です。

少しわかりにくいので、先ほど使った以下テーブルを例に解説しますね。


サンプルに使うテーブル

「部署コードが「A0001」のユーザを条件に、ユーザ一覧テーブルのデータを表示するSQL」を作る場合は、以下のように2つのSELECT文が必要になります。

  • SQL1:部署所属ユーザ一覧から、部署コードが「A0001」の条件データを検索
  • SQL2:ユーザ一覧テーブルから、1で検索したデータのIDとヒットするデータを検索

そのため、SQL1の結果を使ってSQL2を作っていく必要があるわけです。サブクエリを使うと、以下のように書くことで実現できます。

サブクエリを使ったSQL:

SELECT
  *
FROM
  users
WHERE id IN ( -- ②取得したidと一致するusersテーブルのデータを指定
    -- ①部署コードがA0001のidを取得
    SELECT 
      id
    FROM
      dept_users
    WHERE
      dept_cd = 'A0001'
);

実行結果:

| id | name | age | 
| ---: | --- | ---: | 
| 1 | 侍1 | 22 | 
| 2 | 侍2 | 23 |

部署コードがA0001のデータのみ表示されていますよね。

①のSQLで、部署所属ユーザ一覧テーブルから部署コードが「A0001」のidを取得しています。

idが複数あるため、②のSQLではWHEREにIN句を指定しています。イコール(=)の場合は条件が1つですが、IN句の場合は複数の値を条件にすることができます。そのため、部署所属ユーザ一覧から取得した、複数のidを条件に指定できているわけです。

IN句を使ったサブクエリの使い方については、以下で詳しく解説しています。理解が浅いと感じたら、以下も見てみるのがおすすめです!

SQLをもっと学ぶために必要な知識とは?

ここまで、SQLの難易度・おすすめの学習方法について解説しました。

ただ、ここまでできただけではSQLを使いこなせるようにはなりません。SQLの基礎を深掘りしたり、条件式の作り方をもっと覚えたり、SELECTだけでなくデータを更新するSQLの書き方を覚える必要があります。

以下でSQLを深掘りするためのおすすめ情報をまとめたので、サブクエリまで書き方を覚えたら見てみるのがおすすめです!

データベース・SQLの基礎を学ぶ

SELECTの取得条件をもっと覚える

データ更新・挿入・削除をマスターする

まとめ

今回は、SQLの難易度・おすすめの学習方法について解説しました。

SQLは、深く学ぼうとすると覚えることがとても多いです。ただ、その分できることはとてつもなく増えてきます。

今回解説した簡単なSQLからでいいので、ぜひSQLを書いて動かしてみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次