• ベストアンサー

SQL文の質問です

社員表(EMP表)と給与等級表(SALGRADE表)を結合したいのですが下記を実現するSQL文がわかりません。 SALGRADE表は等級(grade)、最低給(Losal)、最上給(Hisal)の3つを持っています。 EMP表の月給(Sal)と、SALGRADE表の最低給(Losal)と最上給(HIsal)とを照らし合わせて該当する等級(grade)をEMP表に結合したいのですが、適切なSQL文がありましたら教えてください。 基本的にはoracleを使用していますが、できればmysqlで実現可能なSQL文も合わせて教えてください。

  • volca
  • お礼率92% (13/14)

質問者が選んだベストアンサー

  • ベストアンサー
  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.1

ちょっと文面だけからでは要件が飲み込みにくいのですが SELECT EMP.*, SALGRADE.grade FROM EMP, SALGRADE WHERE EMP.sal <= SALGRADE.hisal AND EMP.sal >= SALGRADE.losal でよいのではないしょうか。

volca
質問者

お礼

早速のご回答ありがとうございます。 質問の書き方が悪く、わかりにくかったとは思いますが複数のgradeがある中からどのgradeに該当するかを出したかったのです。 ただ、私の早とちりで今回はそもそも結合する必要がありませんでした。副問い合わせで解決できそうです。 ご迷惑をおかけしましたが、回答いただきありがとうございました。

関連するQ&A

  • MySQL show create table ~と同じOracleでのSQL文

    Mysqlでテーブルを作成するステートメントを表示するSQL文 ” SHOW CREATE TABLE テーブル名”に該当する、oracleの SQL文ってありますか?

  • “SQL文を作るSQL”の書き方ってありますか?

    “SQL文を作るSQL”の書き方ってあるのでしょうか? 例えばなのですが、表同士を大量に結合して条件に当てはまったものをアップデートするようなSQLを書く場合、文法を間違うとエライこちゃ!になる場合がありますよね。 そういう場合って結合するんじゃなくて結合したSELECT文を使って条件だしをして1件1件単純アップデートをした方が安心ですよね。 (定期処理であれば効率が悪いですが・・・だったらプロシージャですか・・・というところになりますがごくたまにや1回きりのデータ変更など) そういったことをやるほうほうはありますでしょうか? 仕様はSQL99です。

  • こんなことできるSQL文はありますでしょうか?

    お世話になります。 oracle9iとPostgreSQL7.3のいずれかで 実現したいのですが。 こんな並びのデータを no | resno | title ----+-------+------ 1 | 1 | あ 2 | 1 | い 3 | 1 | う 4 | 4 | え 5 | 1 | お 6 | 4 | か 7 | 7 | き 8 | 1 | く 9 | 9 | け こんな風に no | resno | title ----+-------+------ 9 | 9 | け 7 | 7 | き 8 | 1 | く 5 | 1 | お 3 | 1 | う 2 | 1 | い 1 | 1 | あ 6 | 4 | か 4 | 4 | え SQL文一発で並び替えることは できますでしょうか? resnoのグループごとをnoの降順で 表示したいのですが、、、 可能なのか不可能なのかもわかりません。 可能であればSQL文をご教授いただければ 幸甚です。 よろしくお願いします。

  • OracleからMySQLへのSQL文の変換

    Oracleを利用するJavaプログラムが現在あり、 これをMySQLを利用するように作り変えようとしていますが、 プログラムで使用されているSQL文を変更することが 必要になりました。 そこで、Oracle用のSQLをMySQL用のSQLに変換して くれるツールはないでしょうか? もしなければ、手動で変換するのに必要な 注意点等教えていただければと思います。

    • ベストアンサー
    • MySQL
  • 自分自身のテーブルを参照して更新

    ORACLEで簡単にできたのがSQLServerで上手くできなくて困っています。 下のようなSQLです。SQLServerでUPDATE時に別名を付けようとすると エラーになってしまいます。良いSQLをご教授頂ければ、と思います。 update emp e set sal=  (select max(ee.sal) from emp ee where e.deptno=ee.deptno)

  • MysqlのSQL文について

    AccessとMysqlを用いてデータベースシステムを作成しています。 添付図の左の表から,右の表の品番と枝番が一致するデータを削除する場合(今回はaaaの2と6)は,どのようにSQL文を記述すればよいでしょうか? Do Untilで1行毎に比較して削除する方法では時間がかかり過ぎたため,SQL文で一度で処理できないかと考えたのですが,SQL文をどのように記述すればよいかわかりませんでした... お分かりになられる方がいらっしゃいましたら,ご教授宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 表の結合に関する質問

    EMP表 EMPNO ENAME JOBNO SAL DEPTNO ----- ------ ------ ----- ------ 1000 ADAMS 100 1000 10 1010 MILLER 200 1200 10 1020 SCOTT 100 800 30 DEPT表 DEPTNO DNAME EMPNO ----- ------ ------ 10 PERSONNEL 1000 20 ACCOUNT 30 DESIGN 上記表に対して、 [SQLコマンド] select e.empno , e.ename , dname , m.ename from emp e join dept d using(deptno) left outer join emp m on d.empno = m.empno; のSQL文を打つと、 EMPNO ENAME DNAME ENAME ----- ------ ------ ----- 1000 ADAMS PERSONNEL ADAMS 1010 MILLER PERSONNEL ADAMS 1020 SCOTT DESIGN と表示されますが、これが表示される過程がわからないです。 emp表とdep表をdeptno列で結合 from emp e join dept d using(deptno) この結合により EMPNO ENAME DNAME ・・・・・・ ----- ------ ------ ----- 1000 ADAMS PERSONNEL ・・・・・・ 1010 MILLER PERSONNEL ・・・・・・ 1020 SCOTT DESIGN ・・・・・・ となります。この部分は分かりますが、 次の、この表とemp表をempnoで結合 left outer join emp m on d.empno = m.empno; した際に、 EMPNO ENAME DNAME ENAME ----- ------ ------ ----- 1000 ADAMS PERSONNEL ADAMS 1010 MILLER PERSONNEL ADAMS 1020 SCOTT DESIGN となりますが、ENAME(4番目の列)で ADAMSと表示される過程が見えてきません。 この部分の過程について、ご教授の程お願い致します。

  • SQLの書き方について

    すみません、SQL初心者なので変な質問かもしれませんが、、SQLの書き方がわからないので教えてください。以下のような二つのテーブルがあるとします。 (Table: EMP2014) EMPNO | EMPNAME | TEL 100 | TARO | 03-1111-2222 101 | HANAKO | 03-2222-3333 (Table: EMP2015) EMPNO | EMPNAME | TEL 200 | JIRO | 03-3333-4444 201 | KYOKO | 03-4444-5555 このテーブルからSQLを実行して、以下のような結果を得たいです。 EMPNO | EMPNAME | TEL 100 | TARO | 03-1111-2222 101 | HANAKO | 03-2222-3333 200 | JIRO | 03-3333-4444 201 | KYOKO | 03-4444-5555 JOINというのは二つのテーブルを左右に並べた形での結合だと思うんですけれど、僕がやりたいのは内容の似たテーブル(上記の場合全く同じカラム)を上下に単純にくっつけて一つの出力結果にしたいです。ビューなどをつくって仮想的に一つの表にできるものなのでしょうか? とても簡単なのかも知れませんが、、宜しくお願いします。

  • 翔泳社オラクルマスター教科書Silver

    翔泳社オラクルマスター教科書Silverを使ってシルバー取得の勉強をしていますが、どうもこの本の解答に納得のいかない点が多すぎで、このあいだから立て続けに質問してしまってごめんなさい。 何しろ知識が無さ過ぎて、本があっているのか、自分がおかしいのか、判断しかねるのです。 で、今日はこの問題です。 ---問題ここから--- 次の結合文の中で実行時にエラーになるものをひとつ選びなさい a.SELECT DEPT.DEPTNO,EMP.ENAME FROM DEPT D,EMP E WHERE DEPT.DEPTNO=EMP.DEPTNO; b.SELECT ENAME,SAL,GRADE FROM SALGTADE,EMP WHERE SAL>=LOSAL AND SAL<=HISAL; c.SELECT DEPT.DEPTNO,DMP.ENAME FROM DEPT,EMP WHERE DEPT.DEPTNO(+)=EMP.DEPTNO; D.SELECT D.DEPTNO,E.ENAME FROM DEPT D,EMP E WHERE D.DEPTNO=E.DEPTNO; ----問題ここまで---- で、この答えが選択肢aとなっているのですが、納得できません。 解説によれば、「FROM句で二つ以上の表を指定した場合、SELECT句やWHERE句で指定する列名は、どの表の列か判断できなければいけません。」 とあります。 つまり、正解は「どの表か明示的に表示していない」選択肢b だと思うのですが、やはり教科書があっていますか?? 私の考え方はどう間違っているのか、教えていただけたら嬉しいです。 どうかよろしくお願い致します☆

  • php上でSQL文を実行した結果と、phpMyAdminで実行した結果が違う

    ☆実行環境 php5.3 MySQL4.0 $sql="SELECT * FROM テーブル名 WHERE フィールド名 like '".$変数."%'" php上で上記のようなSQL文を実行させようとしています。 テーブルには該当する行がいくつかあるのですが、ページ上では1行も表示してくれません。 mysql_num_rowsの返り値を見ると0になっています。 SQL文の組み立てがおかしいのかと思い、phpMyAdmin上でSQL文を実行すると、 きちんと欲しい内容が表示されます。 とするとphpでのSQL文の書き方がおかしいのだと思います。 どこかおかしいのかご教授ください。

    • ベストアンサー
    • PHP

専門家に質問してみよう