SQL教えて〜!!
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
NGNG全くのチンプンカンプンで問題の意味すらわかりません・・
門題は「単価が30000円以上で40000円以下の商品名と単価を
表示する命令」です!!これをSQL文にして欲しいのですが・・
0809デフォルトの名無しさん
NGNGbegin trans / commit trans / rollback trans
の事じゃ無いのか?
>>808
SQL92の本は売ってたよ(かなり前に購入した記憶あり)
DDL/DML/DCLの区別は
オラクルマスターのシルバーで必須っす
0810デフォルトの名無しさん
NGNG------------------
1 | Car | Skyline
1 | Food | Curry
2 | Car | March
3 | Car | Mini
3 | Sport | Baseball
4 | Food | Water
4 | Sport | Soccer
4 | Car | K-Truck
のようなテーブルから、
ID | Favortite | name | Favorite | name | Favorite | Name
--------------------------------------------------
1 | Car | Skyline | Food | Curry | |
2 | Car | March
3 | Car | Mini | Sport | Baseball
4 | Car | K-Truck | Food | water | Sport | Soccer
のように、ID1つに対し1行にまとめたいのですが、どう記述していいのかわかりません。
"Favorite"は最大3つとして、全員が入力していない可能性があります。
0811デフォルトの名無しさん
NGNGカラムへの展開はどうしてもデッドになるけど。
select
ID,
max(decode(Favorite, 'Car', Name, null)) FavCar,
max(decode(Favorite, 'Food', Name, null)) FavFood,
max(decode(Favorite, 'Sport', Name, null)) FavSport,
from tbl
group by
ID
みたいなかんじ。
0812810
NGNGできました。ありがとうございます。
Decode()が味噌だったんだ。と思ったらmaxもしなきゃ出力されないんですね。
で、うちはオラコーではないので書き換えてみました。
select ID_USER,
max(CASE
WHEN Favorite = 'Car' THEN Name
ELSE null
END) FavCar,
max(CASE
WHEN Favorite = 'Food' THEN Name
ELSE null
END) FavFood,
max(CASE
WHEN Favorite = 'Sport' THEN Name
ELSE null
END) FavSport
from t_favor
group by ID_USER
0813デフォルトの名無しさん
NGNG実務でもある程度は通用しますか?それともゴールドくらいきっちり持っていないと
駄目ですか?
0814デフォルトの名無しさん
NGNGらしい。私はシルバーしか持ってないけど。
0815デフォルトの名無しさん
NGNGそんなもんさ
アンタら資格にとらわれすぎ。。。とか言ってみる
0816デフォルトの名無しさん
NGNGしかし、一旦職場から離れると能力を評価する基準・売り込むツボとしては■は大切だといってみる
0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNGと、教えられる人間はいないのかね?最近は
>>815殿が述べている点については同意いたしまするよ
0819デフォルトの名無しさん
NGNGselect 'ABC&DEF' from dual;
みたいな事をやりたいんだけど、&を普通に表示する
にはどうすれば良いのでしょうか?
0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNGおお、なるほど。 chr(38) とかやってて助長だなぁ
とか思ってたけど、一文字だと普通に & で解釈される
のね。もっと単純に、オプションで&を解釈しないように
できればベストだけど、これでも良いや。
さんくす
0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNG以下のようなテーブルで、TYPEを条件に「犬猫ハムスター」「猿人」「象」というような結果を出したいのですが…さっぱり分かりませんでした。よろしくお願いします。
ANIMAL
CODE TYPE NAME
0001 A 犬
0002 A 猫
0003 A ハムスター
0004 B 猿
0005 C 象
0006 B 人
0825デフォルトの名無しさん
NGNGグループ(TYPE)ごとの連番があればなお楽
770くらいからのレスを読んでわからないなら
プログラムで書いた方がええと思う
0826デフォルトの名無しさん
NGNG--------+--------------------------------------
1 | いのうえようすいイノウエタロー
っつーのを
select id, translate(text,'いのうえようすい,'ほげほげ')
from song
where id = 1
ってやってもダメなんだけどポスグレに replace みたいな関数無いのかな?
文字列を置き換えるんじゃなく「文字列長」を置換するの!!
0827デフォルトの名無しさん
NGNG0828minamo
NGNG複数のテーブルに同じキーが指定してある状態で
各テーブルのデータが揃っていないデータを挙げよ。
というSQLを組みなさい。
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG本当に問題をだしているのですか?
知っている人に教えて欲しいのとは違うのですか?
0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNG一致するキーを条件に抽出するだけだろ。
0833デフォルトの名無しさん
NGNG「同じようなレイアウトのテーブルが複数あり、それぞれ
全フィールドを比較し一致しないレコードを抽出せよ」
じゃないの?w
0834minamo
NGNG商品テーブル(商品番号、商品名)
在庫テーブル(商品番号、在庫数)
というテーブルがあり、
商品テーブル
商品番号 商品名
100 RedHat Linux
200 Windows2000
300 WindowsXP
在庫テーブル
商品番号 在庫数
100 3000
300 2500
というデータがあるとき、各テーブルに共通しない商品番号 200 の商品だけを
抽出するSQLを組み立てる。
0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNGを探すクエリーを書くのに少々悩んでいます。
●データ定義
CREATE TABLE MyTable (
keyVal INTEGER NOT NULL,
datVal INTEGER NOT NULL
);
INSERT INTO MyTable VALUES ( 1, 1);
INSERT INTO MyTable VALUES ( 2, 2);
INSERT INTO MyTable VALUES ( 3, 3);
INSERT INTO MyTable VALUES ( 4, 1);
INSERT INTO MyTable VALUES ( 5, 2);
INSERT INTO MyTable VALUES ( 6, 3);
INSERT INTO MyTable VALUES ( 7, 1);
INSERT INTO MyTable VALUES ( 8, 2);
●操作
SELECT * FROM MyTable t1 WHERE NOT EXISTS (
SELECT * FROM MyTable t2 WHERE t2.keyVal > t1.keyVal
AND t2.keyVal < 7 AND t2.datVal < 3
)
AND t1.keyVal < 7 AND t1.datVal < 3;
●結果
KEYVAL DATVAL
============ ============
5 2
やりたいのは、keyVal < 7, datVal < 3 という条件を満たしつつ、
その中で keyVal が最大のレコードを取り出すという操作です。
上記の SELECT でちゃんと動きますが、
< 7 と < 3 の条件が NOT EXISTS の内外に二重に存在するのが
どうもスマートでないように思えてなりません。
何かもっとシンプルなやり方はないものでしょうか?
現在使用しているRDBMSはInterBase6です。
0837デフォルトの名無しさん
NGNG0838836
NGNGSELECT * FROM MyTable t2 WHERE t2.keyVal >= t1.keyVal
AND t2.keyVal < 7 AND t2.datVal < 3
);
この形に落ち着きました。
0839デフォルトの名無しさん
NGNG831が答え書いてるし、835が真実を語ってる
0840デフォルトの名無しさん
NGNGFROM 在庫 LEFT JOIN 商品 ON [在庫].[商品番号] = [商品].[商品番号]
WHERE ([商品].[商品番号] Is Null)
0841デフォルトの名無しさん
NGNG基 礎 じ ゃ ん
0842デフォルトの名無しさん
NGNGこっちの方が、きれいじゃない?
SELECT * FROM MYTABLE
WHERE KEYVAL IN (SELECT MAX(KEYVAL)
FROM MYTABLE
WHERE KEYVAL < 7 AND
DATVAL < 3)
とりあえず、ORACLEで確認したどす。
パフォーマンスはわかりません。
ちなみに、DBって何?
0843842
NGNGINはつかえんのか?
さすがにMAXは使えると思うんだが
0845デフォルトの名無しさん
NGNG内部で自動生成されてるからいらない説と
当然つくるべし説を聞いたことがあって悩んでいます。
0846デフォルトの名無しさん
NGNGまずほとんどのRDBMS実装では必要ありません。
「当然つくるべし説」をいっているやつはあやしい。
0847デフォルトの名無しさん
NGNG「当然つくるべし。まぁ、普通は自動生成されるけど。」
0848デフォルトの名無しさん
NGNGSQL Serverなら明示的に作る価値がある場合もある
でも、つくるべし説を唱えている大抵のやつは
index名を自分で決めた物にしたいから程度の
理由な気がする・・・・
0849デフォルトの名無しさん
NGNGPostgreSQL以外でもできますか?
これって標準SQLなのかな。
0850デフォルトの名無しさん
NGNG0851デフォルトの名無しさん
NGNGOracleでは確かできたよ。他は知らん。
0852851
NGNGついでにオライリ本みてみたけど、標準じゃないんじゃないかな。
0853デフォルトの名無しさん
NGNGSQL鯖は
「create table テーブル名 as select....」は出来ないけど
代わりに
「select 項目1, 項目2.... into テーブル名 from なんとか」
って書き方は出来る
0854デフォルトの名無しさん
NGNGオラクル8iで「access」という列名を含むテーブルを
作成しようとしたが、できなかった。
「access」のところで、「ORA-00904: 列名が無効です。」と出る。
なんで?
0855デフォルトの名無しさん
NGNGSQLの予約語だから。
selectって名前の列、紛らわしくて作らないし、作れないでしょ、それと同じです。
0856デフォルトの名無しさん
NGNGライバル商品だから。
というのは冗談でOracleの予約語でしょ。
0857デフォルトの名無しさん
NGNGどうしても作りたきゃ""で囲って下さい。
「create table TBL1 ("access" char(10))」 みたいな感じ。
ただし、こうするとselect時にも「select "access" from TBL1」みたいに
いちいち""が必要。
0858山太郎
NGNGつまり「AKUSESU]だよ。OK?
0860デフォルトの名無しさん
NGNGアンタ、気に入ったよ!
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNG使い分けろ
0863デフォルトの名無しさん
NGNGMySQL
参照整合性制約やストアドプロシージャなんぞいらん
0864デフォルトの名無しさん
NGNGんな訳ねーだろ
0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1008316065/l50
で聞いてみたら?
そういえば、Postgreのスレってどこかにあるのか?
0867デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/php/989375812/
PostgreSQL or MySQL
http://pc.2ch.net/test/read.cgi/unix/955533785/
MySQLってどうよ
http://pc.2ch.net/test/read.cgi/tech/1008316065/
他にもあるかもしれないけど。
こう見てみるとDBの話題ってどこの板が最適なんだろうなぁ。
0868デフォルトの名無しさん
NGNGMySQL vs PostgreSQL
http://pc.2ch.net/test/read.cgi/php/989341364/
ちょっとずれるかもしれないけど
PHP + PostgreSQL
http://pc.2ch.net/test/read.cgi/php/983128806/
PHP + MySQL
http://pc.2ch.net/test/read.cgi/php/983250751/
0869デフォルトの名無しさん
NGNGselect replace(a,NULL,"mona") from table; みたいに。
事情があって、しばらく実験できません。
0870デフォルトの名無しさん
NGNG通常なら
select isnull(a,'moma') from table;だべ
0871デフォルトの名無しさん
NGNGダブルクォーテーションでくくんなよ。
SELECT case when a is NULL then 'mona' else a end FROM table;
0872デフォルトの名無しさん
NGNG今2つのテーブルがあるとします。
tableA
colA colB
---- ------
1 001
1 002
1 003
2 001
2 002
2 003
tableB
colC colD
---- ------
1 001
1 002
1 003
2 001
2 003
tableAにあって、tableBにないデータを取り出したいのです。。
(ここでは colAが「2」colBが「002」)
一応自分でもいろいろ考えてみたのですが、
・where (colA , colB) not in (select 〜〜)等、whereの後に複数カラムを指定できない。
・minus句が使用できない
という状態で行き詰まってます。。何か良い書き方ありますでしょうか。
Linuxでsybase-ase-11.0.3使ってます。よろしくお願いします。
0873デフォルトの名無しさん
NGNGselect *
from tableA a
where not exists(
select *
from tableB b
where b.colC = a.colA
and b.colD = a.colB)
0874872
NGNG0875デフォルトの名無しさん
NGNG番号 担当
10 担当
10 主任
10 課長
10 社長
ってセレクト文で書くと、select 番号、担当 from 表名でこの文を
10 担当 主任 課長 社長
ってな感じで出したいんですけどうしたらいいですか?
もしかしたら、言葉が足りないかもしれまが列で出てきたのを行であらわす方法
っていったほうがいいかもしれませんが、教えてください。
0876デフォルトの名無しさん
NGNGこの条件ではSQL一発では出来ない
よってプログラムでやった方が簡潔に行える
0877デフォルトの名無しさん
NGNG新しいレコードをinsertするときに、ユニークなIDを振るんですが、
このユニークIDを自動的に振ってくれるような機能はないですか?
それとも、そのテーブルをselectして、使われてないIDを自分で
探す必要がありますか?
0878デフォルトの名無しさん
NGNGデータベース Part2
http://pc.2ch.net/test/read.cgi/tech/1020158297/31-33
0879デフォルトの名無しさん
NGNGSQLを使ってはできないつーことですか?
0880デフォルトの名無しさん
NGNGrownumかrowidだな
select rowid , * from tableAとか
0881デフォルトの名無しさん
NGNGどうも教えてくれてありがとうございます。僕はオラクルしか
知らないんですが、これってオラクル以外でも使えるもの
でしたっけ?
ところで、普通それぞれのレコードにIDみたいなのふりますよね。
普通っていうか、それが一般的だと思ってたんですが。
でもそういうことをしないで、かわりにrowidとか使う、っていうのは
一般的なんでしょうか。
rowidとかそのまま使ったら、その行にあるデータが削除されて、
またそこに別のデータがinsertされたら、同じrowid使われちゃうん
でしょうか。だとしたらやばい場合ってけっこうありますよね?
0882880
NGNG>僕はオラクルしか知らないんですが、これってオラクル以外でも使えるものでしたっけ?
オラクルも知ってないんじゃ? rowidはオラクル固有です
一般的にはシーケンスを振ると思われます
IDENTITY(これはSQL鯖だけか?) nextvalなどでやるのだと思われます
手元にマニュアルが無いので調べようが無いですが
rowidはtruncateなどしない限りは、同一のは振られないはずです
最後に一言、キーワードを教えて貰ったら
ちょっとは自分で調べる癖をつけましょう!
0883デフォルトの名無しさん
NGNGお前、あほか? rowidについてはこいつの言ってることであってるじゃん。
なに怒ってんの?
>>881
お前さんの言うとおり。rowidをこういうときに使うのはやばい。
ある一点ではユニークだけど、時間軸で見るとユニークとは言えない。
0884880
NGNG>ある一点ではユニークだけど、時間軸で見るとユニークとは言えない。
自分でデリートしてインサートしたりして確認したことある?
かなーり繰り返さないと、その状況はあり得ないのでは?
怒ってんじゃなくて、教えてくんが好きじゃないの
>>878のリンク先で同じ事書いてんのに関わらず、わかってないのがな
0885デフォルトの名無しさん
NGNG別にOracle固有ってワケじゃないよ。
0886デフォルトの名無しさん
NGNGかなりレアケースでも絶対に起きないといえなければ使っちゃいけない。
0887デフォルトの名無しさん
NGNGそんなおまえさんにもキーワードを教えてあげよう。
PCTFREE/PCTUSED
かなーりとかいう、量(回数)の大小ではない。
タイミングの問題だ。
0888デフォルトの名無しさん
NGNGデータブロックのパラメータでしょ
簡単な説明だけど
PCTFREE:設定値に達した時に、そのデータブロックには挿入できなくなる
PCTUSED:PCTFREEに達したときにPCTUSEDまで空くまで、そのデータブロックに挿入できない
デフォルト値は忘れたが
ようは、データブロックの最大値(PCTFREE)に達して、
その中のデータの半分くらい削除(PCTUSED)したら一緒になる可能性がある
そこと関係があるとは気にしたことが無かったのは事実だけど
そんな事をことを言ったらシーケンスなども有限じゃん
そしたら論理削除フラグで付けるしかねーだろ
SQL文の事じゃないのでsage
0889デフォルト名無しさん
NGNG興味本位で聞く。
シーケンス最大値使い切れるか?
0890デフォルトの名無しさん
NGNG自分も使い切ったことはない
しかし>>886の意見だと
0891デフォルトの名無しさん
NGNGワクワク
0892デフォルトの名無しさん
NGNGPostgres にないのかな?
0893デフォルトの名無しさん
NGNG記憶域は有限なんだからどんな方法でID振ったところで
使い切る可能性は必ずある
0894デフォルトの名無しさん
NGNGだいたいは1000億年以上先だったりする。
0895デフォルトの名無しさん
NGNGハード&ソフトが進化してしまうよ
0896デフォルトの名無しさん
NGNG絶対使い切らないことは保証できるわな。
0897889
NGNG間違いないだろう。
時間軸でのソートも出来るし。
一年3200万秒もないんだから、事実上使い切るのは無理。
0898デフォルトの名無しさん
NGNG順序が作成されました.
0899デフォルトの名無しさん
NGNGこっちの説明に耳かしてくれて、シーケンス使えるのって
大体1/3くらいかなぁ。
0900デフォルトの名無しさん
NGNG日付型って有限なんじゃないの?<調べてないから予測
そんな事を言ったらDB設計自体できなくなるんじゃない
実際さ、クラサバが流行始めた6〜7年前に流行ったマシン構成で、
(PenProでHD10GでNT3.51でORA7.3くらいかな?)
いまも現役稼働してるのって数多くはあるとおもう?
多少はあるとは思うが、移行作業の計画があるとかじゃない
ようは>>895だな
0901889
NGNG連番を取る方法かぁ・・・。
簡単な方法、思いつかないなぁ。
どなたか、簡単な方法があればご教授ください。m(_ _)m
0902デフォルトの名無しさん
NGNG質問の意味が良くワカラン
CREATE SEQUENCE じゃないんの?
話の流れからだと空き番号を見つける方法を聞いてるようにも思うので
select a.recnum from
(select rownum recnum, seq from Table order by seq) a
where a.r <> a.seq
and rownum = 1
もしくは
select min(a.recnum) from
(select rownum recnum, seq from Table order by seq) a
where a.r <> a.seq
こんな感じなんじゃないかな?
0903デフォルトの名無しさん
NGNGwhere a.r <> a.seq → where a.recnum <> a.seq
0904889
NGNGすまんね。質問しなおす。
「連番を確実に取る方法を教えて下さい」。
です。以上。
0905デフォルトの名無しさん
NGNGんじゃシーケンス以外なら
select max(seq)+1 form TableA
じゃないのか?
0906889
NGNGえ〜とゴメンなさい。説明が足りませんでした。
その連番を後々INSERT文でキーとして使う場合を想定してください。
シーケンス使っちゃ連番にならないしなぁ・・・。
どうやるんだろ?
0907デフォルトの名無しさん
NGNG連番 (=番号が飛んでいない) じゃないと嫌だってさ。
0908デフォルトの名無しさん
NGNG削除する時に本当にレコードを削除しないで、削除フラグだけ立てとく。
インサートする時まず削除フラグが立っていてシーケンスが最小のものが
あったらそのレコードを書き換える。
削除フラグが立っているレコードが無ければ、本当にインサートする。
って言うのはどう ?
レス数が900を超えています。1000を超えると表示できなくなるよ。