SQL文のANDとORの実行順序で発生する問題

SQL文のANDとORの実行順序で発生する問題

質問

昨日、データベースSQLを書いているときに問題が発生しました。問題の根本は、SQL ステートメント内の AND キーワードと OR キーワードの実行優先順位にあります。この問題をテストしてみましょう。

シナリオ

1. 学生テーブル Student があり、テーブルフィールドには Id (ユーザーの主キー)、Name (ユーザー名)、Grade (学年)、Class (クラス)、Sex (性別) が含まれます。次のように:

テーブル構造

2. 次のように 10 個のテスト データをテーブルにインポートします。

テーブルデータ

3. 次に、1 年生の女子生徒のうち女子である生徒、または 2 年生の女子生徒のうち女子である生徒を見つける必要があります。 SQL ステートメントは次のとおりです。
性別が「女」かつ学年が1またはクラスが2である学生から*を選択します
ただし、SQL クエリの結果は要件を満たしていません。実行結果は次のとおりです。

実行結果

実行結果では、2年生に男子生徒も見つかりましたが、これは明らかに誤りです。

4. SQL ステートメントを変更し、括弧を追加します。次のように:

性別が「女」かつ (学年=1 または クラス=2) である生徒から * を選択します

SQLクエリの結果は要件を満たしている

分析する

上記のシナリオから、問題の鍵は AND と OR の実行順序にあります。
データによると、関係演算子の優先順位は高い順から低い順で、NOT >AND >OR となっています。
where の後に OR 条件がある場合、OR は左と右のクエリ条件を自動的に分離します。
上記のシナリオの最初のステートメントと同様に、クエリ条件は 2 つの部分に分かれています (または)。

1. 性別 = '女性'、学年 = 1
2. クラス=2

これは、1 年生の女子生徒と 2 年生の生徒を見つけることを意味します。元のクエリの要件を満たしていません。
解決策は、実行順序を区別するために括弧を使用することです <br /> 上記のシナリオの 2 番目のステートメントと同様に、クエリ条件は 2 つの部分 (and) に分割されます。

1. 性別 = 「女性」 
2. (学年=1またはクラス=2)

以下もご興味があるかもしれません:
  • SQL文の実行順序の図による説明
  • SQL文の実行順序の詳細な説明
  • SQL ステートメント実行の詳細な説明 (MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序)
  • SQLクエリの実行順序をゼロから学ぶ
  • この記事ではSQLの実行順序について説明します

<<:  Linux(中心OS7)は、Java Webプロジェクトの実行環境を構築するためにJDK、Tomcat、MySQLをインストールします。

>>:  axios を使用してプロジェクト内の複数の繰り返しリクエストをフィルタリングする方法

推薦する

HTMLはキャンバスを使用して箇条書きスクリーン機能を実装します

導入最近、大きな課題をこなす際に、弾幕プレイヤーを作る必要がありました。他の人のソースコードを借りて...

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...

Ubuntu 18.04 Linux システムに JDK と Mysql をインストールする方法

プラットフォームの展開1. JDKをインストールするステップ1. OracleJDKをダウンロードす...

CentOS6.5にpython3.7をインストールする詳細な手順

1. Python 3をダウンロードする https://www.python.org/ftp/py...

js キャンバスはスライダー検証を実現します

この記事の例では、スライダー検証を実装するためのjsキャンバスの具体的なコードを参考までに共有してい...

Linux における mv コマンドの高度な使用例

序文mv コマンドは、move の略語で、ファイルを移動したり、ファイル名を変更したり (ファイルの...

Facebookの情報アーキテクチャの分析

<br />原文: http://uicom.net/blog/?p=762 Faceb...

vuex での mapState の考え方の応用

目次1. マップ方式2. 応用背景:需要開発プロセス中に、一部のインターフェースは、ページに表示する...

デザイン理論:人間中心のデザインコンセプト

<br />思想が東西に分かれていた時代、東洋の叡智を代表するものの一つとして「禅」は多...

Centos7.4 サーバーへの Apache のインストールとインストール プロセス中に発生した問題の解決策

この記事では、CentOS 7.4 サーバーに Apache をインストールする方法と、インストール...

html-webpack-plugin' を使用してメモリ内に HTML ページ プラグインを生成します。

webpackjs ファイルをパッケージ化するときに、次に示すように、index.html インタ...

MySQL 8.0.11 の詳細なインストール手順

この記事では、参考までにMySQL 8.0.11のインストール手順を紹介します。具体的な内容は次のと...

CSS における px、em、rem、pt の特徴、違い、変換について詳しく説明します。

コンセプト紹介: 1. px (ピクセル):仮想的な長さの単位で、コンピュータ システムのデジタル画...

MySQL がデフォルト値を持つ NULL 列の使用を推奨しない理由

よく聞かれる答えは、列に NULL 値を使用するとインデックスが無効になるというものですが、実際にテ...

Centos6.9 インストール Mysql5.7.18 ステップ記録

インストール手順 rpm -ivh mysql-コミュニティ-共通-5.7.18-1.el7.x86...