150

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

編集:答えてくれてありがとう。COBOLが王様だった頃はまだプログラミングをしていなかったので、そんなことは知りませんでした。これからは小文字でいきます。

4

17 に答える 17

173

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

そのため、データベース オブジェクト名が MixedCase の T-SQL 小文字を好みます。

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

于 2008-11-15T05:13:42.343 に答える
124

これは単なるスタイルの問題であり、おそらくエディターがコードのカラーリングを行っていなかった時代に由来します。

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

于 2008-11-15T02:25:24.927 に答える
106

SQL は古いです。大文字は叫んでいます。それは奇妙に見え、おそらく醜いです。

間違いなく正しいとは言え、大文字のキーワードが適切な規則であるというSQL 言語特有の理由に対処するものはありません。

多くの新しい言語とは異なり、SQL には多数のキーワードがあり、頭の中で構文を解析するためにキーワードと識別子を区別する読者の能力に依存しています。

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

  • キーワードを頭に入れておくことに依存することは、多くの現代の言語では合理的ですが、SQL では不合理です。キーワードが多すぎ、バリアントが多すぎます。

  • 句読点の手がかりに依存することは、ほとんどの最新の言語では合理的ですが、SQL では不合理です。構文を示すキーワードの正確な順序に依存する代わりに、数が少なすぎます。

  • キーワードを区別するために自動ハイライターに依存することは、通常、最新の言語では合理的ですが、ハイライターが SQL に対して達成できることの現実を無視しています。ほとんどの場合、SQL のすべてのバリアントのすべてのキーワードを網羅しているわけではありません。それにもかかわらず、SQL は、蛍光ペンが役に立たないコンテキストで頻繁かつ日常的に読み取られます。

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

ハイライトが役立つ場合もあります。ただし、ハイライターが SQL があることを認識している場合に限ります。また、SQL を扱っていることをエディター/フォーマッターが合理的に認識できないコンテキストで SQL を使用することがよくあります。例には、インライン クエリ、プログラマ ドキュメント、および別の言語のコード内のテキスト文字列が含まれます。Python や C++ などの言語では、同じことがほとんど当てはまりません。はい、それらのコードは時々それらの場所に表示されますが、SQL コードのように日常的に行われるわけではありません。

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

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

于 2012-08-14T01:53:59.067 に答える
39

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

一部の人々は、データベースが緊急性を感じ、クエリをより速く実行すると主張していることに注意してください

于 2016-02-28T15:55:51.157 に答える
36

Gordon Bell の例は正確には正しくありません。通常、クエリ全体ではなく、キーワードのみが強調表示されます。彼の 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
于 2008-11-16T08:22:11.103 に答える
25

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

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

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

于 2011-01-21T19:52:01.413 に答える
24

SQL は非常に古い言語 ( 1974 年) であるため、SQL が考案されたとき、ほとんどのキーボードには小文字がありませんでした。言語ドキュメンテーションは、当時の技術を反映しているだけです。

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

従来の道路案内標識の地名、街路、高速道路の名称は、小文字と頭文字の大文字の組み合わせとする。

The New York Post も次のように掲載しています。

研究によると、すべて大文字の標識を読むのは難しいことがわかっており、特に高齢のドライバーの間で、道路から目をそらして過ごす余分なミリ秒が事故の可能性を高めることが示されています.

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

私は個人的に、SQL キーワードに大文字を使用することを嫌います。今の時代、読むのが難しくてばかげていると思います。

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

于 2012-08-14T03:02:31.723 に答える
9

大文字を使用するとキーワードの可視性が向上しますが、コードの強調表示とインデントで補うことができます。
小文字を使用するのは、クエリ エディターやその他のツールが t-sql コードの編集に驚異的な効果を発揮し、小指を苦しめる必要がないからです。

于 2008-11-15T02:29:30.693 に答える
9

モンキー・シー、モンキー・ドゥ・フォー・ミー。パターン マッチング - 私がこれまで見てきた方法で行えば、文節の構造が精神的により簡単に整列します。

于 2008-11-15T02:45:44.373 に答える
7

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

于 2008-12-09T07:11:15.560 に答える
5

より読みやすいと思います。各句の先頭に改行を入れ、句間をインデントするのと同じです。

于 2008-11-15T02:52:15.187 に答える
2

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

于 2008-11-15T03:21:45.017 に答える
2

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

于 2008-11-15T04:14:12.243 に答える
1

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

于 2008-11-15T04:04:23.170 に答える
-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 );

また、何らかの理由で、次のようにすべて大文字とキャメルケースを混在させるのは嫌いです。

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

于 2012-04-23T11:08:55.717 に答える