SQL教えて〜!!
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG全くのチンプンカンプンで問題の意味すらわかりません・・
門題は「単価が30000円以上で40000円以下の商品名と単価を
表示する命令」です!!これをSQL文にして欲しいのですが・・
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG来年もう一度頑張って、しっかり実力をつけなければ
学校に逝っている意味なんざねぇんだよ!
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGもうダメ。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG00101
NGNG私はちょー初心者で入学したからSQL言語って言われても?
って感じなんです・・・
一応、他の問題は何とかなりそうなんですけど、この問題は
ムリなんです!!
お願いします。何方かちゃんと教えて下さい!!
0011デフォルトの名無しさん
NGNGどんな教科書を使っているのか書け。
テスト前に問題がわかっているのは不思議だ。友達の答えをコピーしたほうが早いぞ。
0012デフォルトの名無しさん
NGNG遅いんだバーカ
■■■■■■■■■■■■■■■■ 終 了 ■■■■■■■■■■■■■■■■
00141
NGNGアイ・ティ・フロンティアの「データーベースソフトの活用」です。
この問題は教官オリジナルの問題なのですが、なぜこの問題が
テストの出るとわかったかと言うと、学校がドキュソなので
教官が出る問題を教えてくれたからです。
ちなみに友達も私同様、わからないみたいです・・
0015デフォルトの名無しさん
NGNG荒らしたり煽ったりしたら
プログラム板のイメージが悪くなるだろっ!
えっお前が答えろって?
僕は>>1が言ってる意味がよくわからないんで答えないんです。
0016デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGSELECT 商品名, 単価
FROM Table
WHERE (((値段)>30000 And (値段)<40000));
0019デフォルトの名無しさん
NGNG00201
NGNGありがとうございます!!助かりました〜☆
くだらない質問してすいませんでした・・
>>19
私ではありません・・
明日も違う科目のテストがあるので今日はもう寝ます。
ちなみに明日の科目は「Access」とシスアドです・・
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGもっとネタなのかマジなのかの判断が難しいのが欲しいな
0024デフォルトの名無しさん
NGNGFROM table
WHERE 単価 BETWEEN 30000 AND 40000;
0025デフォルトの名無しさん
NGNG<= >= 使え。
0026デフォルトの名無しさん
NGNG実際、実行プラン試したら
betweenもインデックス読んでた。
ゴミン
0027デフォルトの名無しさん
NGNGなら、問題だしてやる。
じゃあ、まず手始めに
管理番号(PK)
会社コード
担当者ID
のテーブルがある。
同じ会社コードデータが2つ以上存在する
データを選択するSQLを書け。
例:
管理番号 会社コード 担当者ID
1 a1 x1
2 a1 z1
3 b1 y1
なら
管理番号 会社コード 担当者ID
1 a1 x1
2 a1 z1
と検索される。
0028デフォルトの名無しさん
NGNGじゃないか?
0029sage
NGNGん?この問題がまだ簡単すぎるのか、
それとも難しすぎたのかどっちだ?
話は変わるが、
自分で出しときながら言うのも何だが、
こういう問答は好きだな。
開発(中も後も)ユーザから色々な仕様
の検索が要求される。
SQL一発で持ってくることができれば
それだけPGMコードも簡単になる。
いつもPGMで結果セットを制御しようと
するプログラマには結構為になるスレに
なると思われ。
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGPGMってプログラムの略? はじめてみたよ!
0032デフォルトの名無しさん
NGNG登録すれば、PDFのマニュアル一式DLできるのな〜
0033デフォルトの名無しさん
NGNGselect 管理番号,会社コード,担当者ID
from table
where 会社コード in (select 会社コード from table group by 会社コード having count(*)>1)
どうでしょう?
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGおっ、丁度帰ろうかなと思って覗いたら、
即レスありがとう。
ネストしなくても
select *
from テーブル
group by 管理コード
having count(*) > 1
と思ってたけど(一応確認済)、
何かやばい場合あったかな?
0036デフォルトの名無しさん
NGNGgroup by 会社コード
スマソ
003733
NGNGgroup by のときは「*」使えなかったような気がしますが...
あっ。ORACLE の SQL の場合です。
0038デフォルトの名無しさん
NGNGホントだ。Oracleで試したら、そうですね。
私はT-SQL(MSSQL、Sybase)で試しました。
なので、ネストした方が汎用的ですね。
じゃ、次の問題
難易度を低くます。
問題
>>27
と同じテーブルにおいて、
管理番号(PK)
会社コード
担当者ID
現在そのテーブル情報に携わっている担当者
の数を知りたい。
もちろん、重複は1人とする。
そのSQL文を書け。
0039デフォルトの名無しさん
NGNGGROUPなしでWHEREだけで済むやん
0040デフォルトの名無しさん
NGNGSQL書く前に担当者に聞け
0041デクノボウ
NGNG1さんこれで大丈夫ですよ
0042デフォルトの名無しさん
NGNG>現在そのテーブル情報に携わっている担当者
>の数を知りたい。
悪い、書き方がまずかった
>>27
と同じテーブル
管理番号(PK)
会社コード
担当者ID
において
現在、そのテーブル情報に格納されている担当者ID
の数(重複は1つとする)を知りたい。
それでもわからん者には
例:
管理番号 会社コード 担当者ID
1 a1 x1
2 a2 x2
3 a3 x2
4 a3 x3
5 a3 x4
6 a3 x2
重複は一人とする担当者IDの数は
x1、x2、x3、x4の=4つである。
その数を抽出するSQL文を書け。
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGそこで、SQLを学習したいのですが、
最初は何から始めるべきですか?
0045デフォルトの名無しさん
NGNGマニュアルを読む
サンプルコードを動かして覚える
0046デフォルトの名無しさん
NGNGMS-ACCESS のクエリーが学習に向いてると思う。
クエリーの設計画面とSQL文と実行画面 を行き来できるから。
ただし、MicrosoftのSQL文法準拠だけどね。
004744
NGNGフリーの環境を教材にしたいのですが・・・。
Windows/Cygwin環境辺りで
何か良いのがありましたらお願いします。
とりあえず明日参考書を買ってきます。
0048デフォルトの名無しさん
NGNGPC UNIXは貧乏な構成なら金かからんだろ。
00491
NGNG私にはサパーリわかりません・・
テスト今日なんですけど自分で考えてみました!!
SELECT 単価
FROM 商品表
WHERE 単価 BETWEEN 30000 AND 40000
ですかぁ〜?もうわかりません・・・(涙)
午後からテストなのでまだ時間はあるのでレス下さい!!
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG正解!
しかしそれどころではなくなった。
N.YのWebサーバに繋がらない。
サーバの物理的な設置場所が日本側では
不明なので今調査中であるが、ちょっと
しゃれにならなくなっている。
(不幸中の幸いか担当範囲のN.YのDBサーバは別
だったらしく生きてた。しかしDBよりも動かす人
の方が心配だ。)
0052デフォルトの名無しさん
NGNG商品名はどこに行ったの?
0053デフォルトの名無しさん
NGNG商品表ってどこから持ってきたの?
0054デフォルトの名無しさん
NGNG回線が遮断されていただけだったらしい。
しかし明日もAM7時出勤...
ということで、新問題
以下の様なテーブルがある。
マスタテーブル
テーブル名:m
工場コード(PK)
工場名
トランザクションテーブル
テーブル名:t
年月日(PK)
工場コード(PK,FK:m1)
生産高
テーブル:tにおける工場別の
生産高総合計を表示したい。
検索項目は
<生産地コード 工場名 生産高総合計>
また、テーブルmに登録されているが、
tに存在しない工場の生産高は0として
表示したい。
表示順は工場コードについて
昇順とする。
その仕様を満たす結果を返すSQLを書け。
例
mのデータ
工場コード 工場名
a1 元町
a2 田原
a3 高岡
a4 三好
tのデータ
年月日 工場コード 生産高総合計
2001/08/01 a1 100
2001/08/01 a3 100
2001/08/02 a1 150
2001/08/02 a3 200
<検索結果>
工場コード 工場名 総生産高
a1 元町 250
a2 田原 0
a3 高岡 300
a4 三好 0
DBMSにより違ったSQLとなるので
(もちろん汎用的にも書けますが)
使用DBMSをできるだけ明記して下さい。
0055デフォルトの名無しさん
NGNGになっているが、生産高の間違い。
よって例をもう一回書くと
例
mのデータ
工場コード 工場名
a1 元町
a2 田原
a3 高岡
a4 三好
tのデータ
年月日 工場コード 生産高
2001/08/01 a1 100
2001/08/01 a3 100
2001/08/02 a1 150
2001/08/02 a3 200
<検索結果>
工場コード 工場名 生産高総合計
a1 元町 250
a2 田原 0
a3 高岡 300
a4 三好 0
ゴメソネ
0056デフォルトの名無しさん
NGNGfrom t,m
where t.工場コード=m.工場コード
group by t.工場コード
order by t.工場コード;
select m.工場コード 生産地コード,min(m.工場名) 工場名,NVL(sum(生産高),0) 生産高
from t,m
where t.工場コード(+)=m.工場コード
group by m.工場コード
order by m.工場コード;
ORACLE 未確認だよ〜ん
00571
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG検索(表示)の指定も違ってました。
<工場コード 工場名 生産高総合計> ゴミソナサイ
>>56
レスありがとうございます。
minで工場名を一つに特定させる技もあるのですね。
m.工場名をgroup by に組み込む方法もありますね。
select m.工場コード 工場コード,m.工場名 工場名,NVL(sum(生産高),0) 生産高総合計
where t.工場コード(+) = m.工場コード
group by m.工場コード,m.工場名
order by m.工場コード;
かな。Oracle(8.15)で確認済です。
0060デフォルトの名無しさん
NGNGT-SQL (MSSQL or Sybase) の場合
(古いバージョンは使えないから気をつけて)
select m.工場コード 工場コード,m.工場名 工場名,coalesce(sum(t.生産高),0) 生産高総合計
from m,t
where m.工場コード *= t.工場コード
group by m.工場コード,m.工場名
order by m.工場コード
0061デフォルトの名無しさん
NGNGもう一つ外部結合、関数を使用しない方法
select m.工場コード 工場コード,m.工場名 工場名,sum(t.生産高) 生産高総合計
from m,t
where m.工場コード = t.工場コード
group by m.工場コード,m.工場名
UNION
select m.工場コード 工場コード,m.工場名 工場名,0 生産高総合計
from m
where not exists(
select * from s where s.工場コード = m.工場コード
)
order by 工場コード
という方法もあります。これがDBMSに依存しない方法です。
0062デフォルトの名無しさん
NGNG>SQLまわりの気の利いた入門書ってどれ?
やっぱ、各種ベンダーのマニュアル本かな。
がいしゅつだけど、Oracle,Sybaseならダウンロード
できるし。(SybaseはMSSQLほぼ(強調)互換)
あとは、こうやって、みんなといろんなケースを
遊びながら覚えていく方法が一番速いよ。
頭の体操にもなるしね。
0063デフォルトの名無しさん
NGNGスマソ sなんていうテーブルどこにもないね。
あと関数というのはDBMS依存関数のことだよ。
select m.工場コード 工場コード,m.工場名 工場名,sum(t.生産高) 生産高総合計
from m,t
where m.工場コード = t.工場コード
group by m.工場コード,m.工場名
UNION
select m.工場コード 工場コード,m.工場名 工場名,0 生産高総合計
from m
where not exists(
select * from s where t.工場コード = m.工場コード
)
order by 工場コード
これからはちゃんと校正するね。
0064デフォルトの名無しさん
NGNGこれも一種の荒らしだな。
select m.工場コード 工場コード,m.工場名 工場名,sum(t.生産高) 生産高総合計
from m,t
where m.工場コード = t.工場コード
group by m.工場コード,m.工場名
UNION
select m.工場コード 工場コード,m.工場名 工場名,0 生産高総合計
from m
where not exists(
select * from t where t.工場コード = m.工場コード
)
order by 工場コード
これが正解
0065デフォルトの名無しさん
NGNGこれは勉強になった。残念ながらもう入手困難だろうけど。
入門書とはいえないかな(w
0066デフォルトの名無しさん
NGNGm.工場コード,
Max(m.工場名) As 工場名,
Sum(IsNull(t.生産高,0)) As 生産高総合計
From m
Left Outer Join t
On m.工場コード = t.工場コード
Group By m.工場コード
Order By m.工場コード
これが、SQL-92的に正解でわ?
Oracle使いは (*) とか *= とかヤメレ。
レコード絞込みの条件と結合の条件を両方 Where句に書いて
評価順序 保証されるの?
0067デフォルトの名無しさん
NGNG006856
NGNGまあ、現時点ではSQLの方言があるので、しかたないでしょう。
>レコード絞込みの条件と結合の条件を両方 Where句に書いて
>評価順序 保証されるの?
保証されないし、順序が違っても問題ないのでは。
SQLの実行計画立てるときに、索引やデータ量によって異なる
順序で実行されるでしょうが、結果は同じでしょう。 きっと
0069Error401
NGNG同じくジョー・セルコの
『プログラマのためのSQL』
ISBN4-89471-480-9
かなり実践的な内容になっているが、最初の一冊には厳しいかも。
SQLをさわった経験のあるプログラマは必読。
0070デフォルトの名無しさん
NGNGたとえば、「生産高が 0 より大きい日のデータのみ集計する」という
条件を加えた場合 どーなるの?
Select (省略)
From m, t
Where t.生産高 > 0 And m.工場コード(+)=t.工場コード
Group By (省略)
(t.生産高 > 0) が先に評価されれば、目的通りだけど、
後ろの結合が先に評価されちゃうと、左外結合によって
できた t.工場コード == NULL というデータを持つ
レコードが t.生産高 > 0 という条件によって
切り捨てられるのでは?
「絞り込んでから結合する」のと「結合してから絞り込む」のでは
やっぱり結果が変わってくることってありますよね。
で、それらを Where句に and 使って並べて書くってことは、
評価順序が保証されてないわけだから、「絞り込んでから」なのか
「結合してから」なのかプログラマには分からんよね。
まぁ、そーいう へたれSQL書いちゃいけないっていう意見もあるけど、
書けてしまう & 予期せぬ結果をもたらす ってのは問題かと。
0071Error401
NGNG>「絞り込んでから結合する」のと「結合してから絞り込む」のでは
>やっぱり結果が変わってくることってありますよね。
うんうん。
>で、それらを Where句に and 使って並べて書くってことは、
>評価順序が保証されてないわけだから、「絞り込んでから」なのか
>「結合してから」なのかプログラマには分からんよね。
今手元に資料が無いので確認できないけど、SQL92ではちゃんと
定義されてるはず。評価順序をコントロールできる。
SELECT ...
FROM m
LEFT OUTER JOIN t
ON m.工場コード = t.工場コード
AND t.生産高 > 0
と
SELECT ...
FROM m
LEFT OUTER JOIN t
ON m.工場コード = t.工場コード
WHERE t.生産高 > 0
0072デフォルトの名無しさん
NGNG言い訳かもしれないけど、
outer joinも書こうかと思ったけど、
この問題の場合はいっしょだから書きま
せんでした。
Oracle、いつのバージョンから
SQL92の書き方がOKなった?
使えるとは知らなかったよ。
ちなみにOracleもMSSQLもSybaseも
外部結合と条件が混在した場合、
結合より前に(共に)条件が評価されます。
(11.9.3まではSybaseはSQL92の書き方は出来ない。)
でも指摘の通り、SQLからでは判別できないから
世の中はSQL92を勧めてるみたいですね。
>>71のように明確に記述できるしね。
0073デフォルトの名無しさん
NGNGテーブル :t1
id (PK)
kind (PK)
desc
がある。
kindはチェック制約により'A'、'B'
の2種類しか格納できない様になっている。
このテーブルについて、kind が'B'というレコード
について検索したいが、idについて'A'しか存在し
ないレコードの場合は'A'を表示させたい。
idについて'A'、'B'の両方の種類が存在するレコード
も存在するし、'A'のみ、'B'のみのレコードも存在する。
この仕様を満たすSQLを書け。
0074デフォルトの名無しさん
NGNGt1
id kind desc
1 A aaaa
1 B bbbb
2 A xxxx
3 A yyyy
3 B zzzz
4 B ssss
<検索結果>
id kind desc
1 B bbbb
2 A xxxx
3 B zzzz
4 B ssss
0075Error401
NGNG>Oracle、いつのバージョンから
>SQL92の書き方がOKなった?
8iまではNGでは?
9i DatabaseのWPに「ANSI準拠の結合のサポート」とあるから、これじゃないかな。
8.1.6以降は触ってないから詳しくないけど。
0076デフォルトの名無しさん
NGNGとりあえず。
SELECT id, kind, desc
FROM t1
WHERE kind = (
SELECT MAX(kind)
FROM t1 as t1x
WHERE t1.id = t1x.id)
007776
NGNG0078デフォルトの名無しさん
NGNGそだね。
ところで、desc は予約語なんだけど エスケープする方法って
SQL/99 で定義されているんでしょうか? SQL/92 には見当たらず。
ちなみに MSSQL(T-SQL)ではカギ括弧を使います。
Select [id], kind, [desc]
From t
Where kind = (
Select Max(kind)
From t As t2
Where t2.[id] = t.[id]
)
007978
NGNGあとテーブル名も t じゃなくて t1 だね。
間違いだらけでスマン。
0080Error401(=76)
NGNGダブルクォーテーションかな?
後で調べてみるね。
008156
NGNGあらまあ。確かに評価順序で結果が違いますねぇ。
なんとなく同じだと思い込んでたので、ちょっとショック。
0082デフォルトの名無しさん
NGNGSQLのコマンド名と、同じ名前のテーブル名が使用されている場合、
どうやってそのテーブル名を指定すればよいのでしょうか?
具体的にいうと、「GROUP」という名前のテーブルがあって、
SELECT * FROM GROUP ORDER BY ...
ってやりたいんですけど、構文エラーになっちゃいますよね。
あと、SQLじゃないんですけど、ユニークキーってのは
UniqueKey1とUniqueKey2がユニークキーならば
UniqueKey1とUniqueKey2が、同時に重複することは無いって事で
いいんですよね?
0083デフォルトの名無しさん
NGNG誰がそんな馬鹿なテーブル名つけたんだ(藁
0084デフォルトの名無しさん
NGNG読みやすいし、予約語ともぶつからない。
(反対する人、多いと思うけど)
008582
NGNG厨房な質問でスマソ。
0086デフォルトの名無しさん
NGNGT-SQL
0087デフォルトの名無しさん
NGNG>>82=85
>>78にも書いてるけど T-SQL ならカギ括弧付ければ逝ける。
SQL/92では定義されてないので、DBMS依存なんだと思う…。
>>80のいうダブルクォーテーションは T-SQL ではダメだった。
>>84
激しく同意。
片手に印刷した対応表( EmpCode … 社員コード, Sales … 売上 )とか
持ってる人見るととても痛い。はじめから、「社員コード」、「売上」って
列名にしとけばいいのに。
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG0091Error401
NGNGダブルクォーテーションは、識別子をあらわすものでした。
SQL92では、SQLキーワードを、例え区切り入りの識別子の一単語でも
(例えば、"foo table")使えないとありました。
また、将来に渡って、'_'で終わるSQLキーワードは無いので、
SQLキーワードを識別子に使いたい場合は、'_'を後ろに付けろともありました。
ま、個人的には使わないのが一番だと思うけど、あとから追加された
SQLキーワードと、以前作ったものがバッティングするという場合も
あるからね・・・。
descriptionなんか、ヤバそうだ。
0092デフォルトの名無しさん
NGNG遅レスでゴミソ
あっ、DBMSでは予約語がカラム名に
なっちゃってたね。ゴメンネ
ちなみに、
T-SQL(MSSQL、Sybase)では
SET QUOTED_IDENTIFER ON
とコマンドして設定すれば「"」を
使用でき、"group"のようなテーブル、カラム
も作れる。
でもお勧めしないけどね。
選択する時も、コマンド打って、
「"」でくくらないといけないよ。
漢字(Wバイト)の名称のことだけど、
システム関連者がすべて日本人
使用OS(文字コード)が一つ
なら問題ないと思うけど。
純日本製のDBなんてあんまりないし
(HiRDBなんてそうなのかな)
見知らぬバグが潜んでいる可能性も
無きにしもあらずだからねぇ〜。
「障らぬ神にたたりなし」のような。。。
0093デフォルトの名無しさん
NGNGDBMSでは予約語がカラム名に
なっちゃってたね。
→DBMSによっては・・・
0094デフォルトの名無しさん
NGNG余計なリスクを抱え込まないという姿勢には賛成だが
日本語 表名・項目名はすでにかなり浸透していて「見知らぬバグ」
に自分だけが遭遇する状態じゃないと思うんだけど、どう。
ずっと昔「表」という文字が含まれる表名で障害が出たことがあるので
確信はないんだけどね。
0095デフォルトの名無しさん
NGNG・・・いいスレだ
0096デフォルトの名無しさん
NGNG背景とかそゆのがわかる本きぼーんです
0097デフォルトの名無しさん
NGNG理論系かどうかはともかく
「プログラマのためのSQL」J.セルコ著
は押えておくといいんじゃないかな
0098デフォルトの名無しさん
NGNG良かった。
「"図解でわかる〜" また"猿でもわかる〜"たぐいのかよ(藁」
とか思ってた俺がアホだった。
http://www.amazon.co.jp/exec/obidos/search-handle-url/index=books-jp&field-author=%E5%B0%8F%E6%B3%89%20%E4%BF%AE/249-4535407-4869161
0099デフォルトの名無しさん
NGNGhttp://www.njg.co.jp/c/zukai.htm
0100デフォルトの名無しさん
NGNGの yyy に半角ピリオドを含む文字列を使いたいんだけど、どうしたらいいの?
0101デフォルトの名無しさん
NGNGおすすめです
「サーバのすべて」と間違えて「Linuxサーバーのすべて」を
買ってしまわないように注意
(「Linuxサーバーのすべて」と「Linuxのすべて」も違うよ)
■ このスレッドは過去ログ倉庫に格納されています