【SQLの基礎知識②】 SQLの基本文法

SQLの基礎知識
SQLの基礎知識
この記事は約10分で読めます。

SQL文は比較的簡単な記述です。しかし、多くの人が慣れ親しんできたプログラム言語のBasicやC言語などとは異なる部分が多くあります。そのため最初は戸惑うことがあるかもしれません。しかし、SQL自体は簡単なものなので、一度理解してしまえばすぐに使いこなせるようになるでしょう。

Recommended Articles

SQL命令の構造

SQLはプログラム言語と比較して、直感的にわかりやすい構造をしています。まずは簡単なSQL文を見てみましょう。次のSQL文では、問合せを行うSQLの最も基本的なものです。

SELECT * FROM 名簿;

上記のSQLでは「名簿」という表からすべての列と行を結果として出力する記述です。SQLには構造があり、構造は次のもので構成されます。

  • キーワード

SQLは複数の単語から構成されていますが、これらの単語のうちでSQLとして使うためあらかじめ定義されているものがあります。これらを「キーワード」として呼びます。ここでは「SELECT」と「FROM」がキーワードです。キーワードは予約語とも呼びます。

キーワードは、後ろに単語を付けて「句」(フレーズ)となります。句はSQLの意味をなすひとまとまりの要素となります。キーワードの後ろに付ける単語には、データベース上のオブジェクトやデータといったものを記述します。ここでの例では「 SELECT * 」「 FROM 名簿 」が句となります。

SQLではいくつかの句を組合せて、1つの処理を作成します。この句を組合せたものが「文」(ステートメント)です。SQLは他の言語と異なり、1つの文で必ず1つの完結した処理を行います。この例では「 SELECT * FROM 名簿 ;」が文になります。

なお、最後に付いてる「;セミコロンは文の終わりを示すものです。そのため、最後に「;」を付けるまで、SQLは文は続いていることになります。

MS-SQLMSAccessなどでは、セミコロンを最後に付ける必要はありません。セミコロンが必要かどうかはRDBMS製品によって異なるので、各製品のマニュアルで確認してください。このサイトでは、MS-SQLMSAccessだけの記述以外は、最後にセミコロンを付けています。

SQLの記述上の注意

SQLを記述する上でいくつか気を付けなくてはならない点があります。

  • 大文字と小文字の区別がない
  • 空白文字の個数は関係ない
  • 文字列定数はシングルクォートで囲む
  • 日本語の扱い

これらについて解説していきましょう。

大文字と小文字の区別がない

まず、SQLの記述では、大文字・小文字を区別しません。そのため、次のような記述のどれも同じ内容の記述となります。

  • SELECT COLUMN1 FROM TABLE;
  • Select COLUMN1 From TABLE;
  • select COLUMN1 from TABLE;
  • SELECT COLUMN1 from TABLE;

ただし、データベース上のデータ(値)は大文字と小文字が区別されることに注意してください。データを記述するときには、大文字と小文字を明確に分けて入力しなくてはなりません。

RDBMS製品によっては、データだけでなく表名、列名も大文字・小文字を区別するものがありますので、各製品のマニュアルを参照してください。

空白文字の個数は関係ない

SQLでは空白文字は、いくつ連続しても1つとして扱われます。空白文字とは半角スペース、タブ、改行などです。(全角文字は空白文字ではありません)改行も特に意味を持っていないので、1行で記述しても、改行で複数行にしても、同じ結果を得ることができます。

改行なしのSQL文
 SELECT 列1, 列2 FROM 表 WHERE NAME = 'ABE';
改行を使ったSQL文
 SELECT 列1, 列2
 FROM 表
 WHERE NAME = 'ABE';

この2つのSQL文は、同じ結果になります。長いSQL文を入力する場合、後から見たときの見やすさのために、改行や空白などを適度に入れておくとわかりやすいでしょう。

文字列定数はシングルクォートで囲む

SQL文で値に文字列を使った文字列定数を扱うときには、「 ' 」(シングルクォート)で囲む必要があります。上記のSQL文では最後の「ABE」が文字列の値になるので「 ' 」で囲まれています。(定数については、こちらで解説しています。)

もし、文字列定数内にシングルクォートを記述したい場合には、シングルクォートを2つ続けて「 '' 」と記述してください。次のSQL文では「ABE'S」という「 ' 」を含んだ文字列の値を指定していることになります。

SELECT + FROM 表 WHERE ABSTRACT = 'ABE''S';
MSAccessでは、タブルクォート「 " 」で文字列定数を指定します。このサイトでは基本的にシングルクォートを使いますが、MSAccessの場合にはダブルクォートを使ってください。

日本語の扱いに注意

SQL上で日本語を使うこと自体は問題ありません。データとしては、当然日本語が扱えなくては困ります。では、列名や表名などはどうなのでしょうか?これはRDBMS製品ごとに異なります。RDBMS製品が列名や表名に日本語が使える仕様なら問題なく利用できます。

しかし、使えるからと言って容易に日本語を使うことは避けたほうが良いでしょう。日本語を表名や列名に採用するときは、そのデータベースシステムの構成やホストプログラムにおける日本語の扱い。さらにデータベースシステムの開発効率なども検討した上で決定するべきだと思います。

このサイトでは理解しやすいように、表名、列名に日本語を使っていることがあります。

コメント文

SQLはプログラム言語と比べると、比較的短い記述で済むので、見た目でわかりやすい言語です。しかし、そうであっても、後々のメンテナンスのことを考えて、SQL文内にコメントを残したい場合もあるでしょう。SQLではこのようなときに--」(半角のマイナス記号2つ)を使ってコメントを記述することができます。「--」から、その行の終わりまでがコメントとして扱われます。行の終わりまでということは、改行までがコメントとして扱われるということです。

書式 -- <コメント>

例えば、次のSQL文では、「TABLE1」という表を作成していますが、「表1の作成」と「合計得点」がコメントになります。表の作成については、こちらを参照してください。

--でコメント文を入力
CREATE TABLE TABLE1   --TABLE1の作成
( ID INT NOT NULL,
  NAME VARCHAR(32) NOT NULL,
  AGE INT,
  POINT INT --合計得点
) ;

大半のRDBMS製品では、「--」以外にも、C言語やJava言語のコメントの記述としておなじみの「 /*  */」を使うこともできます。このサイトが対象としているORACLEMS-SQLMSAccess でも利用できます。この場合は、「 /* 」と「 */ 」で囲まれる部分すべてがコメントになるので、複数行にわたるコメントを記述することが可能です。

書式
/*
<コメント>
*/
次の例は、先ほどの表を作成するSQL文に、その表の内容に関するコメントを最初に付けて、どんなSQL文なのかをわかりやすくしています。
/* */ で囲んで複数行のコメントを入力
/* テーブルの説明
 合計点を保持するテーブル
 2020年版
*/
CREATE TABLE TABLE1  --TABLE1の作成
 ( ID INT NOT NULL,
    NAME VARCHAR(32) NOT NULL,
    AGE INT,
    POINT INT --合計得点

 );
コメントは、SQLの実行エンジンでは無視されるので、SQLの処理には何の」影響も与えません。

予約語

SQLではキーワードが最初から定義されています。このキーワードは、そのまま表名や列名に使うことができないものです。これらを「予約語」と呼びます。予約語は SELECT、FROM、WHERE といった単語などです。

主な予約語には次のようなものがあります。

ALLCROSSFOREIGNJOINORDERSUM
ALTERCURSORFROMKEYOUTERTABLE
ANDCECLAREFULLLEFTPRIMARYTRUE
ANYDELETEGRANTLIKEREFERENCESUNION
ASDESCGROUPLOWERREVOKEUNIQUE
AVGDISTINCTHAVINGMAXROLLBACKUNKNOWN
BETWEENDROPINMINSCHEMAUPDATE
BYEXCEPTINNERNOTSELECTUPPER
COMMITEXECINSERTNULLSETUSER
COUNTEXISTSINTERSECTONSOMEWHERE
CREATEFALSEINTOORSUBSTRING 

しかし、予約語を表名や列名として使いたい場合もあります。表名や列名に予約語を使った場合には、SQL文で指定するときに 「 [ ] 」 で囲むようにします。次の例は「SELECT」という表から、「ALL」列と「INSERT」列を出力するときのSQL文です。

SELECT [ALL], [INSERT] FROM [SELECT];

定数

SQLでは、表から取得する値と、SQL文で指定する定数を使って、さまざまな処理が行われます。SQL文で指定する定数には、その内容により数値定数と文字列定数があります。

定数の種類
定数名内容
数値定数1、56、0.47、1e12 などの英数字
文字列定数A、Apple、abe、商品 などの文字

文字列定数は、特定の文字列です。文字列定数をSQL文の中で使う場合には、先ほど解説したように、シングルクォートで囲みます。なお、文字列定数は1文字から複数の文字列のすべてを含みます。

数値定数は、特定の数値です。文字列定数と異なり、数値定数はシングルクォートで囲む必要はありません。

定数を記述するときに注意が必要なのが、定数と比較する表の列の値に数値が入っているときです。表の値には次に説明するデータ型があり、数値は数値型の場合もあれば、文字列型の場合もあります。値のデータ型が数値型のときには定数も数値定数を指定し、文字列型の場合には文字列定数を使わなければ比較などが行えません。

数値を文字列型のデータとして格納していても、文字列型を数値型に変換して利用することも可能です。

データ型

RDBの各列は、扱えるデータ型形式が同じである必要があります。列によって、値が数値の列、文字の列となっており、同じ列に数値と文字列の両方の値があるといったことは許されません。この各列の決められたデータの型が「データ型」です。

表を作成するときには、各列のデータ型を定義しておく必要があります。データ型は、大きく分けると「文字列型」「数値型」「バイナリ型」「ビット型」「日付時刻型」の5つに分類することができます。

データ型の分類とDBMS製品の実装
タイプOracleMS-SQL
文字列型固定長CHARCHAR
可変長VARCHAR2VARCHAR
固定長各国文字列NCHARNCHAR
可変長各国文字列

NVARCHAR2

LONG

NVARCHAR

TEXT

NTEXT

数値型整数INT

INT

SMALLINT

TINYINT

真数(小数)NUMBER

NUMERIC

DECIMAL

浮動小数点FLOATFLOAT
倍精度浮動小数点REAL
高精度浮動小数点DOUBLE PRECISION
その他

MONEY

SMALLMANEY

バイナリ型固定長バイナリBINARY
可変長バイナリ

RAW

LONG RAW

CLOB

BLOB

VARBINARY

IMAGE

ビット型固定長ビットBIT
可変長ビット
日付時刻型日付
時刻
日付時刻DATE

DATETIME

SMALLDATETIME

TIMESTAMP

この表を見てもらうとわかるように、実際の実装は、各RDBMS製品によって、異なっている部分が多くあります。そのため、実際に表を作成する際には、各製品のマニュアルを参照するようにしてください。

関連リンク

次の章に進む
【SQLの基礎知識③】 SQLにおける算術演算子(四則演算)の基本
ここでは、SQLで計算や処理を行うために四則演算(+、-、×、÷)や比較演算の基礎を習得できます。四則演算では、解説文だけではなく、より具体的・実践的なSQL文と実行結果を確認しながら理解できます。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるサイトです。
SQLの基礎知識トップページ
【SQLの基礎知識】基本ルールや基礎の基礎をマスターしよう
こちらの記事を読み進めることで、SQLの基礎が充分に身に付きます。これからSQLを身に着けたい初心者・入門者の方に最適です。データベース製品ごとに表現方法が異なることがありますので、ある程度SQLのスキルがある方も利用できるサイトです。



【POLA】最高峰B.A の日焼け止め

Recommended Articles
いちれべ.com