LoginSignup
7
2

More than 1 year has passed since last update.

「スッキリわかるSQL入門」で詰まったところ②

Last updated at Posted at 2023-03-04

目次

1. はじめに
2. 今回のゴール
3. 詰まったところと原因
3-1. シングルクォーテーションとダブルクォーテーションが曖昧
復習:部分検索
3-2. テーブルに入っているデータ同士を比較する方法を知らない
3-3. UPDATEの基本構文が曖昧
4. おわりに

1.はじめに

現在、基本的なSQL文が書けるように下記の書籍を進めています。

各章に練習問題があり、詰まったところをまとめていきたいと思います。

▼①はこちら

2.今回のゴール

「なぜ間違えたのか」を理解して落とし込むこととします。

3.詰まったところと原因

3-1.シングルクォーテーションとダブルクォーテーションが曖昧

部分検索のSQL文を考える問題がありました。

リテラルにダブルクォーテーションを使用したところ、エラーとなりました。

SELECT * FROM 家計簿
-- "%購入%"とするとエラーになる
WHERE メモ LIKE '%購入%'

ダブルクォーテーションを使用する場合もあるようですが、基本的にシングルクォーテーションを使うようです。

復習:部分検索

項目 内容
_(アンダースコア) 任意の1文字
% 任意の0文字以上の文字列
'%購入%' 文字列を含むもの
'%購入' 最後に文字列を含むもの(今回だと「〜購入」など)
'購入%' 最初に文字列を含むもの(今回だと「購入〜」)

3-2.テーブルに入っているデータ同士を比較する方法を知らない

以下のような成績表のテーブルがあるとします。

名前 英語の点数 数学の点数
太郎くん 80 80
花子さん 70 92

これまで「太郎くんの英語の点数は70点より高いか低いか」というような 「テーブル内のデータと指定されたデータの比較」 をする問題はありました。

しかし、今回の成績表テーブルにおける「英語と数学の点数が一致しているデータ」というような 「データ同士の比較」 をしたことがなく戸惑いました。

一致するデータ、一致しないデータを取得するSQL文は以下のようになります。

-- 一致するデータ
SELECT *
FROM 成績表
WHERE 英語 = 数学 -- 太郎くんのデータが取得できる

-- 一致しないデータ
SELECT *
FROM 成績表
WHERE 英語 <> 数学 -- 花子さんのデータが取得できる

3-3.UPDATEの基本構文が曖昧

前回の記事と同じ見出しになってしまいますが、またUPDATEのところで詰まってしまいました…

基本構文は以下です。

UPDATE テーブル名
SET 列名1 = 1, 列名2 = 2 ...
(WHERE 修飾)

複数の列に対して同じ値を更新する場合はIN句を使用します。
▼例:値1と値2を含むデータのA列の値を一括でBにする場合

UPDATE テーブル名
SET 列名A = B
WHERE (列名が来ることもある) IN (1, 2) --カッコ内に列挙した複数の値のいずれかにデータが合致するか判定

4.おわりに

今回も前回に引き続き、参考書を進める中で詰まった3箇所について復習していきました。

原因を掴んで理解することが、上達への近道ではないかと思います。実務では複雑なものもあったりするので、自己学習で一つずつ紐解きながら積み上げていきたいと思います。

読んでいただき、ありがとうございました。

7
2
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
7
2