[三流君] −−>
[ASPで遊ぶ、失敗する] −−>
[バックナンバー一覧]
−−> No.077 SQL AS演算子で別名管理
SQL AS演算子で別名管理
本文(発行内容)
<SQL AS演算子で別名管理>
こんにちは、三流プログラマーのKen3です。
/*
* 1.今回のキッカケ
*/
掲示板に下記の質問をもらいました
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>投稿者 : SQL初心者
>タイトル : 0 AS やNull ASについて
>
>タイトルのことなんですが、SQLのSELECT文で"0 AS"や"Null AS"と
>使われていることがありますが、アレは何なのでしょうか?
>使い方を調べ見ましたが、いまいちです。
>
>使っているのはよく見るのですが。
>ご存知でしたら教えてください!
-------
単純な解答だと、AS演算子は別名を定義してます。
なんて本人もわけのわからない解答だったりします。
※実際のSQL文を載せてもらえると、説明しやすいけど、
メルマガのネタにSQL文を作ってみました。
/*
* 2.Null AS を使う場面を考えてみる。
*/
AS演算子は別名を定義してます。
Null AS かぁ・・・
項目をNullにしたい・・・う〜ん。
Whereの条件で項目 IS Nullは見かけるけどなぁ。
あっ、前回、UNIONでSELECT文をつなげた時、
列数が合わないと、エラーが発生してました。
Microsoft JET Database Engine エラー '80040e14'
ユニオン クエリで選択した 2 つのテーブルまたはクエリの列数が一致しません。
/cgi-bin/test/test076-1.asp, 行 50
そこで、下記のように、
ダミーで商品名を”小計”として逃げてました。
Select T_月別売上.商品CD, T_商品.商品名,
売上4,売上5,売上6,売上7,売上8,売上9
From T_月別売上, T_商品
Where T_月別売上.商品CD = T_商品.商品CD
UNION ALL
Select Left([商品CD], 1) & 'ZZZZ' AS GroupCD
, '小計' AS Dummy商品名
, Sum([売上4]) , Sum([売上5]) , Sum([売上6])
, Sum([売上7]) , Sum([売上8]) , Sum([売上9])
From T_月別売上
Group By Left([商品CD], 1) & 'ZZZZ'
Order By T_月別売上.商品CD
'小計' AS Dummy商品名とSQL文に入れて、
列の数を合わせてました。
~~~~~~~~~~~~~~~~
これを、
Null AS Dummy商品名とSQL文に入れて、
空白データを作成してみます。
http://www.ken3.org/cgi-bin/test/test077-1.asp
で、
UNIONで表をつなげる時、列数が合わないとエラーになるので、
Null AS DUMMY商品名とダミーの項目を作り列数を合わせる
Select T_月別売上.商品CD, T_商品.商品名,
売上4,売上5,売上6,売上7,売上8,売上9
From T_月別売上, T_商品
Where T_月別売上.商品CD = T_商品.商品CD
UNION ALL
Select Left([T_月別売上.商品CD], 1) & 'ZZZZ' AS GroupCD
, Null AS Dummy商品名
, Sum([売上4]) , Sum([売上5]) , Sum([売上6])
, Sum([売上7]) , Sum([売上8]) , Sum([売上9])
From T_月別売上, T_商品
Where T_月別売上.商品CD = T_商品.商品CD
Group By Left([T_月別売上.商品CD], 1) & 'ZZZZ'
Order By T_月別売上.商品CD
と、SQL文を作成してみた。
/*
* 3.AS演算子は別名を定義してます。
*/
FFFFF As XXXXX
と、フィールド名やテーブル名を違う名前として使用可能にするために、
AS演算子を使用してます。
T_月別売上テーブル
^^^^^^^^^^^^^^^^^^
商品CD
売上4
売上5
・
・
売上12
売上1
売上2
売上3
とテーブル、フィールドがあったら、
↑作成したテーブルイメージ
SQL文を作成して、テストしてみる。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Select 商品CD,売上4,売上5,売上6
From T_月別売上テーブル
とか、SQLを書くのですが、
AS 演算子を使用して別名のテストをしてみます。
~~~~~~~~~
Select 商品CD, 売上4 AS 4月売上, DATA.売上5, DATA.売上6 AS 6月売上
From T_月別売上テーブル AS DATA
--
売上4 AS 4月売上
DATA.売上5
DATA.売上6 AS 6月売上
T_月別売上テーブル AS DATA
としてみました、結果は?
http://www.ken3.org/cgi-bin/test/test077-2.asp
でテスト実行すると、
商品CD 4月売上 売上5 6月売上
A1 1 2 3
A2 2 0 4
なんて感じでした。
/*
* 4. 0 AS XXXX, 1 AS YYYY, 2 AS ZZZZは?
*/
なるほどね・・ASは別名ですか。
Null AS XXXX で、項目作ったりできるのね。
だとすると、
0 AS XXXXは、ゼロと数字を作るのかい?
なんかイヤな予感・・・するんだけど。
じゃ、やってみれは?
Select 0 AS XXXX, 1 AS YYYY, 2 AS ZZZZ
From T_月別売上テーブル
を実行すると、結果は?
http://www.ken3.org/cgi-bin/test/test077-3.asp
を実行すると、
XXXX YYYY ZZZZ
0 1 2
0 1 2
あらら、出来ちゃいましたね。
-【けんぞう!】---------------------------------------------------------
ASPが利用可能なレンタルサーバーをお探しのアナタ、
http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介
『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳)
------------------------------------------------------------------------
/*
* 5.終わりの挨拶 </HTML>
*/
今回は、
AS 演算子で、別名を作ることを少し解説しました。
Web上を検索してみると、
NULL asの別のサンプルは、
>SELECT title,author FROM text.clob_books b,
>TABLE(db2ext.textsearch('"ガーデニング"','TEXT','IX_AUTHOR',
>0,10,CAST(NULL as char))) T WHERE T.primKey = B.id
と
CAST(NULL as char)
キャスト?NULL as char?キャラにしてる?
0 asの別のサンプルは、
>CREATE FUNCTION NotNull(text) RETURNS int4
>AS ' (SELECT 1 as RESULT where $1 is not NULL) union
> (SELECT 0 as RESULT where $1 is NULL)
> ' LANGUAGE 'sql';
なんか、単なるASで別名・・じゃない使い方のような・・・
SQL系は深いなぁと思いつつ、
なんかキレの無いサンプルだったなぁ・・・
私の実力もまだまだと感じたAS演算子のテスト処理でした。
何かの参考となれば幸いです。
ASP、VBScript勉強中の三流プログラマーのKen3でした。
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告