MySQLのANDとORもたらし一緒ピットで使用されます

MySQLの基本

三つのパラダイム

陸軍規制のMySQL

MySQL設定

MySQLのユーザー管理と権限の設定

MySQLは一般的に使用される機能を導入しました

MySQLのフィールドタイプの説明

MySQLの複数列のソート

MySQLの行の行の行転送スイッチ

MySQLのNULLは、ピットをもたらすために使用します

MySQLのANDとORもたらし一緒ピットで使用されます

MySQLのトリガーを使用

 

データ準備:

CREATE  TABLEの製品
  PROD_IDの     CHAR10NOT  NULL 
  vend_id     CHAR10NOT  NULL 
  PROD_NAME   CHAR255NOT  NULL 
  prod_priceのDECIMAL82NOT  NULL 
  PROD_DESC   VARCHAR1000年)、NULL 
); 
 
INSERT  INTO製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES' BR01 '' BRS01 '' 8インチテディベア'5.99' 8インチテディベア、キャップとジャケットが付属しています' );
INSERT  INTO 製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES' BR02 '' BRS01 '' 12インチテディベア'8.99"12インチテディベアは、キャップとジャケットが付属しています" );
INSERT  INTO 製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES' BR03 '' BRS01 '' 18インチテディベア'11.99' 18インチテディベア、キャップとジャケットが付属しています' );
INSERT  INTO 製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES' BNBG01 '' DLL01 '"魚ビーンバッグおもちゃ3.49それを飼料に有するビーンバッグワームとの完全な魚ビーンバッグおもちゃ、' );
INSERT  INTO 製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES' BNBG02 '' DLL01 '' 鳥の豆袋のおもちゃ'3.49' 鳥の豆袋のおもちゃ、卵が含まれていません' );
INSERT  INTO 製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES"BNBG03 DLL01 うさぎ豆袋のおもちゃ3.49ラビット豆袋のおもちゃは、豆袋のニンジンが付属しています" );
INSERT  INTO 製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES' RGAN01 '' DLL01 '' ラガディアン'4.99' 18インチラガディアン人形' );
INSERT  INTO製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES' RYL01 '' FNG01 '' キング人形'9.49' 王室の衣類や王冠と12インチの王人形' );
INSERT  INTO 製品(PROD_ID、vend_id、PROD_NAME、prod_price、PROD_DESC)
 VALUES' RYL02 '' FNG01 '' 女王の人形'9.49"王室の衣類や王冠と12インチの女王人形");

テーブル内のクエリデータ:

SELECT  *  FROM製品。

 

ANDとORの組み合わせは、興味深い質問が表示されます。これを説明するために、例を見て。あなたは(包括的)$ 10以上BRS01またはDLL01により製造されたすべての製品の価格をリストする必要がある場合。確立WHERE句でANDとOR演算子の組み合わせを使用して、次のSELECT文:

SELECT PROD_NAME、prod_price
 FROM 製品 
 vend_id = ' BRS01 ' OR vend_id = ' DLL01 ' AND prod_price > = 10 ;  
    
   

 

上記の結果を見てください。行は明らかに、それが期待されるリターンラインフィルタにはありませんが、$ 10の価格よりも少ない二列に戻りました。なぜこれがそうですか?

その理由は、オーダー・コンピューティングということです。SQL(ほとんどの言語のような)OR演算子治療前、優先AND演算子に。句が上記参照SQLは、それに関係なく、その価格の$ 10の(またはそれ以上)の生成物、またはベンダーBRS01製あらゆる製品、からなる任意の価格サプライヤDLL01であると理解されます。換言すれば、計算の順序で優先順位の高いため、オペレータが誤って結合されます。

この問題を解決するには、明示的に演算子を括弧それぞれのパケットを使用することです。次のSELECT文と出力を考えてみましょう。

SELECT PROD_NAME、prod_price 
 FROM 製品 
 
    vend_id = ' BRS01 ' OR vend_id = ' DLL01 ' AND prod_price > = 10 ;  
     
   

前条の唯一の違いでこのSELECTステートメントは、このステートメント、最初の2つの条件がでアップ括弧します。コンピューティング括弧ANDまたはOR演算子の順序よりも高いため、DBMSまたは状態は、最初の括弧内に濾過します。この時点では、サプライヤーやDLL01 BRS01と価格で製造する製品の選択へのSQLステートメントは、私たちが望むものである$ 10の(またはそれ以上)、です。

WHERE句ANDとOR演算子を有する任意の時間は、明示的にオペレータの括弧をグループ化する必要があります。それは本当にあなたが同様に何をしたい場合でも、デフォルトの評価順に上-依存しないでください。害に括弧を使用して、それが曖昧さを排除することができます。

 

おすすめ

転載: www.cnblogs.com/yinjw/p/11767431.html