5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

SQL教えて〜!!

1 :デフォルトの名無しさん:01/09/10 19:16
データーベースのテストが水曜日にあります。
全くのチンプンカンプンで問題の意味すらわかりません・・
門題は「単価が30000円以上で40000円以下の商品名と単価を
表示する命令」です!!これをSQL文にして欲しいのですが・・

2 :デフォルトの名無しさん:01/09/10 19:24
シネ

3 :デフォルトの名無しさん:01/09/10 19:25
between あたりを調べろ。

4 :デフォルトの名無しさん:01/09/10 19:31
1は門題児です。

5 :デフォルトの名無しさん:01/09/10 19:55
そんな単位、落としてしまえ!
来年もう一度頑張って、しっかり実力をつけなければ
学校に逝っている意味なんざねぇんだよ!

6 :デフォルトの名無しさん:01/09/10 20:04
>>5 激同。>>1 人脈ないなら実力つけろバーカ

7 :デフォルトの名無しさん:01/09/10 20:06
>>1「して欲しいのですが」→「したいのですが」なら助けてやってもよかった。
もうダメ。

8 :デフォルトの名無しさん:01/09/10 20:08
select 色 from うんこ;

9 :デフォルトの名無しさん:01/09/10 20:18
drop table 商品マスター;

10 :1:01/09/10 21:21
学校はわかる人中心に授業進めているんです・・
私はちょー初心者で入学したからSQL言語って言われても?
って感じなんです・・・
一応、他の問題は何とかなりそうなんですけど、この問題は
ムリなんです!!
お願いします。何方かちゃんと教えて下さい!!

11 :デフォルトの名無しさん:01/09/10 21:26
>>1
どんな教科書を使っているのか書け。

テスト前に問題がわかっているのは不思議だ。友達の答えをコピーしたほうが早いぞ。

12 :デフォルトの名無しさん:01/09/10 21:31
マジレス。教官にわかるまで教えを乞え。>>10
遅いんだバーカ

■■■■■■■■■■■■■■■■ 終 了 ■■■■■■■■■■■■■■■■

13 :(・ε・):01/09/10 21:37
>>1
ふーん。明日『入門SQL』買ってきて読めば?

14 :1:01/09/10 21:39
>>11
アイ・ティ・フロンティアの「データーベースソフトの活用」です。
この問題は教官オリジナルの問題なのですが、なぜこの問題が
テストの出るとわかったかと言うと、学校がドキュソなので
教官が出る問題を教えてくれたからです。
ちなみに友達も私同様、わからないみたいです・・

15 :デフォルトの名無しさん:01/09/10 21:53
みんな、教えてやれよ!
荒らしたり煽ったりしたら
プログラム板のイメージが悪くなるだろっ!

えっお前が答えろって?
僕は>>1が言ってる意味がよくわからないんで答えないんです。

16 :デフォルトの名無しさん:01/09/10 21:59
3で終わってる気もするが門題って変換どうやったのかの方が気になる

17 :好感度アップ作戦:01/09/10 22:20
せめて >>3 のキーワードを >>14 の教科書とかで調べて、
わかったことを踏まえて質問しなおせばいいジャン >>14

18 :デフォルトの名無しさん:01/09/10 22:22
これで合ってるのかな
SELECT 商品名, 単価
FROM Table
WHERE (((値段)>30000 And (値段)<40000));

19 :デフォルトの名無しさん:01/09/10 22:28
>>18 は 1 なの?

20 :1:01/09/10 22:38
>>18
ありがとうございます!!助かりました〜☆
くだらない質問してすいませんでした・・

>>19
私ではありません・・

明日も違う科目のテストがあるので今日はもう寝ます。
ちなみに明日の科目は「Access」とシスアドです・・

21 :まあまちなさい:01/09/10 22:40
>>20
>>18は間違ってるよ。。マジで。

22 :デフォルトの名無しさん:01/09/10 22:54
違ってるね。

23 :デフォルトの名無しさん:01/09/10 23:02
質問が普通でつまんない
もっとネタなのかマジなのかの判断が難しいのが欲しいな

24 :デフォルトの名無しさん:01/09/11 08:36
SELECT 商品名,単価
FROM table
WHERE 単価 BETWEEN 30000 AND 40000;

25 :デフォルトの名無しさん:01/09/11 15:42
between はインデックス無視するからやめときな。
<= >= 使え。

26 :デフォルトの名無しさん:01/09/11 16:00
↑スマソ、ガセだった。
実際、実行プラン試したら
betweenもインデックス読んでた。
ゴミン

27 :デフォルトの名無しさん:01/09/11 16:18
>>23
なら、問題だしてやる。
じゃあ、まず手始めに

管理番号(PK)
会社コード
担当者ID

のテーブルがある。

同じ会社コードデータが2つ以上存在する
データを選択するSQLを書け。
例:
管理番号 会社コード  担当者ID
   1 a1 x1
   2 a1 z1
   3 b1 y1

なら
管理番号  会社コード  担当者ID
    1 a1   x1
    2 a1   z1
と検索される。

28 :デフォルトの名無しさん:01/09/11 16:33
簡単すぎてつまらない、と言っているのにこの問題はないん
じゃないか?

29 :sage:01/09/11 17:15
>>28
ん?この問題がまだ簡単すぎるのか、
それとも難しすぎたのかどっちだ?

話は変わるが、
自分で出しときながら言うのも何だが、
こういう問答は好きだな。
開発(中も後も)ユーザから色々な仕様
の検索が要求される。
SQL一発で持ってくることができれば
それだけPGMコードも簡単になる。
いつもPGMで結果セットを制御しようと
するプログラマには結構為になるスレに
なると思われ。

30 :デフォルトの名無しさん:01/09/11 17:20
あっ、名前にsage書いちまった。

31 :デフォルトの名無しさん:01/09/11 17:44
>>29
PGMってプログラムの略? はじめてみたよ!

32 :デフォルトの名無しさん:01/09/11 17:46
Oracleのサイトって
登録すれば、PDFのマニュアル一式DLできるのな〜

33 :デフォルトの名無しさん:01/09/11 18:56
>>27
select 管理番号,会社コード,担当者ID
from table
where 会社コード in (select 会社コード from table group by 会社コード having count(*)>1)
どうでしょう?

34 :デフォルトの名無しさん:01/09/11 19:10
>>27それもまた門題ですね。

35 :デフォルトの名無しさん:01/09/11 19:31
>>27
おっ、丁度帰ろうかなと思って覗いたら、
即レスありがとう。

ネストしなくても
select *
from テーブル
group by 管理コード
having count(*) > 1
と思ってたけど(一応確認済)、
何かやばい場合あったかな?

36 :デフォルトの名無しさん:01/09/11 19:33

group by 会社コード
スマソ

37 :33:01/09/11 19:36
>>35
group by のときは「*」使えなかったような気がしますが...
あっ。ORACLE の SQL の場合です。

38 :デフォルトの名無しさん:01/09/11 22:20
>>37
ホントだ。Oracleで試したら、そうですね。
私はT-SQL(MSSQL、Sybase)で試しました。
なので、ネストした方が汎用的ですね。

じゃ、次の問題
難易度を低くます。

問題
>>27
と同じテーブルにおいて、
 管理番号(PK)
 会社コード
 担当者ID
現在そのテーブル情報に携わっている担当者
の数を知りたい。
もちろん、重複は1人とする。
そのSQL文を書け。

39 :デフォルトの名無しさん:01/09/11 22:27
何を言ってるのかわかんないよ
GROUPなしでWHEREだけで済むやん

40 :デフォルトの名無しさん:01/09/11 22:29
>38
SQL書く前に担当者に聞け

41 :デクノボウ:01/09/11 22:36
select 商品名,単価 from テーブル名 where 単価 >=30000 and 40000 <= 単価;
1さんこれで大丈夫ですよ

42 :デフォルトの名無しさん:01/09/11 23:03
>>38
>現在そのテーブル情報に携わっている担当者
>の数を知りたい。

悪い、書き方がまずかった
>>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文を書け。

43 :デフォルトの名無しさん:01/09/12 00:15
select count(distinct 担当者ID) from テーブル;

44 :デフォルトの名無しさん:01/09/12 02:21
データベースの仕事をすることになりました。
そこで、SQLを学習したいのですが、
最初は何から始めるべきですか?

45 :デフォルトの名無しさん:01/09/12 02:28
入門書を買う
マニュアルを読む
サンプルコードを動かして覚える

46 :デフォルトの名無しさん:01/09/12 02:44
>>44
MS-ACCESS のクエリーが学習に向いてると思う。
クエリーの設計画面とSQL文と実行画面 を行き来できるから。
ただし、MicrosoftのSQL文法準拠だけどね。

47 :44:01/09/12 03:07
なるべくお金掛けたくないので、
フリーの環境を教材にしたいのですが・・・。
Windows/Cygwin環境辺りで
何か良いのがありましたらお願いします。
とりあえず明日参考書を買ってきます。

48 :デフォルトの名無しさん:01/09/12 04:09
>>47
PC UNIXは貧乏な構成なら金かからんだろ。

49 :1:01/09/12 05:57
何か1日見なかっただけでカナーリ展開してますね。
私にはサパーリわかりません・・
テスト今日なんですけど自分で考えてみました!!

   SELECT 単価
   FROM 商品表
   WHERE 単価 BETWEEN 30000 AND 40000

ですかぁ〜?もうわかりません・・・(涙)
午後からテストなのでまだ時間はあるのでレス下さい!!

   

50 :デフォルトの名無しさん:01/09/12 06:09
シネ

51 :デフォルトの名無しさん:01/09/12 09:58
>>43
正解!

しかしそれどころではなくなった。
N.YのWebサーバに繋がらない。
サーバの物理的な設置場所が日本側では
不明なので今調査中であるが、ちょっと
しゃれにならなくなっている。
(不幸中の幸いか担当範囲のN.YのDBサーバは別
だったらしく生きてた。しかしDBよりも動かす人
の方が心配だ。)

52 :デフォルトの名無しさん:01/09/12 13:20
>>49
商品名はどこに行ったの?

53 :デフォルトの名無しさん:01/09/12 17:27
>>49
商品表ってどこから持ってきたの?

54 :デフォルトの名無しさん:01/09/12 18:06
鯖も別の場所だったらしく無事だった。
回線が遮断されていただけだったらしい。
しかし明日も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をできるだけ明記して下さい。

55 :デフォルトの名無しさん:01/09/12 18:15
↑例におけるtのカラムが生産高総合計
になっているが、生産高の間違い。
よって例をもう一回書くと

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

ゴメソネ

56 :デフォルトの名無しさん:01/09/12 18:46
select t.工場コード 生産地コード,min(m.工場名) 工場名,sum(生産高) 生産高
from 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 未確認だよ〜ん

57 :1:01/09/12 19:50
結局、テストは記号で選択問題だったから多分出来ていたと思います!!

58 :デフォルトの名無しさん:01/09/12 21:25
SQLまわりの気の利いた入門書ってどれ?

59 :デフォルトの名無しさん:01/09/12 22:36
>>55
検索(表示)の指定も違ってました。
<工場コード 工場名 生産高総合計> ゴミソナサイ

>>56
レスありがとうございます。
minで工場名を一つに特定させる技もあるのですね。
m.工場名をgroup by に組み込む方法もありますね。
select m.工場コード 工場コード,m.工場名 工場名,NVL(sum(生産高),0) 生産高総合計
where t.工場コード(+) = m.工場コード
group by m.工場コード,m.工場名
order by m.工場コード;
かな。Oracle(8.15)で確認済です。

60 :デフォルトの名無しさん:01/09/12 22:37
>>55
T-SQL (MSSQL or Sybase) の場合
(古いバージョンは使えないから気をつけて)
select m.工場コード 工場コード,m.工場名 工場名,coalesce(sum(t.生産高),0) 生産高総合計
from m,t
where m.工場コード *= t.工場コード
group by m.工場コード,m.工場名
order by m.工場コード

61 :デフォルトの名無しさん:01/09/12 22:39
>>55
もう一つ外部結合、関数を使用しない方法
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に依存しない方法です。

62 :デフォルトの名無しさん:01/09/12 22:50
>>58
>SQLまわりの気の利いた入門書ってどれ?
やっぱ、各種ベンダーのマニュアル本かな。
がいしゅつだけど、Oracle,Sybaseならダウンロード
できるし。(SybaseはMSSQLほぼ(強調)互換)
あとは、こうやって、みんなといろんなケースを
遊びながら覚えていく方法が一番速いよ。
頭の体操にもなるしね。

63 :デフォルトの名無しさん:01/09/12 22:54
>>61
スマソ 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 工場コード
これからはちゃんと校正するね。

64 :デフォルトの名無しさん:01/09/12 22:57
あかん、頭がぼけてきた(今日寝てない)
これも一種の荒らしだな。

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 工場コード
これが正解

65 :デフォルトの名無しさん:01/09/12 23:01
J.セルコ「SQLパズル」
これは勉強になった。残念ながらもう入手困難だろうけど。
入門書とはいえないかな(w

66 :デフォルトの名無しさん:01/09/12 23:43
Select
 m.工場コード,
 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句に書いて
評価順序 保証されるの?

67 :デフォルトの名無しさん:01/09/13 00:20
postgresqlのSQLで気の利いた入門書/入門サイトってありますか?

68 :56:01/09/13 03:06
>>66
まあ、現時点ではSQLの方言があるので、しかたないでしょう。

>レコード絞込みの条件と結合の条件を両方 Where句に書いて
>評価順序 保証されるの?

保証されないし、順序が違っても問題ないのでは。
SQLの実行計画立てるときに、索引やデータ量によって異なる
順序で実行されるでしょうが、結果は同じでしょう。 きっと

69 :Error401:01/09/13 11:12
>>65
同じくジョー・セルコの
『プログラマのためのSQL』
ISBN4-89471-480-9

かなり実践的な内容になっているが、最初の一冊には厳しいかも。
SQLをさわった経験のあるプログラマは必読。

70 :デフォルトの名無しさん:01/09/13 11:40
>>68
たとえば、「生産高が 0 より大きい日のデータのみ集計する」という
条件を加えた場合 どーなるの?

Select (省略)
From m, t
Where t.生産高 > 0 And m.工場コード(+)=t.工場コード
Group By (省略)

(t.生産高 > 0) が先に評価されれば、目的通りだけど、
後ろの結合が先に評価されちゃうと、左外結合によって
できた t.工場コード == NULL というデータを持つ
レコードが t.生産高 > 0 という条件によって
切り捨てられるのでは?

「絞り込んでから結合する」のと「結合してから絞り込む」のでは
やっぱり結果が変わってくることってありますよね。
で、それらを Where句に and 使って並べて書くってことは、
評価順序が保証されてないわけだから、「絞り込んでから」なのか
「結合してから」なのかプログラマには分からんよね。

まぁ、そーいう へたれSQL書いちゃいけないっていう意見もあるけど、
書けてしまう & 予期せぬ結果をもたらす ってのは問題かと。

71 :Error401:01/09/13 12:14
>>70
>「絞り込んでから結合する」のと「結合してから絞り込む」のでは
>やっぱり結果が変わってくることってありますよね。

うんうん。

>で、それらを 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

72 :デフォルトの名無しさん:01/09/13 14:28
やっぱり、外部結合の指摘されたか。
言い訳かもしれないけど、
outer joinも書こうかと思ったけど、
この問題の場合はいっしょだから書きま
せんでした。

Oracle、いつのバージョンから
SQL92の書き方がOKなった?
使えるとは知らなかったよ。

ちなみにOracleもMSSQLもSybaseも
外部結合と条件が混在した場合、
結合より前に(共に)条件が評価されます。
(11.9.3まではSybaseはSQL92の書き方は出来ない。)

でも指摘の通り、SQLからでは判別できないから
世の中はSQL92を勧めてるみたいですね。
>>71のように明確に記述できるしね。

73 :デフォルトの名無しさん:01/09/13 14:30
じゃぁ次の問題
テーブル :t1
id  (PK)
kind (PK)
desc
がある。
kindはチェック制約により'A'、'B'
の2種類しか格納できない様になっている。

このテーブルについて、kind が'B'というレコード
について検索したいが、idについて'A'しか存在し
ないレコードの場合は'A'を表示させたい。

idについて'A'、'B'の両方の種類が存在するレコード
も存在するし、'A'のみ、'B'のみのレコードも存在する。

この仕様を満たすSQLを書け。

74 :デフォルトの名無しさん:01/09/13 14:32
>>73の例
t1
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

75 :Error401:01/09/13 14:54
>>72
>Oracle、いつのバージョンから
>SQL92の書き方がOKなった?

8iまではNGでは?
9i DatabaseのWPに「ANSI準拠の結合のサポート」とあるから、これじゃないかな。

8.1.6以降は触ってないから詳しくないけど。

76 :デフォルトの名無しさん:01/09/13 15:11
>>72
とりあえず。

SELECT id, kind, desc
FROM t1
WHERE kind = (
SELECT MAX(kind)
FROM t1 as t1x
WHERE t1.id = t1x.id)

77 :76:01/09/13 15:11
s/72/73/

78 :デフォルトの名無しさん:01/09/13 19:39
>>76

そだね。

ところで、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]
)

79 :78:01/09/13 19:43
id は予約語じゃないから、括弧いらないやね。
あとテーブル名も t じゃなくて t1 だね。
間違いだらけでスマン。

80 :Error401(=76):01/09/13 20:06
>>78
ダブルクォーテーションかな?
後で調べてみるね。

81 :56:01/09/13 21:14
>>70
あらまあ。確かに評価順序で結果が違いますねぇ。
なんとなく同じだと思い込んでたので、ちょっとショック。

82 :デフォルトの名無しさん:01/09/13 23:33
すいません、教えて欲しいんですが、
SQLのコマンド名と、同じ名前のテーブル名が使用されている場合、
どうやってそのテーブル名を指定すればよいのでしょうか?
具体的にいうと、「GROUP」という名前のテーブルがあって、
SELECT * FROM GROUP ORDER BY ...
ってやりたいんですけど、構文エラーになっちゃいますよね。

あと、SQLじゃないんですけど、ユニークキーってのは
UniqueKey1とUniqueKey2がユニークキーならば
UniqueKey1とUniqueKey2が、同時に重複することは無いって事で
いいんですよね?

83 :デフォルトの名無しさん:01/09/13 23:39
GROUPって予約語だろ?
誰がそんな馬鹿なテーブル名つけたんだ(藁

84 :デフォルトの名無しさん:01/09/14 00:01
テーブル名、項目名は日本語がいい。
読みやすいし、予約語ともぶつからない。
(反対する人、多いと思うけど)

85 :82:01/09/14 00:14
自分でつけたテーブル名じゃないんでどうしようもないんですよ。
厨房な質問でスマソ。

86 :デフォルトの名無しさん:01/09/14 00:24
>>82=85
T-SQL

87 :デフォルトの名無しさん:01/09/14 00:31
スマン。

>>82=85

>>78にも書いてるけど T-SQL ならカギ括弧付ければ逝ける。
SQL/92では定義されてないので、DBMS依存なんだと思う…。

>>80のいうダブルクォーテーションは T-SQL ではダメだった。

>>84
激しく同意。
片手に印刷した対応表( EmpCode … 社員コード, Sales … 売上 )とか
持ってる人見るととても痛い。はじめから、「社員コード」、「売上」って
列名にしとけばいいのに。

88 :82:01/09/14 00:44
thanx!! >>87
ログにあったのね。
それくらい読めよ>俺
逝ってきます。

89 :デフォルトの名無しさん:01/09/14 06:19
SQLでゲーム作れますか?

90 :デフォルトの名無しさん:01/09/14 07:12
ゲーム作れるよ

91 :Error401:01/09/14 09:01
>>87
ダブルクォーテーションは、識別子をあらわすものでした。

SQL92では、SQLキーワードを、例え区切り入りの識別子の一単語でも
(例えば、"foo table")使えないとありました。

また、将来に渡って、'_'で終わるSQLキーワードは無いので、
SQLキーワードを識別子に使いたい場合は、'_'を後ろに付けろともありました。

ま、個人的には使わないのが一番だと思うけど、あとから追加された
SQLキーワードと、以前作ったものがバッティングするという場合も
あるからね・・・。

descriptionなんか、ヤバそうだ。

92 :デフォルトの名無しさん:01/09/14 09:24
>>73の出題者です。
遅レスでゴミソ
あっ、DBMSでは予約語がカラム名に
なっちゃってたね。ゴメンネ
ちなみに、
T-SQL(MSSQL、Sybase)では
SET QUOTED_IDENTIFER ON
とコマンドして設定すれば「"」を
使用でき、"group"のようなテーブル、カラム
も作れる。
でもお勧めしないけどね。
選択する時も、コマンド打って、
「"」でくくらないといけないよ。

漢字(Wバイト)の名称のことだけど、
システム関連者がすべて日本人
使用OS(文字コード)が一つ
なら問題ないと思うけど。
純日本製のDBなんてあんまりないし
(HiRDBなんてそうなのかな)
見知らぬバグが潜んでいる可能性も
無きにしもあらずだからねぇ〜。
「障らぬ神にたたりなし」のような。。。

93 :デフォルトの名無しさん:01/09/14 09:34
>>73
DBMSでは予約語がカラム名に
なっちゃってたね。
→DBMSによっては・・・

94 :デフォルトの名無しさん:01/09/14 20:29
>>92
余計なリスクを抱え込まないという姿勢には賛成だが
日本語 表名・項目名はすでにかなり浸透していて「見知らぬバグ」
に自分だけが遭遇する状態じゃないと思うんだけど、どう。
ずっと昔「表」という文字が含まれる表名で障害が出たことがあるので
確信はないんだけどね。

95 :デフォルトの名無しさん:01/09/14 20:42
独学でSQLやってて自分のレベルが分からない人に自信を与えてくれる
・・・いいスレだ

96 :デフォルトの名無しさん:01/09/14 22:08
SQLの理論系でおすすめな本ありますか?
背景とかそゆのがわかる本きぼーんです

97 :デフォルトの名無しさん:01/09/14 22:13
>>96
理論系かどうかはともかく
「プログラマのためのSQL」J.セルコ著
は押えておくといいんじゃないかな

98 :デフォルトの名無しさん:01/09/16 11:34
データベースのはなかったけど、サーバのすべてというのがあったから読んだ。
良かった。
「"図解でわかる〜" また"猿でもわかる〜"たぐいのかよ(藁」
とか思ってた俺がアホだった。

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

99 :デフォルトの名無しさん:01/09/16 11:35
これ。
http://www.njg.co.jp/c/zukai.htm

100 :デフォルトの名無しさん:01/09/16 20:41
SELECT xxx AS yyy
の yyy に半角ピリオドを含む文字列を使いたいんだけど、どうしたらいいの?

101 :デフォルトの名無しさん:01/09/17 02:35
>>98 小泉さんは「図解でわかるデータベースのすべて」も出してますよ
おすすめです

「サーバのすべて」と間違えて「Linuxサーバーのすべて」を
買ってしまわないように注意
(「Linuxサーバーのすべて」と「Linuxのすべて」も違うよ)

102 :デフォルトの名無しさん:01/09/17 03:12
「図解でわかる SEXのすべて」

見開き2ページ1項目でビジュアル解説。一般ビジネスマンから技術者まで読める実践的入門書の決定版!

【目次】
第1章 SEXとは何だろう
第2章 SEXの基本
第3章 SEXの構造
第4章 SEXの表示
第5章 SEXとリンク
第6章 SEXとプログラミング
第7章 SEXとデータベース
第8章 SEXの応用と未来

103 :デフォルトの名無しさん:01/09/17 04:24
>>102
ちゅうがくせい
発見!
寝ましょうね。明日のために

104 :1:01/09/18 19:31
久しぶりにこのスレ見たケド、何かすごいですね・・
私には何の事だかチンプンカンプン・・
試験は何とか不可にはならなかったので安心しているところです。

105 :デフォルトの名無しさん:01/09/18 20:16
SELECT * FROM SAGE.MONA

106 :デフォルトの名無しさん:01/09/18 22:20
その昔accessのしごとで
テーブルの仕様書に
住所(1),住所(2),電話番号(1),電話番号(2)
とあったので、そのまま項目名に使ったら
SQLでエラーになったしまった。()はだめだよね

107 :デフォルトの名無しさん:01/09/19 00:16
_(アンダースコア)を使うと問題が出ないのでよく使います。(住所_1)

108 :デフォルトの名無しさん:01/09/21 10:43
テーブルA,Bとあって、
「Aのカラム1="0"」または「Aのカラム2="9999"」または
「Aのカラム3=Bのカラム3 かつ Aのカラム4=Bのカラム4 かつ Aのカラム5
がBのカラム5、カラム6の間」と言う条件のデータを抽出したいのですが
どのようにかけばいいのでしょうか?

109 :デフォルトの名無しさん:01/09/21 10:44
上の3番目の条件は「Aのカラム3=Bのカラム3 かつ Aのカラム4=Bのカラム4 かつ Aのカラム5
がBのカラム5、カラム6の間」に合わないデータです。

110 :デフォルトの名無しさん:01/09/21 13:21
そのまま書けばいいじゃん。

a.col1 = '0' or
a.col2 = '9999' or
(
a.col3 = b.col3 and
a.col4 = b.col4 and
a.col5 between b.col5 and b.col6
)

111 :厨房:01/09/21 15:17
下記のようなテーブルで特定の商品コードのレコードのうち、納品日時
が最新のもののコメントが取得したいんです。

SELECT コメント FROM 納品履歴 WHERE 商品コード='12345' AND
納品日時=(SELECT MAX(納品日時) FROM 納品履歴 WHERE 商品コード='12345' GROUP BY 商品コード)

こんなSQLを作ってみました。
これでも一応動くんですがテーブルを2回走査していてすごく無駄なような気がします
もうちょっと効率の良い書き方ってあるんでしょうか?
それともDBMSがこれくらいは最適化してくれるんでしょうか?
一応SQL-Server2000です

商品コード 納品日時  コメント

12345 2001/09/20 OKだよ
12345 2001/09/22 駄目だだめだ
12345 2001/09/23 上司に聞いてきます
12345 2001/09/24 よっしゃ
11111 2001/09/20 あいうえお
11111 2001/09/20 あああああ
22222 2001/09/21 かきくけこ
22222 2001/09/21 いいいいい

112 :デフォルトの名無しさん:01/09/21 15:36
>>111
order by つかえば?

113 :111:01/09/21 15:56
>>112 レスありがとうです
たしかに取得したレコード全部使う必要はないですね。
ただソートするレコードが多いときは遅くなったりしませんか?
インデックス使えばいいんでしょうか、、、
DBMSの呼出時間を考えなければカーソルで全部のレコード見て
最大を取り出してもあまり変わらない?

114 :デフォルトの名無しさん:01/09/21 16:06
>>111
SELECT コメント FROM 納品履歴 WHERE 商品コード='12345'
GROUP BY 商品コード HAVING 納品日時=MAX(納品日時)

ではどう?

115 :111:01/09/21 16:51
>>114 レスありがとうです でも動きません(悲)

>列 '納品履歴.コメント' は集計関数または GROUP BY 句に含まれていないので、選択リスト内では無効です。

それで試しに コメント を 納品日時 に変えてみたんですけど
こんどは下記のエラーがでてしまいました。

SELECT FROM 納品履歴 WHERE 商品コード='12345' GROUP BY 商品コード HAVING 納品日時=MAX(納品日時)

>列 '納品履歴.納品日時' は集計関数または GROUP BY 句に含まれていないので、HAVING 句内では無効です

いろいろやってみているのですが、、いまいち上手くいかないようです。
あきらめて商品コードの検索結果レコードから自分で最大日付を捜すので
我慢しようかと思えてきました、、、

116 :デフォルトの名無しさん:01/09/21 17:21
select 先頭(コメント)、 max(納品日時) from 納品履歴 商品コード = '12345' group by 商品コード;

 

117 :デフォルトの名無しさん:01/09/21 17:21
select 先頭(コメント)、 max(納品日時) from 納品履歴 商品コード = '12345' group by 商品コード;

先頭っていうのは確か先頭の行を取得する集合関数があったはず。
 

118 :333:01/09/21 17:40
一行のSELECT文で結果を複数行持ってくる時に、
無条件に最初に引っ張ってきたレコードのみを
結果として受け取る方法はありますか?

set rowcount 1
は使ってはいけないんです。TT

119 :デフォルトの名無しさん:01/09/21 18:05
>>118
それなら
素直にカーソル使うしかないんじゃないかな。
なんでset rowcount使っちゃいけないの?
また0に戻せばいいじゃん。

120 :111:01/09/21 18:32
はっ! >>118-119 どうも!

121 :333:01/09/21 19:45
自己解決。
select top 1 〜
とすればOKになりやした。

122 :デフォルトの名無しさん:01/09/28 14:18
SQLおすすめ本おしえて。
セルコのは持ってる

123 :デフォルトの名無しさん:01/09/30 20:12
select 'SQL92 規格書'

124 :デフォルトの名無しさん:01/09/30 20:50
     ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´∀`)/<先生!また勉強しなおしですか?
 _ / /   /   \___________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
    .||          ||

125 :デフォルトの名無しさん:01/10/01 19:00
「フル結合」と「片側結合」って何ですか?

126 :デフォルトの名無しさん:01/10/01 19:11
>>125
うん?なんだろう?
完全外部結合(full outer join)と左(右)外部結合(left, right outer join)のことかな・・・。
googleでも引っかからないなぁ・・・
どっかのベンダーの方言かな?

127 :デフォルトの名無しさん:01/10/01 19:39
>>125
体位の事だろ

128 :デフォルトの名無しさん:01/10/02 18:15
>>111
SELECT コメント FROM 納品履歴
WHERE 商品コード='12345'
AND 納品日時=(SELECT MAX(納品日時) FROM 納品履歴 WHERE 商品コード='12345' GROUP BY 商品コード)
より
SELECT a.コメント FROM
(SELECT コメント,納品日時
FROM 納品履歴
WHERE 商品コード='12345') a,
(SELECT MAX(納品日時) AS 納品日時
FROM 納品履歴
WHERE 商品コード='12345') b
where a.納品日時 = b.納品日時
の方が速いと思う。
でも、オレだったら挿入/更新をトリガにしたスナップショット
のテーブルを作っておくな。

ORACLEしか触った事無いんで、間違ったらスマソ

129 : :01/10/16 15:27
>122
技術評論社「はじめてのSQL」

130 :デフォルトの名無しさん:01/10/16 18:01
>>128の表って更新可能なの?

131 :デフォルトの名無しさん:01/10/16 18:56
完全外結合って実現できているデータベースってあるの?

132 :デフォルトの名無しさん:01/10/24 02:31
>>131
>完全外結合って実現できているデータベース
って何ですか?
全部の項目にFKでも張ってあるってこと?

133 :111:01/10/24 02:37
>>128
すっかりあきらめて遅いままほっといてたよ!
ありがとう!勉強になったよ!

134 :デフォルトの名無しさん:01/10/24 03:28
>>131
SQL ServerとPostgreSQLにはFULL OUTER JOINというキーワードがあるね。
SQL92準拠の振る舞いをするかどうかは知らない。

>>132
LEFT OUTER JOINとRIGHT OUTER JOINをUNIONしたようなもの。

135 :132:01/10/25 00:59
>>134
>LEFT OUTER JOINとRIGHT OUTER JOINをUNIONしたようなもの。
ふんふん。勉強してみます。ありがとうございます!
(最後の「〜をUNIONしたようなもの。」のイメージがわかんないなー。)

136 :素人:01/10/25 13:03
SQLで、列内の指定された年月情報を抽出したいんですが、
列内の年月表示が ex)1999-5-20 00:00 で記載されており
SELECT*FORM テーブル名 WHERE 年月表示=1999-5-20 00:00
又は
SELECT*FORM テーブル名 WHERE 年月表示='1999-5-20 00:00'
で抽出できません。誰かお力添えを頂きたく候。

137 :デフォルトの名無しさん:01/10/25 13:15
>>135
PostgreSQLの場合(textは、可変長テキスト)
PostgreSQLはSQL92準拠の動きをするみたい。

create table t1 (code int, name text);
create table t2 (code int, name text);

insert into t1 values(100, 'aaa');
insert into t1 values(101, 'bbb');

insert into t2 values(100, 'ZZZ');
insert into t2 values(200, 'AAA');
insert into t2 values(201, 'BBB');
insert into t2 values(202, 'CCC');

select t1.code, t2.code, t2.name from t1 left outer join t2 on (t1.code = t2.code);
code | code | name
------+------+------
 100 | 100 | ZZZ
 101 |   |
(2 rows)

select t1.code, t2.code, t2.name from t1 right outer join t2 on (t1.code = t2.code);
code | code | name
------+------+------
 100 | 100 | ZZZ
   | 200 | AAA
   | 201 | BBB
   | 202 | CCC
(4 rows)

select t1.code, t2.code, t2.name from t1 full outer join t2 on (t1.code = t2.code);
code | code | name
------+------+------
 100 | 100 | ZZZ
 101 |   |
   | 200 | AAA
   | 201 | BBB
   | 202 | CCC
(5 rows)

138 :デフォルトの名無しさん:01/10/25 13:19
>>136
使用しているRDBMSの名称と、'年月表示'列の型を書いてくれ。

139 :素人:01/10/25 13:59
お騒がせしました。
「.」
が式の中に紛れてました。
すいません。

140 :343:01/10/25 15:51
;

141 :デフォルトの名無しさん:01/10/25 16:33
っていうか、Oracle 9i Databaseって、何気にCore SQL99準拠なんですね。

142 :デフォルトの名無しさん:01/10/25 23:43
ショーック! SQLってシークェルって読むのか!

143 :デフォルトの名無しさん:01/10/26 00:30
>>142
>シークェル
と言っている人は見たことがないっす。
僕は「えすきゅーえる」といってます。

144 :デフォルトの名無しさん:01/10/26 00:58
"SQL pronounce sequel"で検索中。よくわからん。

145 :デフォルトの名無しさん:01/10/26 03:48
http://www.itworld.com/nl/db_mgr/05142001/

<quote>
By the end of the System/R project,
IBM had implemented a language that supported System/R's
multi-table queries and multiple-user access called
the Structured English Query Language (SEQUEL).
The name later was shortened to Structured Query Language (SQL).
Today, we still pronounce the abbreviation as "sequel" because of
these early roots.
</quote>

146 :デフォルトの名無しさん:01/10/26 16:54
リレーショナルデータベースは1970年にIBMサンノゼ研究所(現Almaden Research Center)に
所属していたE.F.コッド博士が発表した論文,"A Relational Model of Data for Large Shared Data Banks"
により原理が世に示された.同時期に概念設計されたデータベース操作言語がSEQUELである.

初めてのリレーショナルデータベースは1977年に完成したサンゼノ研究所のSystem Rで,
SEQUELのサブセットであるSQLが装備された.そうした経緯からSQLをシークウェルと読む習慣が残っている.

147 :デフォルトの名無しさん:01/10/26 18:56
なるへそなるへそ。ほんじゃもうえすきゅーえるでええね。

44 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)