• ベストアンサー

SQL文中の論理演算式の優先順位

来週、初級シスアドの試験を受ける者です。 「何を今さら」と思われるかもしれませんが、参考書等に載っていなかったので質問します。 SELECT * FROM 表名 WHERE ○○○ OR △△△ AND □□□ 上記のSQL文でWHERE以下の論理演算式を解いていく場合の優先順位を教えて下さい。 問題集の解法では「△△△と□□□の論理積をだした後に○○○との論理和をだす」とありました。 また、「条件式の中の論理演算式の優先順位に注意しなさい」とありました。 この、優先順位を教えて下さい。よろしくお願いします。

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

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

SQLServerのヘルプによると、 NOT > AND > OR の順に優先順位が高いそうです。 SELECT * FROM 表名 WHERE ○○○ OR △△△ AND □□□ は SELECT * FROM 表名 WHERE ○○○ OR (△△△ AND □□□) と同じでした。(実験しました)

osafune
質問者

お礼

ARCさん、御回答ありがとうございます。 なるほど!NOTが最優先なんですね。 ORがANDより優先順位が高いというのは、なんとなく想像されたのですが、これでスッキリしました。 ありがとうございました。

その他の回答 (2)

  • Binder
  • ベストアンサー率33% (5/15)
回答No.2

#回答ではないです。。。 うわぁ・・・まいったな。 私はいつもSQLを使っているのですが、ご質問のようなSQLの書き方は御法度・厳禁なので、ふと聞かれるとわからないです・・・ (>_<) 企業では、必ず明示的に( )を付けるようにします。 数年後に他の社員が見ても、曖昧なく同じ意図が伝わるようにするためです。 もし、これがシスアドの試験問題だとしたら、本当に試験用のSQLですね。 どなたかが回答を・・・。

osafune
質問者

お礼

Binderさん、コメントありがとうございます。 この問題はシスアドの過去問ではなく、問題集の中の1問です。 しかし、表計算とSQLの問題はエンドユーザレベルではまず使わないだろうと思っていて、試験用だと割り切って勉強しています。 でも、いいんです。初級シスアドの試験は、実務の断片的な知識を、体系的に学べる有意義な機会だと思っていますから・・・

noname#9414
noname#9414
回答No.1

一応、C言語の演算子の優先順位を書いた ページですが、ほかの言語でも通用する はずです。 ではでは☆

参考URL:
http://issoft5.is.noda.sut.ac.jp/mmd/cai/html/7_1.html
osafune
質問者

補足

Kanataさん、早速の回答ありがとうございました。 御紹介いただいたHPを見に行ったのですが、どうも私には難しくて・・・ その時フト思ったんですが、「ANDは論理積だから×、ORは論理和だから+、だから×の計算を先にしてその後で+の計算をする」という、加減乗除の方法と同じ単純な事なんでしょうか?

関連するQ&A

  • 優先順位の概念について質問

    質問1:優先順位や結合の規則とは、本質的に「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であり、「演算実行の優先順位」ではありませんよね? 何故そう思ったかというと次の論理式をご覧ください。 a==1 && b==0 || a==1 && b==0 ※int a==1,b==0 この論理式がtureになるプロセスとして、 a==1を評価→true    ↓ b==0を評価→true ↓ &&は、a==1 && b==0の論理式をtrueと評価 ↓ ||は、左側の論理式a==1 && b==0がtrueだから、論理式全体がtrueだと判断し、 右側の論理式の評価を行わない。 プロセスとして、こうだと思うんですけど、優先順位として||は&&より低いですよね? 優先順位が「演算実行の優先順位」を意味するならば、右側の論理式のa==1 && b==0を評価してから||の演算をするはずで矛盾します。 よって、優先順位とは本質的に、「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であり、「演算実行の優先順位ではない」といえる。 質問2:「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であれば、例えば、上記の論理式の左側を例に挙げていえば、 b==0は&&と||の2つが共有してるが、&&の方が優先順位が高いから、b==0を先に結び付けてる、その意味でも「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」 は正しいですか?

    • ベストアンサー
    • Java
  • 論理演算

    8桁の2進数10110111の最上位(最左端)のビットだけを0にするには、8桁の2進数01111111と、どのような論理演算を行えばよいか。 選択肢 (1)論理積 (2)論理和 (3)否定論理積 (4)否定論理和 という問題の答えと、なぜそうなるかを教えて下さる方いませんか。 よろしくお願いします。

  • 演算子の優先順位

    演算子の優先順位が良くわかりませんが次の例題はどう考えればよいでしょう? (例)a = 5,b = 2 としたときの,w の値が1 となる演算式は? ア w = ++a / ++b; イ w = ++a / b++; ウ w = a++ / ++b; エ w = a++ / b++;

  • 算術演算子と連結演算子の優先順位について

    select 'aa' ||nvl2(comm,1,0) + nvl2(comm,1,0) || 'aaaa' from emp →ORA-01722: 数値が無効です。 というエラーが発生します。 nvl2(comm,1,0) + nvl2(comm,1,0)部分に括弧でおおうと、 つまり(nvl2(comm,1,0) + nvl2(comm,1,0))にするときちんと実行結果が出ます。 算術演算子のほうが連結演算子より優先順位が高いと習ったのですが実は逆ということでしょうか。 回答のほどよろしくお願い致します。

  • 論理演算について質問

    何度もすみません。 また質問します。これで最後にしたい、、 質問1:&&や||等の論理演算子は、その両側にある2つの“boolean型の式(関係式等)”に対して論理演算を行う。 評価は、両側の式に対して並列に行うのではなく、1つづつ行って行く。 因みに、||は「論理式」を論理演算するこどができる。例えば、 int a=1,b=0,c=0のとき a==1 && b==3 || a==1 && b==0 の論理式があったとします。 この論理式の||は、即に演算されたa==1 && b==3とa==1 && b==0の論理式を演算の対象としている。 質問2:「評価」と「論理演算」って意味は同じですか?違いますか?違うならその違いは? 質問3:a==1 && b==0 || (a==1 && b==0)の論理式は、先に(a==1 && b==0)の論理式を論理演算すると思ってました。でも、以前そのような仮説をもって質問したら、回答者の方に実際違うと指摘されました。何故ですか?だって()の中の論理式なんだから、優先的に演算されるはず。

    • ベストアンサー
    • Java
  • SQL文について(ANDとORの論理演算について)

    下記の質問についてご教授お願い致します [設問] 国語と数学の試験を実施し、2教科の成績は氏名とともに、得点表に記録されている。 1教科は平均点以上で、残りの1教科は平均点未満の生徒氏名を表から抽出するSQLはどれか。 A:国語の点数が国語の平均点以上 B:数学の点数が数学の平均点以上 とするときに、SQL文は SELECT 生徒氏名 FROM 得点 WHERE (A OR B) AND NOT (A AND B) となります。 このときに、 WHERE (A OR B) AND NOT (A AND B) ここの論理演算を理解することが難しいです。 論理演算を分解すると A OR B 国語または数学が平均点以上であるケース NOT (A AND B) 国語と数学の両方が平均点以上であるケース となり、この両者をANDで取ると 1教科は平均点以上で、残りの1教科は平均点未満になることになります。 この論理演算でどうしてもこのような結果を引き出すことができません。 お手数ですがご教授お願いいたします。

  • SQLのIN演算子について悩んでいます。

    SQLのIN演算子について悩んでいます。 -------------------------------------------------------------------- <form method="get" action="index.php"> <input type="checkbox" name="check_addr[]" value="東京都"/>東京都<br /> <input type="checkbox" name="check_addr[]" value="千葉県"/>千葉県<br /> <input type="checkbox" name="check_addr[]" value="神奈川"/>神奈川<br /> <input type="submit" value="選択する" /> </form> --------------------------------------------------------------------- のフォームから下記のPHPで -------------------------------------------------------------------- $sql = "SELECT * FROM testvote WHERE mark = '0'"; if(isset($_GET["check_addr"])){ $array = implode(",", $_GET["check_addr"]); $sql = "SELECT * FROM testvote WHERE addr IN(" .$array. ")"; } ----------------------------------------------------------------------- チェックを入れた都道府県だけをMYSQLから取り出して表示させたいのですが、 どうにもうまく動きません。 色々と試しているのですが、IN演算子の中が数字などの場合はうまく動いています。 日本語でIN演算子を使用する場合はどうしたらいいのでしょうか? ちなみに addrの中には都道府県(埼玉県・東京都・・・)のデータが入っています。

    • ベストアンサー
    • PHP
  • 論理演算について質問

    今度こそ最後にします、、 質問:&&や||等の論理演算子は、「その両側にある2つの型booleanのオペランドに対して論理演算する」こういうことでしょうか? YESかNOでお答えいただいた上で、補足があればお願いします^^ 質問2:私は、括弧内の式が優先的に計算されると思って、その旨の質問をしたところ以下のような回答が返ってきました。 「優先されるのは結合順であって、評価順序ではないです。例えば、a==1 && b==3 || a==1 && b==0の式ににかっこを追加して、a==1 && (b==3 || a==1) && b==0とすると||の第1オペランドは b==3、第2オペランドは a==1 に変わります。」 ここでいう「結合順」の「結合」とはどういう意味ですか? 私の仮説では、「ある演算子がオペランドを結合している」、こういうことでしょうか? そして、括弧を用いることにより、ある演算子のオペランドの結合を変化させ、演算子は その括弧内の両側のオペランドをつなぐ、こういうことでしょうか? YESかNOかでお答えください。その上で何か補足があればお願いします^^

    • ベストアンサー
    • Java
  • 論理式について

    論理式について 積の和形式で下記のような論理式を簡単化したいのですが、途中で分からなくなってしまいます。 カルノー図で答えは「BC」になる事は分かっているのですが、計算過程を教えてください。 not(not(not(AB))+C) or not(BC)) notをバーを用いてであらわしたもの↓ _________ _____ __ __  AB + C + BC おそらく not(AB)・not(BC)+Cnot(BC)まではあってると思うのですが、その後どうしたらよいでしょうか? よろしくお願いします。

  • 論理演算に関する質問です。

    論理演算に関する質問です。 以下の問題を解いてみたんですが正解なのか不正解なのか自信がないので教えてくれませんか? 論理関数 f(A,B,C,D)=_A_C_D+_AB_C+BCD+AB_C+A_BCD が与えられているとき積和形の最簡の論理式で表せ。 解き方ですがまずカルノー図を使って簡単化してみたところ f=_A_C_D+AB_C+BD+ACD という結果になってこれが最簡だと思うのですが当たっているでしょうか?