• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データベースから抽出するときにANDとORを絡める)

データベースからANDとORを絡めた抽出条件の書き方

このQ&Aのポイント
  • データベースからANDとORを絡めて抽出する方法について教えてください。
  • 具体的なデータの例を挙げながら、numberが2以上かつsortが「猫」または「犬」のレコードを抽出するための書き方を知りたいです。
  • 現在試しているクエリ(SELECT * FROM テーブル名 WHERE number>=2 AND sort='猫' OR sort='犬')ではうまくいかないので、正しい書き方を教えてください。

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

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

>SELECT * FROM テーブル名 WHERE number>=2 AND sort='猫' OR sort='犬' ANDとORが横に並んでいると、 SELECT * FROM テーブル名 WHERE (number>=2 AND sort='猫') OR sort='犬' になります。 SELECT * FROM テーブル名 WHERE number>=2 AND (sort='猫' OR sort='犬') が正解です。

macus
質問者

お礼

ありがとうございます! こんなシンプルでよかったんですね。 できました!ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ANDとかORとかを書く位置

    ネットで調べてみても見つからないので皆さんに質問させて下さい。 SQLで結合条件を記述する際、よく仕事現場で見かけるのは以下のような 書き方です。 SELECT うんたら FROM  かんたら WHERE  A = AAA AND   B = BBB OR   C = CCC しかし、個人的にこれは嫌いです。 何故なら結合条件はWHEREの配下に存在するものであり、WHEREと同列 ではないはずだからです。 なので、私が書くとこうなります。 SELECT うんたら FROM  かんたら WHERE  A = AAA AND     B = BBB OR     C = CCC もしくは、そんな書き方しませんが・・・。 SELECT うんたら FROM  かんたら WHERE  A = AAA     AND     B = BBB     OR     C = CCC ここで、最初に示した書き方に最もな理由が知りたいと思います。 好みの問題なのかもしれませんが・・・。 投稿時のインデントが上手くいかないのでいいように解釈して下さい(笑)

  • データベースの設計について

    朝からデータベースの設計について悩んでいます。 テーブルにしたいデータがあるのですが、 それぞれカテゴリーが違うデータがあります。 構造的には少ししか違わないのですが、 これらのデータを1つのテーブルとしてまとめるか、 それとも、それぞれ1つずつのテーブルにするか迷っています。 迷っている理由として: ・同時にアクセスがあった場合、全て一つのテーブルにまとめていると、障害がないか? ・全てを1つのテーブルにすると、多少は構造が違うので、必要のないフィールドが出てしまう。 それぞれを1つのテーブルで分割するということも考えたのですが、 例えば、全てのデータからある特定のデータの検索をかける場合に 不都合なのではないか?と考えてしまいます。 こういう場合には: select * from table_A where field="検索したいデータ"; select * from table_B where field="検索したいデータ"; select * from table_C where field="検索したいデータ"; とテーブルの分だけSQLを実行するしかないのでしょうか? どちらを選択しても、それぞれ一長一短のようで、混乱しています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • データベースのワイルドカードは%ではないの?

    アクセスのテーブルに あ い う があり、 SQL文で *********************************************** SELECT テーブル1.フィールド FROM テーブル1 WHERE (((テーブル1.フィールド) Like "%あ%")); *********************************************** としてもエラーにならないけど、「あ」が抽出されません。 *********************************************** SELECT テーブル1.フィールド FROM テーブル1 WHERE (((テーブル1.フィールド) Like "*あ*")); *********************************************** にすると、「あ」が抽出されます。 アクセスなどのデータベースのワイルドカードは%だと思っていたのですが違うのですか?

  • ORACLEでwhere句の検索順序

    Oracle9i windows2000です。 以下のようなテーブルがあります。 table_a ----------------------- id   NUMBER(10,0) NOT NULL, sort   NUMBER(10,0) NOT NULL, name   VARCHAR(10), text   VARCHAR(255) この条件で、以下のふたつのSELECT文を発行した時、パフォーマンスが良いのはどちらですか? Oracleでは後ろから検索されると聞いたことがあるのですが本当でしょうか? ※idにプライマリキー、 id,sortにインデックスが貼ってあります。 (1)SELECT text FROM table_a WHERE id = 1 AND sort = 2 AND name = 'a' (2)SELECT text FROM table_a WHERE name = 'a' AND sort = 2 AND id = 1

  • 異なるデータベース間のリレーション

    phpmyadmin上の異なるデータベース間のテーブルでリレーションをかけたいのですが、うまくいきません。 new_linkフラグをtrueにすることで異なるデータベースを開くところまではできました。 アドバイスいただけないでしょうか。 ※DB1の中にtable1が、DB2の中にtable2がある //失敗する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql = "select * from table1,table2 where table1.id = table2.id"; $result = mysql_query($sql) or die(mysql_error()); メッセージ⇒Table 'DB2.table1' doesn't exist //これは成功する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql1 = "select * from table1"; $result1 = mysql_query($sql,$con1) or die(mysql_error()); $sql2 = "select * from table2"; $result2 = mysql_query($sql2,$con2) or die(mysql_error());

    • ベストアンサー
    • MySQL
  • SQLで他のテーブルに無いIDの抽出

    MySQLを使っています。 下記は、 1.テーブルaaaには、存在するidのものが、 2.テーブルbbbには、存在しない、 3.テーブルaaaのレコードを抽出したいものです。 "SELECT DISTINCT aaa.*" + " FROM aaa" + " WHERE (aaa.flag = false)" + " AND NOT EXISTS (SELECT * FROM bbb" + " WHERE (aaa.id = bbb.id) AND (bbb.flag = false))" ですが、実行すると、下記エラーがでます。 SQLException:Base table or view not found, message from server: \"Unknown table 'bbb' in where clause" どうすればよいのでしょうか?

    • ベストアンサー
    • MySQL
  • ANDとORの正確な理解が出来ません。。

    ANDとORの正確な理解が出来ません。。 お世話になっております。 現在、翔泳社の黒本を参考書にOracle11gのSQL基礎Iの学習をしております。 1点、どうしても参考書の解説を読んでも理解できない問題がありまして、 質問いたします。 問題:次のSQL文と同じ結果になるものはどちらか選びなさい SELECT * FROM EMP WHERE DEPTNO NOT IN (10,20); a.SELECT * FROM EMP WHERE DEPTNO <>10 or DEPTNO <> 20; b.SELECT * FROM EMP WHERE DEPTNO <>10 AND DEPTNO <> 20; (正答はb.) 問題のSQL文のWHERE句は「DEPTNOが10でも20でもない物」を取ると理解しています。 そしてa.の文は「10でない、または20でない」、 b.の文は「10でない、かつ20でない」、 と理解しています。 テーブルの中にDEPTNOの値が 「5,10,15,20,25」だったとして、 問題文もa.もb.も5,15,25が取られるのではないか? なぜb.のみが正解なのか?どうしても理解できません。 どういうレコードがあるとき、a. と b.の結果は変わるのでしょうか? 基本的な質問をしてしまいますが、宜しくお願いします。

  • Select文のパフォーマンスについて

    Select文のパフォーマンスについて質問です。 (1)select * from table1 where col1='00001' and kbn in (1,2,3,4) (2)select * from table1 where col1='00001' and (kbn = 1 or kbn = 2 or kbn = 3 or kbn = 4) (1)と(2)ではどちらがパフォーマンスがよいのでしょうか? SQLServer2008

  • サブクエリ内のORとANDについて

    見にくくて申し訳ないです。 以下のSQLについてなのですが、 (1)のSQLでは正常にフォームが開きます、 (2)のSQLで実行しますと、 「実行時エラー3163: The field too small to accept of data you attempted to add.Try inserting less data.」 が出てしまいます。(1)と(2)SQLの違いは、2つの条件をANDかORで結んでるところなのですが なぜORだけにエラーが出るのか原因がわかりません・・ お時間がある方、よろしければご教授ください。 よろしくお願い致します。 (1) DoCmd.OpenForm formName, , , "(Q_kyogo.ID IN(select tbl_press.ID from tbl_press where tbl_press.メーカー IN('ABC'))) AND (tbl_press.UNIT = 1)" (2) DoCmd.OpenForm formName, , , "(Q_kyogo.ID IN(select tbl_press.ID from tbl_press where tbl_press.メーカー IN('ABC'))) OR (tbl_press.UNIT = 1)"

  • phpでMySQLのデータベースにアクセスする際、

    phpでMySQLのデータベースにアクセスする際、 条件にあったデータを表示するために $sql = "SELECT id, name, address, age FROM list WHERE age < 60"; のようにして、データベースにアクセスします。 つぎに、同じページ内で、アクセスしたテーブルにデータを追加したいのですが、WHERE age < 60という条件を設定したままでinsertするとエラーがでて上手くいきません。 最初の条件をORDER BY idなどのようにすれば、上手くinsert出来るのですが、なるべくデータベースの方で条件(age < 60)を比較して欲しいので、WHERE句は外せません。 WHERE句を使った状態でinsertする方法を教えてください。よろしくお願いします。環境はレンタルサーバです。

    • ベストアンサー
    • PHP