SQLについて一から勉強し直してみる~SQLとは何か?~

最終更新日(2023/11/10)

はじめに

 

業務でSQLを使うことになりました。大学で講義を受けて以来なので、学習を兼ねてアウトプットしていく記事です。

今回はSQLの概要として、基本的な文法、データ型、演算子についてまとめます。

 

SQLって何?

 

SQLとは、「データベースを操作するための言語」

データベース(リレーショナルデータベース)を管理する、リレーショナル データベース管理システム(RDBMS)でDB操作のために使用するのがSQL言語です。

主要なRDBMS

SQLはISOで標準化されており、いくつかバージョンがあります。ただしRDBMS各製品には独自機能(いわゆる方言)が存在するので、使用するRDBMSに応じて若干違いはあります。

※今回、学習は基本にPostgreSQLで行っていきます。

 

SQLの概要

 

SQL文のコマンド3種類

SQL文のコマンドは、データ定義言語 (DDL: data definition language)、データ定義言語 (DDL: data definition language)、データ制御言語 (DCL: data control language)の3種類に分類されます。

データ定義言語 (DDL: data definition language)

DBやテーブルの作成、削除などを行う

  • CREATE : DBやテーブルを定義する(作成する)
  • DROP : DBやテーブルを削除する
  • ALTER : DBやテーブル定義を変更する
データ操作言語(DML: data manipulation language)

テーブルの検索、変更などを行う

  • INSERT : テーブルに新規行/データを登録する
  • UPDATE : テーブルを更新する
  • DELETE : テーブルを削除する
  • SELECT : テーブルデータを検索/取り出す ←おそらく一番よく使う
データ制御言語(DCL: data control language)

DBに対する変更を確定したり、消したりする。他にはDBのユーザ権限の変更なども行う。

  • COMMIT : DBに対する変更を確定させる
  • ROLLBACK : DBに対する変更を取り消す
  • GRANT : 特定のユーザに操作の権限を付与する
  • REVOKE : 特定のユーザから権限を剥奪する

  ※他にもありますが、あまり使わないので割愛。

SQL文の基本的な文法ルール

  • 大文字、小文字は区別されない
    ただし、登録されているデータに関してはちゃんと区別される
  • 文字列はシングルクォーテーションで囲う
  • 単語は半角スペースか改行で区切る
  • 1行コメントは "--" で、複数行コメントは "/*" と "*/" で囲う

データ型

数値データ
データ型名 説明 数値の範囲
smallint 2バイト整数 -32768から32767まで
integer 4バイト整数 -2147483648から2147483647まで
bigint 8バイト整数 -9223372036854775808から
9223372036854775807まで
real 単精度浮動小数点数 6桁(-1E+37から1E+37まで)
double precision 倍精度浮動小数点数 15桁(-1E+308から1E+308まで)

numeric(p, s)

decimal(p, s)
高精度数値 最大1000桁
文字列データ
データ型名 説明
character(n) 固定長文字列
character varying(n) 可変長文字列
text 制限なし可変長文字列
日付・時刻データ
データ型名 説明
date 日付
time(p) 時刻
timestamp(p) 日付と時刻
interval(p) 間隔

演算子

算術演算子

演算子 説明
+
-
*
/

比較演算子

演算子 説明

<

小なり
> 大なり
<= 以下
>=

以上

=

等しい

<> または !=

等しくない

BETWEEN min AND max

minとmaxの間

※BETWEEN AND は演算子ではありませんが、同じ動作をするので一緒に書いておきます。

論理演算子

演算子 説明
NOT 否定
AND かつ
OR または
 
演算の返り値NULLについて

「NULLを含む計算は全てNULLを返す」

気を付けておくべきは、比較演算もNULLを返すという点です。SQLの比較演算の結果はTRUE・FALSE・NULLの3種類で、左辺でも右辺でもNULLを含む比較は全てNULLを返します。