8
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?

RUNTEQAdvent Calendar 2024

Day 7

【SQL】基本的なSQL文まとめ

Posted at

はじめに

はじめまして!
RUNTEQ Advent Calendar 2024の7日目を担当しますKoheiと申します!

今回は、SQL文について、まとめておきたいと思います。

特に、

  • SQLを初めて触る
  • あまり触っていない人

などをターゲットに、よく使うようなSQL文を中心にまとめました!
 
載っていないコマンドは、記事下部に公式DBMSマニュアルのリンクをまとめましたので、
そちらから検索してみてください。

少しでも参考になれば幸いです。

注意事項

  • お使いのDBMS製品によって、使用できるSQL文などが違います。詳細は、使用している製品の公式マニュアルを御覧ください。(分かる範囲で、代表的な製品は記事下部にまとめました!)
  • 間違いなど有りましたら、コメント等でご指摘ください。

おすすめの使い方

Ctrl + FCommand + Fで、ページ内検索をかけるのがオススメです。
また、目次も作ったのでご参考にお使いください。

SELECT(テーブルを取得したい)

SELECT 列名①, 列名②,・・・・・(全部の列を取得したいなら「*(アスタリスク)」を記載)
FROM テーブル名;

例)売上テーブルから、顧客番号が「1」の「顧客番号」「商品名」「単価」「数量」を取得したい

SELECT 顧客番号, 商品名, 単価, 数量
FROM 売上
WHERE 顧客番号 = 1;   /* 「行」を絞る */

★ SELECTだけで使える加工方法

SELECTでの命令時のみで使える加工方法があるので、いくつか紹介します。

DISTINCT (重複を除外する)

SELECT DISTINCT 列名 /* SELECT文で列を選択する前に書く必要がある */
FROM テーブル名;

例)下記、売上テーブルで何の商品名が買われたのか明らかにしたい(重複を取り除きたい)

売上
商品名 単価
商品D ¥4000
商品C ¥3000
商品A ¥1000
商品B ¥2000
商品A ¥1000
商品C ¥3000
商品D ¥4000
SELECT DISTINCT 商品名
FROM 売上;

↓下記のようになる

売上
商品名 単価
商品D ¥4000
商品C ¥3000
商品A ¥1000
商品B ¥2000

ORDER BY (順序を並べ替える)

SELECT 列名
FROM テーブル名
ORDER BY 列名① 並べ方, 列名② 並べ方,・・・・・ ;
/* 並べ方・・・「何も書かない」か「ASC」が昇順、「DESC」が降順 */

例)下記表の単価を降順(大きい方から順に)に並び替える

売上
商品名 単価
商品D ¥4000
商品C ¥3000
商品A ¥1000
商品B ¥2000
SELECT *
FROM 売上
ORDER BY 単価 DESC;

↓下記のようになる

売上
商品名 単価
商品D ¥4000
商品C ¥3000
商品B ¥2000
商品A ¥1000

OFFSET - FETCH (●件だけ取得する)

SELECT 列名
FROM テーブル名
ORDER BY 列名 並べ方  /* ORDER BYといっしょに使われることが多い*/
OFFSET 冒頭から除外する行数 ROWS  /* この行は省略可能  */
FETCH NEXT 取得したい行数 ROWS ONLY;  /* 「LIMIT 取得したい行数」で書くことも可能*/

※DBMS製品によってはサポートされていない場合があります

例)下記表の3番目に高い単価だけを取得する

売上
商品名 単価
商品D ¥4000
商品C ¥3000
商品A ¥1000
商品B ¥2000
SELECT *
FROM 売上
ORDER BY 単価 DESC
OFFSET 2 ROWS
FETCH NEXT 1 ROWS ONLY;

↓下記のようになる

売上
商品名 単価
商品B ¥2000

UNION・EXCEPT・INTERSECT(2テーブル以上を、和集合・差集合・積集合させる)

SELECT 列名①, 列名②, 列名③・・・・
FROM テーブル名①

UNION /* 和集合の場合 */
/* 差集合:EXCEPT, 積集合:INTERSECT */

SELECT 列名①, 列名②, 列名③・・・・ /*  NULLなどを入れて、列数はテーブル①と合わせること */
FROM テーブル名②;

UPDATE(データを更新したい)

UPDATE テーブル名
SET 列名① = 値①, 列名② = 値②, ・・・・・
WHERE 行名 = 条件;

※全件データを更新するのは稀なので、基本的にはWHEREをつける
 

例)売上テーブルにある、「商品名」が「A」の「単価」を「500円」にしたい

UPDATE 売上
SET 単価 = 500
WHERE 商品名 = 'A'

DELETE(データを削除したい)

DELETE 
FROM テーブル名
WHERE 行名 = 条件;

※WHEREを設定しないと、全件削除になるので注意!(ロールバックは可能)
※跡形もなくテーブルを消したい場合は、DROP TABLE テーブル名 を使う

例)売上テーブルから、「商品名」が「A」の行だけ削除したい

DELETE
FROM 売上
WHERE 商品名 = 'A';

INSERT INTO〜(データを追加したい)

INSERT INTO テーブル名 (列名①, 列名②,・・・・・)
VALUES (値①, 値②, ・・・・・);

例)下記の売上テーブルに、「2000円の商品B」の行を追加したい

売上
商品名 単価
商品A ¥1000
INSERT INTO 売上(商品名, 単価)
VALUES (商品B, 2000);

↓下記のようになる

売上
商品名 単価
商品A ¥1000
商品B ¥2000

CREATE(テーブルを作りたい)

CREATE TABLE テーブル名 (
    列名① 列①のデータ型 /* データ型については下記表を参考 */
    列名② 列②のデータ型
    列名③ 列③のデータ型・・・・・
);
【参考:データ型】
種別
数値(整数) INTEGER, INT
数値(少数) DECIMAL, NUMERIC, FLOAT, DOUBLE, REAL
文字列(固定長) CHAR()  ※()内にはバイト数を書く
文字列(可変長) VARCHAR()  ※()内にはバイト数を書く
日付や時刻 TIMESTAMP, DATETIME, DATE, TIME

その他コマンド

基本的には、4大命令(SELECT・UPDATE・DELETE・INSERT INTO)といっしょに使うことが多いコマンドを集めました。

AS (別名を付けられる)

SELECT 商品名 AS ITEM, 単価 AS PRICE
FROM 売上 AS Sales;
売上
商品名 単価
商品A ¥1000

Sales
ITEM PRICE
商品A ¥1000

IS NULL・NOT IS NULL (NULL、もしくは、NULLでないことを見つける)

例)下記表から「単価」に「NULL」が含まれる行だけを取得する

売上
商品名 単価
商品A ¥1000
商品B ¥2000
商品C NULL
商品D ¥4000
SELECT *
FROM 売上
WHERE 単価 IS NULL;  /* 「= NULL」とは書かないこと! */

↓下記のようになる

売上
商品名 単価
商品C NULL

BETWEEN 値① AND 値② (範囲を絞る)

例)売上テーブルから、2000円〜4000円の単価がついている行を取得したい

SELECT *
FROM 売上
WHERE 単価 BETWEEN 2000 AND 4000;

IN・NOT IN(値①, 値②,・・・) (値のいずれかに一致、いずれもに一致しない)

例)売上テーブルから、2000円、もしくは、3000円の単価がついている行を取得したい

SELECT *
FROM 売上
WHERE 単価 IN (2000, 3000):

比較演算子 + ANY・ALL(値①, 値②,・・・)(いずれか一致なら真、全て一致なら真)

例)売上テーブルから、単価が2000円以上の行を取得したい

SELECT *
FROM 売上
WHERE 単価 <= 2000;

Tips

「行(レコード)」と「列(カラム)」の見分け方

漢字の見た目で覚えています。
また、「行」の別名である「レコード」は「ー(横棒)」があるので、これも見た目で覚えやすいですね。

「行」と「列」の見分け方.png

「行」は WHEREで絞るイメージ

SQLを学び始めたとき、どうやって目的のテーブルに近づけていくのかわかりませんでした。
初めのうちは基本的に、WHEREのコマンドで「行」を絞っていくというイメージで良いと思いました。

SELECT 列名
FROM テーブル名
WHERE 行名     /*  ←「行」はココで絞る! */ 

代表的なDBMSのマニュアル (※2024/12/07時点)

参考

8
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
8
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?