前提・実現したいこと
こんにちは。お世話になります。プログラミング初心者です。
現在私はOracleとJavaを使った検索画面の作成課題を行っています。
その検索(SELECT)を行うためのSQL文の作成に詰まってしまい、自分で調べてもいまいちわからなかったので質問させていただきます。
まずテーブルの構成ですが、検索対象となるメインのテーブルには名前と出身地や所属の番号の情報が、そして番号に紐づけする形で出身地や所属の名称情報が入ったサブテーブルが複数存在しています。
メインテーブルのカラム名に対応する別テーブルを参照することで名称がわかるイメージです。
例えば、メインテーブルの出身地カラムには1,2,3…とそれぞれ番号のみが入っていて、別テーブルに1は東京、2は千葉…といった番号と名称の情報が格納されています。
検索や表示結果には名称を使いたいと考えています。
名前、または所属や出身地名で検索をし、その結果を一覧で取得します。
そのための記述方法を教えていただきたいです。
(SELECT指定はサブテーブルのカラムですが、FROM指定はメインテーブルを、そして検索条件でメインとサブを紐付けて参照するイメージでいます…)
取得イメージは下記のような感じです。(例……出身地:東京で検索をした場合)
名前 所属 出身地
田中太郎 営業部 東京
佐藤一郎 人事部 東京 etc...
:
:
また可能であれば、メインテーブルのカラム順に検索結果を一度に取得できたらと思っていますが、まとめて抽出できるsqlの記述方法などはありますでしょうか?(欲張りですみません)
知恵を貸していただけたらと思います、よろしくお願いします。
テーブル構成
テーブル名
MainData
カラム名 データタイプ 他
1 ID int 主キー
2 FulName varchar
3 DepartmentID int 外部キー
4 StateID int 外部キー
テーブル名
DepartmentData
カラム名 データタイプ 他
1 DepartmentID int 主キー
2 DepartmentName varchar
テーブル名
StateData
カラム名 データタイプ 他
1 StateID int 主キー
2 StateName varchar
### テーブル作成とデータ挿入のSQL文
SQL
1--テーブルの作成 2CREATE TABLE MainData ( 3ID int, 4FullName varchar(30), 5DepartmentID int, 6StateID int); 7 8CREATE TABLE DepartmentData ( 9DepartmentID int, 10DepartmentName varchar(30)); 11 12CREATE TABLE StateData ( 13StateID int, 14StateName varchar(30)); 15 16--主キーの設定 17ALTER TABLE MainData 18ADD CONSTRAINT PK_ID PRIMARY KEY (ID); 19 20ALTER TABLE DepartmentData 21ADD CONSTRAINT PK_DID PRIMARY KEY (DepartmentID); 22 23ALTER TABLE StateData 24ADD CONSTRAINT PK_SID PRIMARY KEY (StateID); 25 26--外部キーの設定 27ALTER TABLE MainData 28ADD FOREIGN KEY(DepartmentID) 29REFERENCES DepartmentData(DepartmentID); 30 31ALTER TABLE MainData 32ADD FOREIGN KEY(StateID) 33REFERENCES StateData(StateID); 34 35 36--データの挿入(仮データです) 37INSERT INTO DepartmentData VALUES (1,'営業部'); 38INSERT INTO DepartmentData VALUES (2,'人事部'); 39INSERT INTO DepartmentData VALUES (3,'広告部'); 40 41INSERT INTO StateData VALUES (1,'東京'); 42INSERT INTO StateData VALUES (2,'神奈川'); 43INSERT INTO StateData VALUES (3,'千葉'); 44 45 46INSERT INTO MainData VALUES (1,'田中太郎',1,1); 47INSERT INTO MainData VALUES (2,'佐藤一郎',2,1); 48INSERT INTO MainData VALUES (3,'鈴木花子',3,3); 49 50INSERT INTO DepartmentData VALUES (1,'営業部'); 51INSERT INTO DepartmentData VALUES (2,'人事部'); 52INSERT INTO DepartmentData VALUES (3,'広告部'); 53 54INSERT INTO StateData VALUES (1,'東京'); 55INSERT INTO StateData VALUES (2,'神奈川'); 56INSERT INTO StateData VALUES (3,'千葉'); 57
試したこと
まずはSELECT結果が数字ではなく文字で表示できるようにしたいと考えて調べた結果、結合を使って表示できるということは分かったのですが(下記参照)、これだと格納されたデータの一覧表示となってしまい検索ができず、行いたいこととは見当違いなことをしている気がして、混乱してしまっています。
SQL文
SQL
1SELECT 2a.FullName, b.DepartmentName, c.StateName 3from MainData a 4left outer join DepartmentData b on a.DepartmentID = b.DepartmentID 5left outer join StateData c on a.StateID = c.StateID ; 6
*備忘録用追記
検索条件を付ける際、
自分ではこのように記述をしてエラーを返されていました。
今見ると自分でも不思議ですし、先輩方にも笑われてしまいそうですね。
問題の記述
SQL
1 2--その1 3SELECT a.FullName, b.DepartmentName, c.StateName 4from MainData a 5where a.FullName ='佐藤一郎' 6 left outer join DepartmentData b on a.DepartmentID = b.DepartmentID 7 left outer join StateData c on a.StateID = c.StateID ; 8 9--その2 10SELECT a.FullName, b.DepartmentName, c.StateName 11from MainData a 12where c.StateName IN (select c.StateName from MainData a 13 left outer join StateData c on a.StateID = c.StateID ); 14 15
回答1件
あなたの回答
tips
プレビュー