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 と呼んでいるものは後者の方なので、やはりエスキューエルと読むのが正しいように思えます。
用語辞典の類には両方の読み方が併記してあったり、モノによってはシークェルが本流でシロートさんはエスキューエルと読む、なんて解説をしているところもありました。
所詮は読み方なので、そう読む人が多ければ「そう読みます」でもいいんですが、シークェルという読みを説明しているところでも、こういった経緯に触れていないのには違和感を感じました。
2005年05月28日
2005年03月17日
2005年02月25日
ゲンバで使ったSQL:縦並びデータを範囲集計して横並びに変換する
前回のバリエーション。
というように続くテーブル(月ごと)を
というように続く部署ごとの四半期推移にするなら、
縦並び状態で sum() をかけた一時テーブルを作る手もあるかも知れないけれど、まぁ状況により使い分けるってことで。
サンプルは不自然だけど、あくまでSQLのロジックを伝えるのが目的なんで勘弁して下さい。
| 月 | 部署 | 経費 |
|---|---|---|
| 3 | 営業 | 48 |
| 12 | 研究開発 | 260 |
| 5 | 営業 | 30 |
| 3 | 岩手工場 | 12 |
| 10 | 広報 | 125 |
というように続くテーブル(月ごと)を
| 部署 | 第1四半期 | 第2四半期 | 第3四半期 | 第4四半期 |
|---|---|---|---|---|
| 営業 | 715 | 528 | 628 | 476 |
| 研究開発 | 1279 | 1368 | 1572 | 983 |
というように続く部署ごとの四半期推移にするなら、
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のロジックを伝えるのが目的なんで勘弁して下さい。
2005年02月20日
ゲンバで使ったSQL:レコードの存在だけ確認
ゲンバでプログラミングをしていて、開発途上だとテーブルが空になっていないか、あるいはある条件に当てはまるデータがあるか知りたい時があります。
単純に Select すればいいんですが、もし存在していたらとんでもない件数返ってくるかも知れない…なんて時は rownum を使って返ってくる行数を指定します。
こうすると2未満、すなわち1行だけ返ってきます。
単純に Select すればいいんですが、もし存在していたらとんでもない件数返ってくるかも知れない…なんて時は rownum を使って返ってくる行数を指定します。
select 従業員番号
from 従業員表
where 部署 = つくば工場
and rownum < 2
こうすると2未満、すなわち1行だけ返ってきます。
2005年02月13日
ゲンバで使ったSQL:縦並びデータを横並びに変換する
つまりこういう事。
を
にするには、
システム間連携なんか、こんな感じでレイアウト変換することもあるんじゃないかな。
| 氏名 | 科目 | 点数 |
|---|---|---|
| 佐藤 | 英語 | 60 |
| 鈴木 | 数学 | 70 |
| 鈴木 | 英語 | 40 |
| 佐藤 | 国語 | 90 |
| 佐藤 | 数学 | 70 |
を
| 氏名 | 英語 | 数学 | 国語 |
|---|---|---|---|
| 佐藤 | 60 | 70 | 90 |
| 鈴木 | 40 | 70 |
にするには、
insert into 変換後
select 氏名 as 氏名,
sum(decode( 科目, 英語, 点数, 0)) as 英語,
sum(decode( 科目, 数学, 点数, 0)) as 数学,
sum(decode( 科目, 国語, 点数, 0)) as 国語
from 変換前
group by 氏名システム間連携なんか、こんな感じでレイアウト変換することもあるんじゃないかな。
