Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLでは、文字列をシングルクォーテーションで囲んだ場合とダブルクォーテーションで囲んだ場合とでは、その意味が違います。今回は、この違いについて解説します。

SQLの文字列リテラルの基本

プログラムのソースコードにおいて、数値や文字列を変数で使う場合、それに代入する数値や文字列のことをリテラルと言います。そして、それが文字列の場合、文字列リテラルと呼びます。なお、このような文字列リテラルはSQLでも使います。まずは、SQLにおける文字列リテラルの基本を解説します。

SQLにおける文字列の使い方

SQLとはStructured Query Language の略で、そのまま翻訳すると構造化問い合わせ言語という意味です。そして、SQLの特徴とは、複雑な処理でもプログラミング言語よりも単純な文法で記述できる点です。ただし、その分、SQLの文法を意識して書かないと、正しく動作しないSQLが出来上がってしまいます。

SQLで使われる文字列は、SELECTやINSERT、UPDATEなどの機能を提供するキーワードと、データベース名および、そのデータベースに登録された列名といった識別子、そして、データベースに登録する文字列、または、それと比較するための文字列に分けられます。

なお、この中で、データベースに登録する文字列、または、それと比較するための文字列は、シングルクォーテーションで囲みます。ダブルクォーテーションは意味が違うので注意してください。

SQLの文字列リテラルはシングルクォーテーションで囲む

先ほど説明したように、変数として使う文字列をSQLで記述するためには、シングルクォーテーションで囲みます。そして、具体的な書き方は次のとおりです。

SQLの文字列リテラルの書き方
シングルクォーテーション「,」で囲む
‘文字列’

文字列リテラルを使ったSQLの例

insert into table_one values( 'String' );

SQLが使えるデータベース管理ソフトで文字列リテラルを使う場合は、シングルクォーテーションで囲むのが正しい使い方です。なお、データベース管理ソフトの中には、SQLiteのようにダブルクォーテーションで囲んでも文字列リテラルとして扱うものもあります。

ダブルクォーテーションはデータベース管理ソフトで違う

プログラム言語では、文字列リテラルを使う場合、ダブルクォーテーションで囲む使い方が可能です。また、SQLliteなどのデータベース管理ソフトの中では、ダブルクォーテーションで囲んだ文字列リテラルが使えます。中には、SQLでもダブルクォーテーションが使えると考える方もいるかもしれません。

しかし、SQLにおけるダブルクォーテーションは、文字列リテラルの定義に使う識別子ではありません。SQLliteなど使えるデータベース管理ソフトもありますが、他に移植する際にエラーになるので、ダブルクォーテーションを文字列リテラルの定義には使わないようにしてください。

SQLのダブルクォーテーションの使い方

先ほど、ダブルクォーテーションは、文字列リテラルの定義には使えない、と解説しました。では、どのように使えば良いのでしょうか。先ほど、SQLの文法上、キーワード、データベース名や列名などの識別子、文字列リテラルの3種類の文字列を扱うと解説しました。通常ダブルクォーテーションは、この中のデータベース名や列名に使います。次から、SQLのダブルクォーテーションの使い方について解説します。

識別子は大文字が基本

SQLで使われるデータベース名や列名の識別子は、大文字と小文字を区別しません。また、識別子に使えるのは、文字と数字とアンダースコア、ドル記号に限られており、通常は、ハイフン「-」やプラス「+」などの記号が使えません。

そのため、下記のようにデータベース名を大文字で書いても、小文字で書いても同じデータベースが参照されます。

データベース名を大文字で書いた例

SELECT * FROM MY_TABLE;

データベース名を小文字で書いた例

SELECT * FROM my_table;

この2つの例は同じ意味です。

識別子で小文字を使う場合はダブルクォーテーションで囲む

SQLのデータベース名や列名の識別子として、小文字が全く使えない訳ではありません。また、ハイフン「-」やプラス「+」などの記号を含む識別子をどうしても使いたいケースもあるでしょう。そのような場合に使うのでダブルクォーテーションです。

識別子をダブルクォーテーションで囲むことで、もし、小文字を使っている場合は、大文字に変換されません。また、ハイフン「-」やプラス「+」といった記号を含む文字列も利用できます。

ダブルクォーテーションで囲んだ識別子の例

select * from "MyTable-1";

テーブル名「MyTable」は、ダブルクォーテーションで囲んでいない場合は「MYTABLE」として扱われる。また、「-1」はそのままでは扱えない。しかし、ダブルクォーテーションで囲むことで、「MyTable-1」というテーブル名が扱えます。

文字列をダブルクォーテーションで囲んだらどうなるか

もし、SQLで文字列リテラルを使う場合、シングルクォーテーションで囲む必要があるOracleやPostgreSQLといったデータベース管理ソフトで、ダブルクォーテーションを使った場合、それは識別子として処理されます。そのため、insert文などでデータベースに文字列を入力するケースでダブルクォーテーションが使われていると、そのような識別子は無い、というエラーになります。

PostgreSQLで文字列リテラルをダブルクォーテーションで囲んだSQLの実行例

create table table_one( id int, name text );
insert into table_one values(1, "Suzuki");
insert into table_one values(2, "Tanaka");
insert into table_one values(3, "Yamamoto");
insert into table_one values(4, "Itou");

実行結果

CREATE TABLE
ERROR:  列"Suzuki"は存在しません
行 1: insert into table_one values(1, "Suzuki");
                                      ^
ERROR:  列"Tanaka"は存在しません
行 1: insert into table_one values(2, "Tanaka");
                                      ^
ERROR:  列"Yamamoto"は存在しません
行 1: insert into table_one values(3, "Yamamoto");
                                      ^
ERROR:  列"Itou"は存在しません
行 1: insert into table_one values(4, "Itou");

SQLiteは文字列でもダブルクォーテーションが使える

これまで、文字列リテラルを使うにはシングルクォーテーションを使い、特殊な列を指定する場合にダブルクォーテーションが使えると解説しました。しかし、SQLiteは、文字列を記述すべき位置に限り、文字列リテラルの指定にダブルクォーテーションが使用できます。

そのためSQLiteでSQLを習った方は、文字列リテラルをダブルクォーテーションで指定できると誤解するかもしれません。しかし、OracleやMySQLなどの他のデータベース管理ソフトでは使えないので注意が必要です。

まとめ

プログラミングを経験した方の中には、文字列を定義するためにダブルクォーテーションを使うのに慣れている方がいるかもしれません。しかし、今回解説したようにSQLでは、文字列の指定にシングルクォーテーションを使うのが基本です。ダブルクォーテーションを使うと列名として扱われ、エラーとなるので注意しましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。