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

プログラミングでは「”(ダブルクォーテーション)」や「’(シングルクォーテーション)」を使うことが多々ありますが、皆さんはこの違いについて答えることが出来ますか?

SQLでは明確な違いがあるものの、MySQLから学習に入った方の中には恐らく違いが判らない方もいらっしゃると思います(理由は後述します)。

そこで今回は、二つのクォーテーションの違いについての具体的な説明も踏まえて解説してみたいと思います。

MySQLから別のSQLにシフトして学習される方は特に、この標準SQLの仕様をしっかりと学んでみてください。

クォーテーションの違いについて

先ほども触れましたが、クォーテーションには「シングルクォーテーション」と「ダブルクォーテーション」の二つが存在します。

ほぼ全てのDBMS(Database Management System)では統一された仕様があり明確な違いがありますが、MySQLなど一部のSQLでは独自の仕様となっています。

標準SQLの仕様では次のように定義されています。

標準SQLの仕様
  • ”(シングルクォーテーション):文字列定数として扱う
  • “”(ダブルクォーテーション):カラム名として扱う

ではMySQLではどのようになっているかと言うと、次のように定義されています。

MySQLの仕様
  • ”(シングルクォーテーション):文字列定数として扱う
  • “”(ダブルクォーテーション):文字列定数として扱う
  • “(バッククォート):カラム名として扱う

MySQLは世界中で最も普及しているデータベースの一つですが、ここまで発展した理由としてルール付けが柔軟と言うこともその要因の一つに挙がります。

ただ逆に、その柔軟なルール付けがあだとなる事もあります。

今回のクォーテーションについての違いなども厳格にルール付けされていない為、初めて学習する方がMySQLから入ってしまうとクォーテーションの理解度が曖昧なままとなる可能性があるため注意しましょう。

SQLでの使い分け

それではシングルクォーテーションとダブルクォーテーションの具体的な使い分けについて見ていきましょう。

基本的にシングルクォーテーションで括る

まずシングルクォーテーションの基本的な使い方ですが、先ほども解説した通り文字列に使用します。

数字には使いません。

例を挙げてみましょう。

次のコードを見てください。

  1. // 数値として認識させる
  2. SELECT 123 + 456;
  3. GO
  4.  
  5. SUM
  6. -----------
  7. 579
  8.  
  9. // 文字列として認識させる
  10. SELECT '123 + 456';
  11. GO
  12.  
  13. STRING
  14. ---------
  15. 123 + 456

これは簡単なテストコードですが、一つ目の「SELECT 123 + 456;」はシングルクォーテーションで括っていない為、数字として認識されていることがわかります。

一方で二つ目のコードは、123 + 456 をシングルクォーテーションで括っているため、文字列として認識されていることがわかります。

ダブルクォーテーションは基本的には特殊環境下で使用する

ダブルクォーテーションはちょっと特殊な使い方となります。

予約語などテーブルやカラム名には使えないものが存在しますが、そういった予約語などを”どうしても使いたい”場合に使用します。

この時、Oracle、PostgreSQLではダブルクォーテーション、SQL Serverではスクエアブラケット([])で括ることでエラーを回避することが出来ます。

下のコードを見てください。

  1. // スクエアブラケット無し
  2. CREATE TABLE DATABASE(
  3. DATABASE_ID INT IDENTITY(1,1),
  4. DATABASE_Name VARCHAR(50)
  5. );
  6. SELECT * FROM DATABASE;
  7. GO
  8. メッセージ 156、レベル 15、状態 1、サーバー DESKTOP-T3J7G2K\SQLEXPRESS、行 1
  9. キーワード 'DATABASE' 付近に不適切な構文があります。
  10. メッセージ 156、レベル 15、状態 1、サーバー DESKTOP-T3J7G2K\SQLEXPRESS、行 5
  11. キーワード 'DATABASE' 付近に不適切な構文があります。
  12.  
  13. // スクエアブラケット有り
  14. CREATE TABLE [DATABASE](
  15. DATABASE_ID INT IDENTITY(1,1),
  16. DATABASE_Name VARCHAR(50)
  17. );
  18. SELECT * FROM [DATABASE];
  19. GO
  20. DATABASE_ID DATABASE_Name
  21. ----------- --------------------
  22. (0 行処理されました)

一つ目のコードはスクエアブラケット無しの状態でテーブルを作成しようとしていますがエラーメッセージが表示され登録されていないことが確認できます。

二つ目のコードはテーブル名をスクエアブラケットで括っているため、予約語であるはずの「DATABASE」という名前でもテーブル登録が出来ています。

クォーテーションをエスケープする方法

次はクォーテーションを使う上で「文字列として使いたい場合」についての解説です。

例えば「Today’s NEWS」というワードにはシングルクォーテーションが含まれていますが、これをそのまま文字列としてクォーテーションで括ってもエラーとなります。

次のコードで確認してみましょう。

  1. // コマンドプロンプトで直打ちした場合
  2. 1> SELECT 'Today's NEWS';
  3. 2~ GO
  4. 3~
  5.  
  6. // SSMS(SQL Server Management Studio)を使用した場合
  7. SELECT 'Today's NEWS';
  8.  
  9. メッセージ 102、レベル 15、状態 1、行 1
  10. 'NEWS' 付近に不適切な構文があります。
  11. メッセージ 105、レベル 15、状態 1、行 1
  12. 文字列 ';
  13. ' の後で引用符が閉じていません。

まずコマンドプロンプトで直打ちをした場合にはクエリ実行をしようとしても実行できません。

これはシングルクォーテーションを閉じていないと認識されるため、GOが反応しない為に起きる現象です。

次にSSMS(SQL Server Management Studio)を使用してクエリを実行した場合ですが、これもエラーメッセージが返ってきていることが確認できます。

ではどうすれば良いでしょうか?

こういった場合には次のように、文字列にしたいクォーテーションを2連続で使用します。

  1. 1> SELECT 'Today''s NEWS';
  2. 2> GO
  3. ------------
  4. Today's NEWS
  5.  
  6. (1 行処理されました)

今度は文字列としてきちんと認識されていることが確認できます。

別々のクォーテーションで括る

先ほどのエスケープする方法についての派生となりますが、別々のクォーテーションを同時に使う場合についての補足説明となります。

例えば、ダブルクォーテーション内でシングルクォーテーションを使う、または逆にシングルクォーテーション内でダブルクォーテーションを使う場合には2重にする必要はありません。

次のコードを見てください。

  1. // シングルクォーテーションで括ってある中でダブルクォーテーションを使う場合
  2. 1> SELECT 'This man''s name is "Ben"';
  3. 2> GO
  4. ------------------------
  5. This man's name is "Ben"
  6.  
  7. (1 行処理されました)
  8.  
  9. // ダブルクォーテーションで括ってある中でシングルクォーテーションを使う場合
  10. 1> SELECT "This man's name is 'Ben'";
  11. 2> GO
  12. ------------------------
  13. This man's name is 'Ben'
  14.  
  15. (1 行処理されました)

どちらも別のクォーテーションを使用する場合には2重にする必要なくきちんと実行できていることが確認できます。

まとめ

いかがでしたか?

今回はクォーテーションについての具体例を踏まえた解説をしてみましたが、きちんと理解できていましたか?

DBMSの中にはこういった違いを持ったものも多く、新たに別のDBMSを使用する場合にはこういった知識がないと思わぬエラーに戸惑うことがあるかもしれません。

この記事でしっかりと知識を身に着けて、正しい使い方が出来るよう心がけてみてください。

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

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

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

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

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

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

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

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

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

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

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