SQLキーワードに大文字を使用する十分な理由はありますか?[閉まっている]


128

デフォルトは大文字のようですが、キーワードに大文字を使用する理由は本当にありますか?新しいストアドプロシージャのようなものを作成しようとするたびに、SQL Serverが提供するものと一致させようとしただけだったので、大文字を使い始めました。でも、Shiftボタンを押しっぱなしにしておく必要のある5番目の赤ちゃんの指がひどいので、大文字の使用をやめました。大文字に戻すべき理由は何ですか?

編集:回答をありがとう。私はCOBOLが王だった当時はまだプログラミングをしていなかったので、これに気づきませんでした。これから小文字のままにします。


9
CapsLockキーを試してください。:)
MusiGenesis 2008年

7
キーワードを書きたいときは引き続きCaps Lockをオンにし、キーワードを書いていないときはオフにして、Caps Lockを再びオンにする必要があります。面倒なだけです。
Hertanto Lie

17
CAPS wha ...ああ、あなたは私の3番目のCtrlキーを意味しますか?
Dave Sherohman、2008

2
IIRC、面白いのは、MSSQLでsp_プロシージャをチェックアウトすると、すべて小文字であるということです。
Benjol 2009

1
@Benjol、すべてではありませんが、sp_whoのように間違いなくたくさんあります。少なくとも同じ sprocで一貫性を保つように努めることは良い考えです。Microsoftは多くの「ケース」にはありません。プン、意図した。笑
ゴードンベル

回答:


107

それは単にスタイルの問題であり、おそらく編集者がコードのカラーリングを行わなかった時代に始まったのでしょう。

以前はすべて大文字を好んでいましたが、今はすべて小文字に傾いています。


6
+1キーワードにすべての小文字を使用したのは私だけではなかったと思います。
dance2die 2009

2
編集者がコードのカラーリングを行わなかった時代に逆戻りするという前提に立ちます。
Benjol 2009

10
多くのマシンが小文字をサポートしていなかった時代に遡ると確信しています。
Nate CK

1
カラーモニターの前の時代に戻ると思います;)
walrii

150

個人的に、私は私のSQLが私に怒鳴るのを好きではありません。ITは私にBASICまたはCOBOLのことを思い出させる。

そのため、データベースオブジェクト名がMixedCaseのT-SQLを小文字にした方がいいです。

読みやすく、リテラルとコメントが目立ちます。


8
それはとても好みの問題です。私の経験では、怒鳴りの量はそれほど多くありません。読みやすく、リテラルとコメントが目立つため、大文字のキーワードを使用します。
ジョナサンレフラー、

93
「私はSQLのように私の声で叫んではいけない」の+1
dance2die 2009

8
私が怒鳴るような言語は好きではありませんが、SQLで大文字を使うのは良い考えかどうかという疑問にはなりません。
bignose 2012

85

SQLは古いです。大文字が叫びます。見た目が変で見苦しい。

間違いなく真実ではありますが、大文字のキーワードが適切な慣例であるSQL言語に特有の理由に対処するものはありません。

多くの新しい言語とは異なり、SQLには多数のキーワードがあり、構文を精神的に解析するために、キーワードと識別子区別するリーダーの機能に依存しています。

あなたの質問への直接的な答えは、「SQLコード読者が、ほとんどの現代の言語ではそうではないのに、なぜSQLキーワードの読者が大文字のキーワードからそれほど多くの恩恵を受けるのか」に対する答えです。

  • キーワードを頭の中で維持することに依存することは、多くの現代の言語にとっては合理的ですが、SQLには不合理です。キーワードが多すぎ、バリエーションが多すぎます。

  • 句読点の手がかりに依存することは、ほとんどの最近の言語では合理的ですが、SQLには不合理です。キーワードの正確な順序に応じて構文が示されるため、数が少なすぎます。

  • キーワードを区別するために自動蛍光ペンに依存することは、通常の場合、現代の言語では妥当ですが、SQLで蛍光ペンが達成できることの現実を無視します。ほとんどの場合、SQLのすべてのバリアントのすべてのキーワードがカバーされているわけではありません。SQLは、蛍光ペンが役に立たないコンテキストで頻繁かつ定期的に読み取られます。

これらはSQLに固有の理由の一部であり、SQLコードのリーダーは、キーワードの大文字で標準化し、識別子の大文字以外の(つまり、小文字または混合)大文字のみを使用することで最適に機能します。

強調表示すると役立つことがあります。しかし、蛍光ペンがSQLを持っていることを知っている場合のみ。エディター/フォーマッターがSQLを処理していることを合理的に認識できない状況でSQLを使用することがよくあります。例には、インラインクエリ、プログラマーのドキュメント、および別の言語のコード内のテキスト文字列が含まれます。同じことは、PythonやC ++などの言語の場合ほど頻繁には当てはまりません。はい、それらのコードはこれらの場所に表示されることがありますが、SQLコードの場合とは異なります。

また、読者は通常、特定のSQL実装が使用するキーワードのサブセットのみを認識する蛍光ペンを使用します。あまり一般的でないキーワードの多くは、SQLバリアントをよく知っているキーワードを除いて、強調表示されません。そのため、読者は、蛍光ペンを使用している場合でも、適度に複雑なSQLステートメントでキーワードを区別するためのさらに直接的な方法が必要です。

したがって、読者は頻繁に(そしてそれがいつになるかを事前に知ることはできません)、SQLステートメント自体の内容からの支援が必要であり、ライターが何をキーワードとして意図していて、何を識別子として意図しているのかを知る必要があります。そのため、SQLコンテンツ自体リーダーのキーワード区別する必要があり、大文字のキーワードを使用することが、これを行う従来の便利な方法です。


この質問の理由はかなり良いと思います。あなたの答えはよく説明されていますが、それでも少し意見に基づいています。私はSQLをそれほど多くのキーワードを持っているようには感じません。とにかく、50のより頻繁なキーワードの後に​​、他の人をどれくらいの頻度で見ますか?それらを大文字で表示することはまだ重要ですか?頻度が少ないのでとにかく目立ちがちですね。もちろん、sql-serverとしてのこれらのトリッキーな「予約されていないキーワード」はthrow特別な扱いに値しますが、大文字は多くの間の単なる選択肢です。
フレデリック

1
@フレデリック、読者あまり知られていないキーワードをキーワードとしてマークする必要がないと主張しているようです。いいえ、そのような単語は、読者がそれらがキーワードであることを知ることを期待することができないので、正確に注目を集めません。そのため、他のキーワードと同じように区別する必要があります。
bignose 16

おそらく、長年のSQLプログラミングでSQLについてあまり無知なのかもしれませんが、今まで私が知らなかったキーワードをほとんどすぐに見つけてきたと信じています。それらを知っています。
フレデリック

33

ゴードンベルの例は正確ではありません。通常は、クエリ全体ではなく、キーワードのみが強調表示されます。彼の2番目の例は次のようになります。

SELECT name, id, xtype, uid, info, status, 
base_schema_ver, replinfo, parent_obj, crdate, 
ftcatid, schema_ver, stats_schema_ver, type, 
userstat, sysstat, indexdel, refdate, version, 
deltrig, instrig, updtrig, seltrig, category, cache
FROM sysobjects
WHERE category = 0
AND xtype IN ('U', 'P', 'FN', 'IF', 'TF')
ORDER BY 1

キーワードの方が目立つので、これははるかに読みやすいと思います。構文の強調表示を使用しても、大文字で表記されていない例を読むのははるかに困難です。

私の会社では、SQLのフォーマットをもう少し進めています。

SELECT      name, id, xtype, uid, info, status, 
            base_schema_ver, replinfo, parent_obj, crdate, 
            ftcatid, schema_ver, stats_schema_ver, type, 
            userstat, sysstat, indexdel, refdate, version, 
            deltrig, instrig, updtrig, seltrig, category, cache
FROM sysobjects
LEFT JOIN systhingies ON
    sysobjects.col1=systhingies.col2
WHERE category = 0
    AND xtype IN ('U', 'P', 'FN', 'IF', 'TF')
ORDER BY 1

1
ええ、それも私が好きな方法です。
David The Man

6
問題は...アドホックコマンドをプロンプトで実行するときに大文字を使用する場合、本番環境でアドホックコマンドを実行する必要がある場合に、それらを大文字にしない人よりも常に1/2速くなります。問題です。だから私はそれをすべて小文字で書いてから、チェックインする前に「美化」します。構文ハイライターの実行方法がわからないので読めないという人からの苦情があります。そして、私はあなたのことを知りませんが、アドホックコマンドを本番環境の速度で実行する必要がある年に3回は本当に重要なので、すべての小文字でテストクエリの作成を練習した稼働日の50%は本当に報われます。

7
そして、私の会社のデータベース(90年代に作成された)では、すべてのテーブル名、列、インデックス、ストアドプロシージャなどがすべて大文字になっているため、小文字のSQLキーワードを使用します。;)
Andreas

1
すごい1/2。私はそうは思わない!
Iharob Al Asimi

33

関連するエンコーディング(ASCII)がまだ提案されていないため、ほとんどの人が大文字の文字を超えてコード化する可能性がなかった時期がありました。6ビットのみが利用可能でした。SQLがより最近である一方で、小文字の小文字はまだプログラミングでは一般的ではありませんでした。

なお、一部の人は、請求 DATABASEが切迫感をGETと高速クエリを実行すること。


ですから、今日は正当な理由ではありません。
bignose

1
@BIGNOSE:いいえ、絶対にありません!
Lukas Eder

1
これが最良の答えだと思います。悲しいことに、私はSQLキーワードで小文字が嫌いで、小文字を好きになる方法を見つけることができません。
Iharob Al Asimi

@IharobAlAsimiはい、あなたはクレイジーです。なぜ小文字で英語を書くのに、構造化された英語はほとんどないのですか?
Lukas Eder

24

私たちが読んだテキストの文字の10%未満が大文字です。したがって、私たちの脳は大文字よりも小文字を認識することに熱心です。研究によると、大文字のテキストを読むのに時間がかかります。以下は一例です。

http://www.guardian.co.uk/media/mind-your-language/2010/oct/04/new-york-street-signs-capitals

上記の例では、1つまたは2つの単語だけを話している場合でも、違いが生じることを強調しています。


5
小説をすべて大文字で読むことについて話しているのではありません。テキストの一部にすぎない少数のキーワードについて話している。
ケーシー

6
あなたは要点を逃しています。私たちが読んでいる単語の数ではなく、私たちの脳がすばやく行うように訓練されたものについてです。たとえば道路標識は確かに小説ではありませんが、同じ結論に達しています。読むことを学ぶとき、私たちは各文字を読み始めますが、最終的に私たちの脳は単語をパターンのグループとして認識し始めます。これらのパターンに一貫性があるとより良いです。多くの場合、大文字は小文字とは異なるパターンであり、単なる大きなバージョンではありません。
AaronLS 2016

1
しかし、キーワードは非常に少なく、何度も何度も表示されます。したがって、SQLを任意の時間使用しているすべての人にとって、認識は同等に高速でなければなりません。
ケーシー

3
確かに、それは間違いなく難しいものではありません。しかし、非常に一般的なキーワードはわずかです。そうではない大きなセットがあり、多くの場合、人々はこの大文字小文字の練習を組み込み関数であるが必ずしも構文言語キーワードではないものに拡張します。実際には、クエリの主要なセクションの開始を示すSELECT / WHERE / GROUP BYのような、ほんの少しのキーワードを実際に上に配置しています。しかし、そのようなのような組み込み関数など他のすべてのキーワードは、castrank、私は小文字。
AaronLS 2016

19

これは、SQLが非常に古い言語(1974)であるため、考案されたとき、ほとんどのキーボードには小文字がなかったためです。言語文書は当時のテクノロジーを反映したものでした。

調査によると、すべてのCAPSは読みにくいため、米国連邦道路管理局は、以下のように、統一交通制御装置に関するマニュアルで大文字と小文字が混在する標識の使用を義務付けています。

従来の道路案内標識の場所、道路、高速道路の名前のレタリングは、小文字と最初の大文字の組み合わせでなければなりません。

ニューヨークポストも出版した:

調査により、すべて大文字の標識を読むことは困難であることが示されています。道路から離れて見つめるために費やされたこれらの追加のミリ秒は、特に高齢のドライバーの間で事故の可能性を高めることが示されています。

大文字を使用する正当な理由はなく、使用しない正当な理由もあります。

SQLキーワードには大文字を使用します。私はこの日と年齢で読むこととばかげたことは難しいと思います。

SQL言語は、大文字と小文字を区別しないものとして定義されています。そのシフトキーから指を離してください!


3
他の回答で提示された正当な理由の普及は、「大文字を使用する正当な理由はない」というあなたの主張に反するものだと思います。
bignose 2012

7
@bignoseああ理由があります...私は彼らが良いものだとは思いません。私の経験では、SQLプログラマーが若いほど、大文字を使用する可能性が高くなります。逆に、大文字を使用する有能なSQLコーダーに出会ったことはありません。
ボヘミアン

3
全く同感であります。他の「答え」の普及はそれらを正しくするのではなく、単に流行させるだけです。すべての大文字のケースは、キーボードまたは文字表現にケースがなかったWHEMコンピューターからの二日酔いです。今日はばかばかしいです。
Charles Bretana、2012

うん、CAPS LOCKキーを使い古したり、Shiftキーを不必要に押したまま指を締め付けたりする。
ゴードンベル

9
ここで循環推論のにおいがします。大文字と小文字を区別するキーワードを支持する理由が提示されている場合は、それを正当な理由として却下します。理由がSQLコーダーによって提示されたものの、自分の立場に同意しない場合は、有能な SQLコーダーではないとしてそれらを却下します。これに基づいて、これを無効な議論として却下できると思います。
bignose 2014

8

大文字はキーワードの可視性を向上させますが、コードの強調表示とインデントで補うことができます。
クエリエディターや他のツールはt-sqlコードの編集に不思議であり、小指を拷問する必要がないため、小文字を使用しています。


2
クエリエディターとt-sqlは、誰でもSQLコードを読み取る唯一の場所ですか?どうして知っていますか?
bignose 2013

8

モンキーは、サルが私のために行います。パターンマッチング-私が見たようにそれを行うと、句の構造が精神的にもっと簡単に整列します。


7

大文字は読みにくくなります。すべての単語の輪郭は箱のような形をしています。ディセンダーやアセンダーはありません。小文字のFTW!


3
あなたが与える理由は、大文字が他のキーワードと区別するのに役立つという立場を支持します。
bignose 2012

5
@bignose SQLが人間の言語のように読める場合、なぜ大文字が必要なのですか?動詞や前置詞を人間の言語で大文字にする必要はありません。すべての文がこのように見えた場合を想像してみてください。私はそれが通常の執筆よりも読みにくいと感じます。これらの2つの文で大文字の単語を使用すると、脳が停止し、他の文よりもゆっくりと発声するため、読解が遅くなり、流れが不自然になります。
Chris Middleton

1
人間の言語は構文のあいまいさを非常に許容します。コンピュータ言語はそうではありません、それがそれらのあいまいさを最小にする必要がある理由です。SQL構文はこれには役立ちません。そのため、私たち人間は利用可能なツールを使用する必要があります。SQL構文には多くがないため、キーワードを大文字にする規則を進化させました。
bignose 2015

5

私はそれがより読みやすいと思います。各句の先頭に改行を入れたり、句の間をインデントしたりする場合も同様です。


2

フォーマット製品を試してください(私はRed GateのSQL Prompt / SQL Refactorを使用しています)。大文字の使用方法を設定でき、コードは常に一貫した形式になります。小指を休ませて、コンピューターに任せてください。


1
このアドバイスは、SQLが読み取られている多くのコンテキストを無視します。他の誰かがすでに書いたコードを読むのは全く実用的ではありません。正しくフォーマットされていないSQLを読みやすくするためだけにこのようなツールが必要な場合、これは、この質問で取り上げられているような規則を支持する議論です。
bignose 2013

しかし、組織全体で標準が必要な場合は、このアプローチが適しています。規格が必要な場合、意見は関係ありません
Trubs '10

2

大文字を使い続ける理由の1つは、あなた(または他の誰か)がメモ帳などでコードを表示しているときに読みやすくなることです。つまり、「キーワード」とテーブル名、SP、UDFなどを簡単に区別できます。


1

適合のための適合以外、いいえ。これは非常に主観的なトピックですが、すべてのSQLで大/小文字混合を使用することを好みます。SQLの方がはるかに読みやすく、キーワードがすべて色分けされている最新のIDEでは何も失われません。


ここに他の多くの答えが理由を示しているので、私はあなたの答えが正しいとは思いません:「適合のために適合以外の理由」があります
bignose 2012

...それでは何ですか?率直に言って、常に新しい情報にオープンですが、私は何も知りませんでした。
Charles Bretana、

私はすでに多くの理由を述べてきたので、今あなたは気づいています。
bignose 2016年

2
これらは正当な理由ではなく、個人的な好みです。自分の個人的な好みに応じて自由に行ってください。ただし、好みをルールまたはベストプラクティスとして特徴付けないでください。
Charles Bretana、2016年

1

Microsoft SQL Server Management Studioのインテリセンス/オートコンプリートでは、予約語に大文字または小文字のいずれかを使用できますが、MAX()、SUM()などの大文字の関数呼び出しを使用できます。

そうであっても、パーサーはまだmax()およびsum()の小文字バージョンを処理できます。

これは、処刑の性質に関して両義性を意味するため、単に個人的な好みの問題です。


4
はい、SSMSの[オプション->テキストエディタ-> Transact-SQL-> Intellisense]では、必要に応じてデフォルトを[小文字]に設定できます。
ゴードンベル

0

私はすべて大文字で書かれたものはすべて嫌いです(そしてすべての大文字をさらに入力するのが嫌いです)が、コミュニティに反対するように自分を説得することはできませんでした。いつものように、Vimとそれに関連するパッケージは、非常に多くの問題の解決策です。

http://www.vim.org/scripts/script.php?script_id=305

通常どおり入力するだけで、入力時にキーワードが自動的に大文字になります。あいまいなSQLの呪文をすべて使用したわけではありませんが、まだ失敗していません。


-2

ほとんどのmySQLコードをPHP内から呼び出し、すべてのPHP編集をvim内で行います(この場合はVIMと思います;-)。これで、PHP内のmySQLコードを強調するプラグインが確実に存在するようになりましたが、それを見つけられなかったので、探すために時間をかける必要はありません。したがって、私はすべてを大文字にすることを好みます。私はこれを見つけます:

if ( !$bla ) 
{
   echo "select something from something where something";
}

if ( !$beepboop ) 
{
   echo "create table if not exists loremIpsum;
}

$query = "
CREATE TABLE IF NOT EXISTS HISTORY
(
   ID INT NOT NULL AUTO_INCREMENT,
   INSERTDATE TIMESTAMP DEFAULT NOW(),
   ALTERDATE TIMESTAMP(8) DEFAULT NOW(),
   DELETEDATE TIMESTAMP(8),
   ALTERCOUNT INT DEFAULT 0,
   SELECTCOUNT INT DEFAULT 0,

   PRIMARY KEY(ID),
)ENGINE=InnoDB
";

mysqlQuery( $query, $con );

これよりもはるかに優れたPHPとSQLの区別に役立ちます。

if ( !$bla ) 
{
   echo "select something from something where something";
}

if ( !$beepboop ) 
{
   echo "create table if not exists loremIpsum;
}

$query = "
create table if not exists history
(
   id int not null auto_increment,
   insertdate timestamp default now(),
   alterdate timestamp(8) default now(),
   deletedate timestamp(8),
   altercount int default 0,
   selectcount int default 0,

   primary key(id),
)engine=InnoDB
";

mysqlQuery( $query, $con );

また、何らかの理由で、私はallcapsとラクダのケースを混ぜるのが嫌いです:

CREATE TABLE IF NOT EXISTS history
(
   ID INT NOT NULL AUTO_INCREMENT,
   insertDate TIMESTAMP DEFAULT NOW(),
   alterDate TIMESTAMP(8) DEFAULT NOW(),
   deleteDate TIMESTAMP(8),
   alterCount INT DEFAULT 0,
   selectCount INT DEFAULT 0,

   PRIMARY KEY(ID),
)ENGINE=InnoDB

それはID私をいらいらさせます。代わりにすべきidですか?またはiD


3
いいえ、いいえ、いいえ。キャメルケースは変数名用であり、列名用ではありません。列名に適切なケースを使用... InsertDate、AlterDate、...
Gordon Bell

1
SQL標準では、実装は識別子の大文字と小文字を無視する必要があります(大文字に変換されます)。したがって、コードは識別子の大文字と小文字の違いに依存すべきではありません。これを行う従来の方法は識別子を作成することall_lower_caseです。
bignose 2013

3
@bignose wpmが下がるので、アンダースコアの大ファンではありません
puk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.