📝

【初心者向け】SQLデータベース操作の基礎

に公開

はじめに

「SQLゼロから始めるデータベース操作」を元にSQLを勉強したので備忘録として記事を作成します。
https://www.amazon.co.jp/SQL-第2版-ゼロからはじめるデータベース操作-ミック-ebook/dp/B01HD5VWWO

基礎的なSQLデータベース操作・注意事項

初心者が忘れやすい、注意すべき以下の内容について記載しています。実際にSQLを書きながら振り替えられるようにしています。

  • データ型の指定
  • DDL(Data Definition Language(データ定義言語))
  • DML (Data Manipulation Language (データ操作言語))
  • DCL(Data Control Language(データ制御言語))
  • SQL理解に伴う注意事項

この記事の対象者

SQLのデータベース操作の初心者向け

動作環境・使用するツールや言語

例や参考コードは、SQL(Postgres)

データ型

テーブル作成時定義

INTEGER型

  • 整数を入れる列にしていするデータ型(数値型)
  • 小数は入れられない

CHAR型

  • character(文字)の略
  • 文字列を入れる列に指定するデータ型
  • CHAR(10)のように列の中に入れることで文字列の長さ(最大長)を指定できる固定文字列。
  • 最大長に満たない場合、文字数が最大になるまで半角スペースで埋める(abc

VARCHAR型

  • CHAR型と同じく文字列を入れる列に指定するデータ型
  • VARCHAR(10)のように列の中に入れることで文字列の長さ(最大長)を指定できる可変長文字列。
  • 最大長に満たなくても、文字数が最大になるまで半角スペースで埋めない(abc

DATE型

  • 日付を入れる列

記載例(商品テーブル)

CREATE TABLE Shohin
(shohin_id     CHAR(4) NOT NULL,
 shohin_mei    VARCHAR(100) NOT NULL,
 shohin_bunrui VARCHAR(32) NOT NULL,
 hanbai_tanka  INTEGER ,
 shiire_tanka  INTEGER ,
 torokubi      DATE ,
     PRIMARY KEY (shohin_id));

DDL(Data Definition Language(データ定義言語))

テーブル自体に対する命令でよく使うもの

CREATE

データベースやテーブルなどを作成する

CREATE TABLE Shohin

DROP

データベースやテーブルなどを削除する

DROP TABLE Shohin

ALTER

データベースやテーブルなどの構成を変更する

ALTER TABLE Shohin ADD COLUMN yubinbango CHAR(8);

DML (Data Manipulation Language (データ操作言語))

テーブルの行に対する命令でよく使うもの

SELECT

テーブルから行を検索する

<!--  例:shohin_id順にテーブルの全列を表示 -->
SELECT * FROM Shohin ORDER BY shohin_id;

INSERT

テーブルに新規行を追加する

INSERT INTO Shohin VALUES ('0001', 'Tシャツ' ,'衣服', 1000, 500, '2009-09-20');

UPDATE

テーブルの行を更新する

UPDATE Shohin
   SET hanbai_tanka = hanbai_tanka * 10,
       shiire_tanka = shiire_tanka / 2
 WHERE shohin_bunrui = 'キッチン用品';

DELETE

テーブルの行を削除する

DELETE FROM Shohin
 WHERE hanbai_tanka >= 4000;

DCL(Data Control Language(データ制御言語))

テーブルなどの操作を確定したり取り消すもの

COMMIT

データベースに対しておこなった変更を確定する

ROLLBACK

データベースに対しておこなった変更を取り消す

GRANT

ユーザに操作の権限を与える

REVOKE

ユーザから操作の権限を奪う

SQL理解に伴う注意事項

SQLでは指示内容によってできる操作が異なる。一つ一つを理解するのは難しい。SQLの実行順について知ることで覚える量を減らせます。

SELECT文の実行順序

 FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

SELECT文の中では上記の順番で実行されているため、以下のような内容は実行できない。

WHERE句で列の別名(AS)を使用できない

-- ❌ エラー
SELECT shohin_bunrui
FROM shohin
WHERE COUNT(*) > 2
GROUP BY shohin_bunrui;

-- ✅ 正しい
SELECT shohin_bunrui
FROM shohin
GROUP BY shohin_bunrui
HAVING COUNT(*) > 2;

理由:WHERE句はSELECT句より先に実行されるため、まだ別名kakaku_waribikiが定義されていない。WHERE句実行時点では別名は存在しない。

WHERE句で集約関数を使用できない

-- ❌ エラー
SELECT shohin_bunrui
FROM shohin
WHERE COUNT(*) > 2
GROUP BY shohin_bunrui;

-- ✅ 正しい
SELECT shohin_bunrui
FROM shohin
GROUP BY shohin_bunrui
HAVING COUNT(*) > 2;

理由: WHERE句はGROUP BY句より先に実行されるため、まだグループ化されておらず集約関数COUNT(*)が計算できない。集約関数はグループ化後でないと意味を持たない。

おわりに・まとめ

たびたび書き方を思い出せずにいたので記事にまとめました。今後は集約関数についても記載したいです。

Discussion