2005年05月28日

SQL の読み方

SQL をシークェルと読む人もいるようですが、エスキューエルですよね?

70 年代、IBM が System R に実装した RDB 言語は Structured English QUEry Language、SEQUEL です。SEQUEL はスペルのママ、シークェルと読むものでしょう。
ところが SEQUEL は他社の登録商標であったため、その後(本来 SEQUEL2 となるはずだったものに)SQL、Structured Query Language との名が付けられました。S の後に伸ばすのも、Q と L の間に 「ウェ」の音を補うのも無理があるので、これはエスキューエルと読むのが自然です。そして 80 年代以降、この SQL が、ANSI や ISO、JIS において標準となっていきます。

すると、SEQUEL と SQL の間には、
・IBM の System R の実装依存か、ポータブルか
・標準化されていないか、いるか
といった違いがあるわけです。

現在、私たちが SQL と呼んでいるものは後者の方なので、やはりエスキューエルと読むのが正しいように思えます。

用語辞典の類には両方の読み方が併記してあったり、モノによってはシークェルが本流でシロートさんはエスキューエルと読む、なんて解説をしているところもありました。

所詮は読み方なので、そう読む人が多ければ「そう読みます」でもいいんですが、シークェルという読みを説明しているところでも、こういった経緯に触れていないのには違和感を感じました。
posted by 市井賢児 at 2005年05月28日 19:24
| Comment(0) | TrackBack(1) | SQL


2005年03月17日

SQL の書き方によってインデックスが利用されない

インデックスを張ってあるカラムを where 句で指定すれば、無条件でインデックスが利用できるわけではありません。

その例を挙げていきます。
続きを読む
posted by 市井賢児 at 2005年03月17日 02:11
| Comment(3) | TrackBack(0) | SQL


2005年02月25日

ゲンバで使ったSQL:縦並びデータを範囲集計して横並びに変換する

前回のバリエーション。

部署経費
3営業48
12研究開発260
5営業30
3岩手工場12
10広報125

というように続くテーブル(月ごと)を

部署第1四半期第2四半期第3四半期第4四半期
営業715528628476
研究開発127913681572983

というように続く部署ごとの四半期推移にするなら、
insert into 変換後
select 部署
sum( decode( 月,
least( greatest( 月, 1 ), 3 ),
経費, 0
) ) as 第1四半期,
sum( decode( 月,
least( greatest( 月, 4 ), 6 ),
経費, 0
) ) as 第2四半期,
sum( decode( 月,
least( greatest( 月, 7 ), 9 ),
経費, 0
) ) as 第3四半期,
sum( decode( 月,
least( greatest( 月,10 ),12 ),
経費, 0
) ) as 第4四半期,
from 変換前
group by 部署

縦並び状態で sum() をかけた一時テーブルを作る手もあるかも知れないけれど、まぁ状況により使い分けるってことで。
サンプルは不自然だけど、あくまでSQLのロジックを伝えるのが目的なんで勘弁して下さい。
posted by 市井賢児 at 2005年02月25日 02:22
| Comment(0) | TrackBack(0) | SQL


2005年02月20日

ゲンバで使ったSQL:レコードの存在だけ確認

ゲンバでプログラミングをしていて、開発途上だとテーブルが空になっていないか、あるいはある条件に当てはまるデータがあるか知りたい時があります。
単純に Select すればいいんですが、もし存在していたらとんでもない件数返ってくるかも知れない…なんて時は rownum を使って返ってくる行数を指定します。
select 従業員番号
from 従業員表
where 部署 = つくば工場
and rownum < 2

こうすると2未満、すなわち1行だけ返ってきます。
posted by 市井賢児 at 2005年02月20日 05:09
| Comment(0) | TrackBack(0) | SQL


2005年02月13日

ゲンバで使ったSQL:縦並びデータを横並びに変換する

つまりこういう事。
氏名科目点数
佐藤英語60
鈴木数学70
鈴木英語40
佐藤国語90
佐藤数学70


氏名英語数学国語
佐藤607090
鈴木4070

にするには、
insert into 変換後
select 氏名 as 氏名,
sum(decode( 科目, 英語, 点数, 0)) as 英語,
sum(decode( 科目, 数学, 点数, 0)) as 数学,
sum(decode( 科目, 国語, 点数, 0)) as 国語
from 変換前
group by 氏名

システム間連携なんか、こんな感じでレイアウト変換することもあるんじゃないかな。
posted by 市井賢児 at 2005年02月13日 22:35
| Comment(0) | TrackBack(0) | SQL


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。