質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

4回答

1149閲覧

データベースのクエリでの検索方法について

salud

総合スコア215

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2019/02/07 11:21

※データ・テーブル定義などは適当です。

以下のようなデータベースが存在するとします。
また、この中から、AND検索をしたいと考えています。

たとえば、

関東地方にある、人口500以上の都道府県

というようなクエリを書くことは可能でしょうか?

どのようにすればよいのか見当も付きません。
一般的な検索方法を教えていただけますと幸いです。

よろしくお願い申し上げます。

idprefecturepopulation
1東京都927.3
2大阪府269.1
3北海道547.4
4愛知県726.3
5沖縄県142.3
idstate
101北海道地方
102東北地方
103関東地方
104中部地方
105近畿地方
106中国地方
107四国地方
108九州・沖縄地方
prefecturestate
1103
2105
3101
4104
5108

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

SQLはきちんと勉強してください。以下のURLを参考に。
内部結合 INNER JOIN

SQLで使われるテーブルはCREATE TABLEされていなければなりません。テーブル内のデータはINSERTされていなければなりません。ですから、質問にCREATE TABLEやINSERTを提示した方が適切な回答が付き易いです。

投稿2019/02/07 11:38

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

INNER JOINでテーブルを結合させ、WHEREで表示させたい行をフィルタします。

mySQL

1CREATE TABLE Prefecture (id integer AUTO_INCREMENT, prefecture varchar(100), population float, PRIMARY KEY (id)); 2INSERT into Prefecture(prefecture, population) values("東京都", 927.3),("大阪府",269.1),("北海道",547.4),("愛知県",726.3),("沖縄県",142.3); 3 4CREATE TABLE State (id integer AUTO_INCREMENT, state varchar(100), PRIMARY KEY (id) ); 5ALTER TABLE State AUTO_INCREMENT = 101; 6INSERT into State (state) values("北海道地方"),("東北地方"),("関東地方"),("中部地方"),("近畿地方"),("中国地方"),("四国地方"),("九州・沖縄地方"); 7 8CREATE TABLE Relations (pre_id integer, state_id integer); 9INSERT into Relations (pre_id,state_id) values (1,103),(2,105),(3,101),(4,104),(5,108); 10 11SELECT pre_id, state_id, prefecture, population, state FROM Relations 12 INNER JOIN Prefecture ON Prefecture.id = Relations.pre_id 13 INNER JOIN State ON State.id = Relations.state_id 14 WHERE state = "関東地方" AND population > 500

投稿2019/02/07 12:25

unotalk

総合スコア124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

salud

2019/02/14 09:59

INSERT文まで書いていただき、恐れ入ります。。 簡単に確認まで出来ました!ありがとうございました。
guest

0

prefectureに対してstateは1つしかないのでテーブルを分割する意味がないです

idprefecturepopulationstate
1東京都927.3103
2大阪府269.1105
3北海道547.4101
4愛知県726.3104
5沖縄県142.3108

というデータでもてば検索効率があがります

投稿2019/02/08 01:30

yambejp

総合スコア114850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一般的な検索方法を教えていただけますと幸いです。

基本はエクセルなどのフィルターと同じです。
エクセルで別シートに情報が分かれていると考えると面倒ですよね。

そういう時、一つのシートに纏めると単なるフィルターで絞り込めます。

エクセルだと大変ですけど、SQLだとjoinで簡単に纏める事が出来ちゃう。
基本はそれらの一つの表に纏めて、そこに条件を付加します。
条件としては、「地方」と「人口」ですね。

SQL

1select p.* 2from prefecture_list p 3 inner join map m 4 on p.id=m.prefecture 5 inner join state_list s 6 on m.state=s.id 7where s.state='関東地方' and p.population>=0.05

※テーブル名を以下に仮定
都道府県別人口:prefecture_list
地方名:state_list
上記の関連マップ:map

複雑になってくると、チューニングの為に組み替えたりはしますが、基本は先ず必要な表を作ることです。

投稿2019/02/07 12:15

編集2019/02/07 12:30
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問