0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【26/5】振り返り用メモ SQL文書くとき読むときの5つのポイント【初心者】

0
Posted at

はじめに(学習の全体像)

5月は以下の3つの学習を並行して学習しました。今回のブログではSQLに絞って学習内容を整理していきます。
何もみずにSQL文かいてテーブル操作できたとき、嬉しくて学習のモチベーションが上がっちゃいました。

項目 期間 内容
SQL演習 5月上旬 四大構文+JOIN・サブクエリなど手書き練習
LaravelにてオリジナルWEBアプリ開発 5月中旬~下旬(計11日) 既存WEBアプリを改修し、新機能を実装
基本情報試験対策 5月通じて継続 過去問道場で60~120問/日ペース

個人的に学習を行って抑えておくべきポイントだと感じたものを5つ以下に羅列します。
ちなみに学習に用いたサイトはSQLabです。Cntl+Iで解答をすぐに確認できるのでスピーディに学習できるところがお気に入りです。
リンク:https://sqlab.net/


ポイント1:SQL の記述順序と実行順序は別物

記述順序:

SELECT → FROM → JOIN → WHERE → GROUP BY → HAVING → ORDER BY

実行順序(DBが処理する順/読解はこの順番で行う):

FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

ポイント2:WHERE句とサブクエリの見極め

ざっくりと、簡単な条件指定はWHERE句。複雑そうなのや、集計関数を使うのはサブクエリやHAVING句で判断する。

WHERE句に関しての2つの重要事項

⚠️ 制限1:エイリアスが使えない
WHERE句では、集約関数や GROUP BY で指定したカラムのエイリアスが使用できません

⚠️ 制限2:集計関数が使えない
WHERE句では集計関数を直接使用できません

ただし、サブクエリ内で集計して、その「結果」(スカラー値)をWHERE句が使うなら問題ありません。


コード例で整理

❌ ダメ:WHERE句が集計関数を直接呼び出し

WHERE COUNT(*) > 5

✅ OK:WHERE句が集計結果を比較(サブクエリを利用)

WHERE salary > (SELECT AVG(...))

✅ OK:HAVING句で集計結果をフィルタリング

HAVING COUNT(*) >= 5

ポイント3:条件指定の際に()の活用有無

AND/OR 使用は括弧を使って明確にすることが必要。

例1:東京または大阪の店舗で、売上が100万以上の案件

SELECT * FROM sales
WHERE (location = '東京' OR location = '大阪')
AND amount >= 1000000;

例2:複数条件の組み合わせ

SELECT * FROM products
WHERE (category = 'A' AND price > 1000)
OR (category = 'B' AND price > 2000);

例3:IN の使用

SELECT * FROM orders WHERE status IN ('pending', 'processing', 'shipped');

ポイント4:GROUP BY のルール

GROUP BY を使うと、SELECT に記述できるカラムは以下の2種類のみです:

  1. GROUP BY に指定したカラム
  2. 集約関数(SUM、COUNT、AVG、MAX、MINなど)で囲んだカラム
-- 正解
SELECT department, COUNT(*) as cnt
FROM employees
GROUP BY department;

-- 間違い
SELECT department, employee_id, COUNT(*)
FROM employees
GROUP BY department;

ポイント5:頻出句の整理

DISTINCT vs GROUP BY

DISTINCT:重複排除に特化(シンプル)
GROUP BY:集計関数(COUNT, SUMなど)を使うなら必須

<> 演算子

「~以外」という意味(!= と同じ)

LIKE 演算子

部分一致でも可の条件指定演算子

WHERE 句

絞り込みを行う句(例:男性のみのデータ取得)
INや不等号、NOT INを用いながらサブクエリの活用も可能
重要:「否定の集合」や「複雑な集計条件」ではサブクエリ

WHERE total_page > (
  SELECT total_page 
  FROM books 
  WHERE name = 'コードと回路'
);

GROUP BY 句

同じカテゴリーを1つの項目にする句(例:発行年毎の書籍数を取得)

HAVING 句

既存カラムと集計関数(SUMやCOUNT)を用いた絞り込みを行う際に用いる句
(例:書籍数が2つ以上のデータを取得)

SELECT name
FROM books
JOIN book_sales
ON books.id = book_sales.book_id
GROUP BY name
HAVING SUM(book_sales.stock) = 0;

ORDER BY 句

昇順(DESC不要)・降順(ORDER BY releease_year DESC)での並び替え指定

LIMIT 句

上位○個のデータのみを取得する


結論

5月時点では基本的なSQL文は何も見ずに書けるようになりました。
ただ、時間が経つと「各句の使い方や意識するべきルール」「記述順序」を忘れがちなので、使用前には特に上記ポイントの見直しが必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?