SQL文は比較的簡単な記述です。しかし、多くの人が慣れ親しんできたプログラム言語のBasicやC言語などとは異なる部分が多くあります。そのため最初は戸惑うことがあるかもしれません。しかし、SQL自体は簡単なものなので、一度理解してしまえばすぐに使いこなせるようになるでしょう。
SQL命令の構造
SQLはプログラム言語と比較して、直感的にわかりやすい構造をしています。まずは簡単なSQL文を見てみましょう。次のSQL文では、問合せを行うSQLの最も基本的なものです。
SELECT * FROM 名簿;
上記のSQLでは「名簿」という表からすべての列と行を結果として出力する記述です。SQLには構造があり、構造は次のもので構成されます。
- キーワード
- 句
- 文
SQLは複数の単語から構成されていますが、これらの単語のうちでSQLとして使うためあらかじめ定義されているものがあります。これらを「キーワード」として呼びます。ここでは「SELECT」と「FROM」がキーワードです。キーワードは予約語とも呼びます。
キーワードは、後ろに単語を付けて「句」(フレーズ)となります。句はSQLの意味をなすひとまとまりの要素となります。キーワードの後ろに付ける単語には、データベース上のオブジェクトやデータといったものを記述します。ここでの例では「 SELECT * 」「 FROM 名簿 」が句となります。
SQLではいくつかの句を組合せて、1つの処理を作成します。この句を組合せたものが「文」(ステートメント)です。SQLは他の言語と異なり、1つの文で必ず1つの完結した処理を行います。この例では「 SELECT * FROM 名簿 ;」が文になります。
なお、最後に付いてる「;」セミコロンは文の終わりを示すものです。そのため、最後に「;」を付けるまで、SQLは文は続いていることになります。
SQLの記述上の注意
SQLを記述する上でいくつか気を付けなくてはならない点があります。
- 大文字と小文字の区別がない
- 空白文字の個数は関係ない
- 文字列定数はシングルクォートで囲む
- 日本語の扱い
これらについて解説していきましょう。
大文字と小文字の区別がない
まず、SQLの記述では、大文字・小文字を区別しません。そのため、次のような記述のどれも同じ内容の記述となります。
- SELECT COLUMN1 FROM TABLE;
- Select COLUMN1 From TABLE;
- select COLUMN1 from TABLE;
- SELECT COLUMN1 from TABLE;
ただし、データベース上のデータ(値)は大文字と小文字が区別されることに注意してください。データを記述するときには、大文字と小文字を明確に分けて入力しなくてはなりません。
空白文字の個数は関係ない
SQLでは空白文字は、いくつ連続しても1つとして扱われます。空白文字とは半角スペース、タブ、改行などです。(全角文字は空白文字ではありません)改行も特に意味を持っていないので、1行で記述しても、改行で複数行にしても、同じ結果を得ることができます。
SELECT 列1, 列2 FROM 表 WHERE NAME = 'ABE';
SELECT 列1, 列2
FROM 表
WHERE NAME = 'ABE';
この2つのSQL文は、同じ結果になります。長いSQL文を入力する場合、後から見たときの見やすさのために、改行や空白などを適度に入れておくとわかりやすいでしょう。
文字列定数はシングルクォートで囲む
SQL文で値に文字列を使った文字列定数を扱うときには、「 ' 」(シングルクォート)で囲む必要があります。上記のSQL文では最後の「ABE」が文字列の値になるので「 ' 」で囲まれています。(定数については、こちらで解説しています。)
もし、文字列定数内にシングルクォートを記述したい場合には、シングルクォートを2つ続けて「 '' 」と記述してください。次のSQL文では「ABE'S」という「 ' 」を含んだ文字列の値を指定していることになります。
日本語の扱いに注意
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言語のコメントの記述としておなじみの「 /* */」を使うこともできます。このサイトが対象としているORACLE、MS-SQL、MSAccess でも利用できます。この場合は、「 /* 」と「 */ 」で囲まれる部分すべてがコメントになるので、複数行にわたるコメントを記述することが可能です。
/*
<コメント>
*/
/* テーブルの説明
合計点を保持するテーブル
2020年版
*/
CREATE TABLE TABLE1 --TABLE1の作成
( ID INT NOT NULL,
NAME VARCHAR(32) NOT NULL,
AGE INT,
POINT INT --合計得点
);
予約語
SQLではキーワードが最初から定義されています。このキーワードは、そのまま表名や列名に使うことができないものです。これらを「予約語」と呼びます。予約語は SELECT、FROM、WHERE といった単語などです。
主な予約語には次のようなものがあります。
ALL | CROSS | FOREIGN | JOIN | ORDER | SUM |
ALTER | CURSOR | FROM | KEY | OUTER | TABLE |
AND | CECLARE | FULL | LEFT | PRIMARY | TRUE |
ANY | DELETE | GRANT | LIKE | REFERENCES | UNION |
AS | DESC | GROUP | LOWER | REVOKE | UNIQUE |
AVG | DISTINCT | HAVING | MAX | ROLLBACK | UNKNOWN |
BETWEEN | DROP | IN | MIN | SCHEMA | UPDATE |
BY | EXCEPT | INNER | NOT | SELECT | UPPER |
COMMIT | EXEC | INSERT | NULL | SET | USER |
COUNT | EXISTS | INTERSECT | ON | SOME | WHERE |
CREATE | FALSE | INTO | OR | SUBSTRING |
しかし、予約語を表名や列名として使いたい場合もあります。表名や列名に予約語を使った場合には、SQL文で指定するときに 「 [ ] 」 で囲むようにします。次の例は「SELECT」という表から、「ALL」列と「INSERT」列を出力するときのSQL文です。
定数
SQLでは、表から取得する値と、SQL文で指定する定数を使って、さまざまな処理が行われます。SQL文で指定する定数には、その内容により数値定数と文字列定数があります。
定数の種類
定数名 | 内容 |
---|---|
数値定数 | 1、56、0.47、1e12 などの英数字 |
文字列定数 | A、Apple、abe、商品 などの文字 |
文字列定数は、特定の文字列です。文字列定数をSQL文の中で使う場合には、先ほど解説したように、シングルクォートで囲みます。なお、文字列定数は1文字から複数の文字列のすべてを含みます。
数値定数は、特定の数値です。文字列定数と異なり、数値定数はシングルクォートで囲む必要はありません。
定数を記述するときに注意が必要なのが、定数と比較する表の列の値に数値が入っているときです。表の値には次に説明するデータ型があり、数値は数値型の場合もあれば、文字列型の場合もあります。値のデータ型が数値型のときには定数も数値定数を指定し、文字列型の場合には文字列定数を使わなければ比較などが行えません。
データ型
RDBの各列は、扱えるデータ型形式が同じである必要があります。列によって、値が数値の列、文字の列となっており、同じ列に数値と文字列の両方の値があるといったことは許されません。この各列の決められたデータの型が「データ型」です。
表を作成するときには、各列のデータ型を定義しておく必要があります。データ型は、大きく分けると「文字列型」「数値型」「バイナリ型」「ビット型」「日付時刻型」の5つに分類することができます。
データ型の分類とDBMS製品の実装
タイプ | Oracle | MS-SQL | |
---|---|---|---|
文字列型 | 固定長 | CHAR | CHAR |
可変長 | VARCHAR2 | VARCHAR | |
固定長各国文字列 | NCHAR | NCHAR | |
可変長各国文字列 | NVARCHAR2 LONG | NVARCHAR TEXT NTEXT | |
数値型 | 整数 | INT | INT SMALLINT TINYINT |
真数(小数) | NUMBER | NUMERIC DECIMAL | |
浮動小数点 | FLOAT | FLOAT | |
倍精度浮動小数点 | - | REAL | |
高精度浮動小数点 | - | DOUBLE PRECISION | |
その他 | - | MONEY SMALLMANEY | |
バイナリ型 | 固定長バイナリ | - | BINARY |
可変長バイナリ | RAW LONG RAW CLOB BLOB | VARBINARY IMAGE | |
ビット型 | 固定長ビット | - | BIT |
可変長ビット | - | - | |
日付時刻型 | 日付 | - | - |
時刻 | - | - | |
日付時刻 | DATE | DATETIME SMALLDATETIME TIMESTAMP |
この表を見てもらうとわかるように、実際の実装は、各RDBMS製品によって、異なっている部分が多くあります。そのため、実際に表を作成する際には、各製品のマニュアルを参照するようにしてください。
関連リンク
次の章に進む
![](https://i0.wp.com/ichilv.com/wp-content/uploads/2020/02/③SQLの基本算術演算子.jpg?resize=160%2C90&ssl=1)
![](https://i0.wp.com/ichilv.com/wp-content/uploads/2020/05/SQL-GROUPBY.jpg?resize=160%2C90&ssl=1)
![](https://i0.wp.com/ichilv.com/wp-content/uploads/2020/05/NOTEPC.jpg?resize=160%2C90&ssl=1)
SQLの基礎知識トップページ
![](https://i0.wp.com/ichilv.com/wp-content/uploads/2020/03/article_scheme.jpg?resize=160%2C90&ssl=1)