SQLは初心者には難しい?文系・未経験で研修を受けた実体験を解説

新人エンジニア

「SQLって名前は聞いたことあるけど、実際どんなものかよく分からない」

そんな方も多いのではないでしょうか。私自身、文系出身・プログラミング完全未経験でIT企業に入社し、新人研修でSQLを学びました。

結論から言うと、SQLは初心者にとって難しく感じる部分が確実にあります。

ただし、基本的な文法を理解し順番に手を動かして書いていけば、少しずつ慣れていけるものでもあります。

この記事では、SQLとは何かという基本から、研修で使った環境、実際に学んだ内容、「難しい」と感じたポイントまで、実体験をもとに解説します。

SQLとは?初心者向けにざっくり解説

SQLとは、データベースを操作するための言語です。データの登録・検索・更新・削除といった操作を、決まったルールの文で指示します。

Webサービスの裏側では、ユーザー情報や注文履歴などのデータがデータベースに保存されています。

そのデータを取り出したり書き換えたりするときに使われるのがSQLで、エンジニアだけでなく、データ分析やマーケティングなど幅広い職種で使われている言語です。

データベースは、Excelの表のように「行」と「列」で構成されたシンプルな形をしています。行(レコード)が1件分のデータ、列(カラム)がその項目にあたるとイメージすると分かりやすいです。

研修で実際に使ったSQLの環境

研修環境

研修では、MySQL を使いました。まず自分のPCにMySQLをインストールするところから始まります。

この環境構築だけで思った以上に時間がかかりました。

パスや設定でつまずき、「SQLを書く前の段階で詰まる」という洗礼を受けたのを覚えています。次にやるときは手際よくできるようにしたい、と当時メモしたほどです。

インストール後は、コマンドラインからMySQLに接続し、次のような基本操作から演習に入りました。

・show databases; でデータベース一覧を確認する

・create database / use でDBを作って切り替える

・show tables; / desc でテーブルの構造を確認する

・source でSQLファイルを読み込んで実行する

教科書を読むだけでなく、自分の画面に表示された実行結果を見ながら学べたのは、理解を深めるうえで大きかったです。

実務で使っている環境

研修後、実際のOJTで開発に携わるようになってからは、データベースはPostgreSQL 16を使っています。

DBはDockerとDocker Composeで起動し、SQLクライアントにはA5:SQL Mk-2を使ってlocalhost上のPostgreSQLに接続し、テーブルの中身を確認しています。

バックエンドはSpring Bootで、Controller → Service → Repositoryという構成の中で、JdbcTemplateを使ってPostgreSQLにアクセスする形です。

研修ではMySQLに直接SQLを打ち込んでいましたが、実務ではJavaのコードの中からSQLを実行する場面が中心です。それでも、研修で学んだSELECTやJOINの書き方がそのままJdbcTemplateの中でも活きていると感じます。

実際に受けたSQL研修の内容

研修は大きく2日に分かれ、1日目はデータベース・SQLの基礎、2日目は演習中心でした。ここでは、実際に触った内容を順番に紹介します。

SELECT・WHEREなど基本文法

演習では、社員表(EMPLOYEE)や部門表(DEPARTMENT)を使い、基本操作から学びました。

・SELECTで必要な列だけ取り出す ・WHEREで条件を絞り込む ・ORDER BYで並び替える ・AND / OR / IN / BETWEEN / LIKE で条件を組み合わせる ・LIMIT / OFFSET で表示件数を制限する

JOIN(複数テーブルを繋げる)

社員テーブルと部署テーブルなど、複数のテーブルを繋げて扱うのがJOINです。研修では、共通するデータだけを取り出すINNER JOINと、片方のテーブルを全て残すLEFT JOINの2種類を学びました。

-- 社員と部署が両方揃っているデータだけを取り出す
SELECT e.last_name, d.department_name
FROM employees AS e
INNER JOIN departments AS d
  ON e.department = d.department_name;

-- 社員は全員出し、対応する部署がなければNULLにする
SELECT e.last_name, d.department_name
FROM employees AS e
LEFT JOIN departments AS d
  ON e.department = d.department_name;

GROUP BYなどの集計処理

部署ごとの人数を数えたり、平均給与・最高給与・最低給与を出したりする集計処理も学びました。GROUP BYで部署ごとにまとめ、COUNT・AVG・MAX・MINといった関数で数値を計算します。

SELECT department,
       COUNT(*) AS employee_count,
       AVG(salary) AS avg_salary
FROM employees
GROUP BY department
ORDER BY avg_salary DESC;

このあたりから、副問い合わせ(サブクエリ)やHAVING、ユーザー権限といった発展的な内容も登場し、少しずつ扱う範囲が広がっていきました。

ER図・正規化・多対多のテーブル設計

後半では、架空のネットショップを想定したデータベース(顧客・カテゴリ・商品・注文・注文明細の5つのテーブル)を使い、ER図の読み方やテーブル設計を学びました。

顧客が注文をし、1つの注文の中に複数の商品が含まれ、逆に1つの商品も複数の注文に含まれる――こうした「多対多」の関係は、テーブルを2つ繋げるだけでは表現できません。

そこで「注文明細」という中間テーブルを間に挟み、どの注文にどの商品が何個含まれるかを1行ずつ記録するという設計の考え方を学びました。

あわせて、同じデータを複数のテーブルに重複して持たせないようにする「正規化」や、存在しないIDを参照させない「参照整合性」といった考え方も出てきて、このあたりからSQLというより「データベース設計」の話になっていく感覚がありました。

SQL初心者が「難しい」と感じたポイント

演習問題、64問中8問しか解けなかった話

正直に言うと、研修のSQL演習ではかなり苦戦しました。ある日の午後演習は全部で64問あったのですが、研修修了時刻の時点で終わっていたのはわずか8問。当時の日報にも「講義中ついていくのだけで精一杯だった」とそのまま書き残しています。

周りの受講者がどんどん先に進んでいく中、自分だけ置いていかれているような感覚になり、「自分はエンジニアとしてやっていけるのか」と不安になった日でした。

INNER JOINとLEFT JOINの違いがわからなかった

その日いちばん理解できなかったのが、INNER JOINとLEFT JOINの違いです。「共通するデータだけを出すINNER JOIN」と「片方は全部出して、対応するデータがなければNULLにするLEFT JOIN」、言葉で説明されても最初はピンときませんでした。

実際に両方のクエリを書いて結果を見比べ、「あ、出てくる行数が違うんだ」と気づくまでに時間がかかりました。

基本情報技術者試験で覚えた知識だけでは書けなかった

私は研修の前に基本情報技術者試験に合格していたので、正直「SQLも、なんとかなるだろう」と思っていました。

ところが、実際に研修が始まってみると、正規化といった用語の意味は理解できても、いざ自分でクエリを1行ずつ書くとなると手が止まってしまいました。

試験の選択肢の中から正解を選ぶのと、白紙の状態から自分でSELECT文を組み立てるのとでは、求められる力が全く違います。

また、この日を機会にコードを書ける読める力というのは、実際に書くことでしか得られないと考えるようになりました。

それでもSQLが分かるようになった理由

難しい場面は多々ありましたが、それでもSQLが分かるようになった理由の一つが、他のプログラミング言語と比べて面白いと感じられたことです。

JavaのようにクラスやオブジェクトといったOOPの概念を理解する必要がなく、「条件を指定して、欲しいデータだけを取り出す」というシンプルな目的がはっきりしているため、書いた結果がすぐに手元のテーブルとして返ってくる感覚が新鮮でした。

結果がガラッと変わるのも、パズルを解いているようで単純に楽しかったです。

正直に言うと、いまだにSQLを1から書こうとすると、かなり時間が取られ、分からない時もあります。ただし読めるようにはなりました。

このように、完璧に理解してから次に進むのではなく、手を動かしながら少しずつ慣れていくやり方が、良いのでないかと考えます。

まとめ|SQLは初心者には難しい部分もあるが、慣れれば書けるようになる

SQLは、JOINや集計処理、テーブル設計など、初心者がつまずきやすいポイントが確かにあります。

私自身、演習で64問中8問しか解けなかった日もありましたし、INNER JOINとLEFT JOINの違いに何時間も悩んだこともありました。

それでも、実際に手を動かしてクエリを書き、結果を見比べながら少しずつ理解を積み重ねることで、SQLを読んだり、基本的なクエリを書いたりできるようになりました。

資格の知識だけで身構える必要もありません。最初から完璧を目指さず、SQLを楽しむことが重要だと感じます。

コメント

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