北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。 月が再びゆっくりと空に昇っています。寝る前に夢を見ている間に、私の愛する読者の皆さんを MySql の最後のサブクエリ部分の探索へと導きます。 注: 一部のクエリ結果は質問の要件とは異なって表示され、結果を読みやすくするために追加のフィールドが表示される場合があります。実際にこれを実行している読者は、正しい結果を得るために SELECT の後の余分なフィールドを削除できます。 #WHERE または HAVING の後に #1 が続きます。スカラー サブクエリ (単一行サブクエリ) #2. 列サブクエリ(複数行サブクエリ) #3. 行サブクエリ(複数列と複数行) #特徴: # ① サブクエリは括弧内に配置されます # ② サブクエリは通常、条件の右側に配置されます # ③ スカラーサブクエリ: 通常、単一行演算子とともに使用されます # 単一行演算子: > < >= <= <> !- # 列サブクエリ。通常は複数行演算子とともに使用されます。# IN、ANY/SOME (any)、ALL # ④ サブクエリの実行はメインクエリよりも優先され、メインクエリの条件はサブクエリの結果を使用します。 #1. スカラーサブクエリ#ケース 1: 誰の給料が Abel より高いですか? #①Abelの給与を照会する給与を選択する 従業員から ここで last_name = 'Abel'; #②給与を満たす従業員情報を照会>①ResultSELECT * 従業員から WHERE salary>(SELECT salary FROM employees WHERE last_name='Abel'); #ケース 2. job_id が従業員番号 141 と同じで、給与が従業員番号 143 より高い従業員の名前、job_id、給与を返します。 #①従業員141のjob_idを確認する ジョブIDを選択 従業員から ここで、従業員IDは'141'です。 #②従業員143の給与を確認する 給与を選択 従業員から ここで、従業員IDは'143'です。 #③最後に結果をマージする SELECT CONCAT(last_name,first_name) AS name, job_id ASジョブ番号、 従業員からの給与として ここで、job_id=( ジョブIDを選択 従業員から 従業員ID='141' ) および給与>( 給与を選択 従業員から 従業員ID='143' ); #ケース 3. 会社内で最も低い給与の従業員の last_name、job_id、salary を返します。 MIN(給与)を選択 従業員から; 選択 last_name 姓として、 給料 給料として、 job_id AS ジョブ番号 FROM 従業員 ここで、給与=( MIN(給与)を選択 従業員から ); #ケース4. 部門番号50の最低賃金より高い最低賃金を持つ部門の部門IDと最低賃金を照会します。 #①50部門の最低給与を確認する SELECT MIN(salary) 従業員から ここで、department_id=50; #グループ化後、フィルター条件①。【部署がないものも除外しないので、部署番号はフィルターしない】 部門IDを部門IDとして選択し、 従業員からの月給としてMIN(給与) #WHERE 部門ID 部門IDによるグループ化 月給制>( MIN(給与)を選択 従業員から ); #2. 列サブクエリ(複数行サブクエリ) #複数行を返す#複数行比較演算子を使用する #ケース 1. location_id が 1400 または 1700 である部門内のすべての従業員の名前を返します。 #①location_idが1400または1700の部門番号を照会するSELECT DISTINCT department_id 部門から location_id が(1400,1700)の場合; #②従業員名を照会し、部門番号がリストの項目の1つであることを要求します。①SELECT CONCAT(last_name,first_name) AS name FROM employees 部門ID IN ( SELECT DISTINCT 部門ID 部門から location_id が (1400, 1700) の場合 ); 上記と同じ結果を得るには、IN の代わりに ANY を使用します。SELECT CONCAT(last_name,first_name) AS name FROM employees 部門ID = ANY( SELECT DISTINCT 部門ID 部門から location_id が (1400, 1700) の場合 ); # 例: location_id が 1400 または 1700 ではない部門のすべての従業員の名前を返します。 SELECT CONCAT(last_name,first_name) AS name FROM employees department_id が ( に含まれない ) である場所 SELECT DISTINCT 部門ID 部門から location_id が (1400, 1700) の場合 ); ============================== SELECT CONCAT(last_name,first_name) AS name FROM employees 部門ID <> ALL( SELECT DISTINCT 部門ID 部門から location_id が (1400, 1700) の場合 ); #ケース2. IT_PROG部門のjob_idを持つ従業員よりも給与が低い他の職種の従業員の従業員IDを返します。 # 名前、job_id、給与 #①IT_PROG部門の給与を照会するSELECT DISTINCT salary 従業員から ここで、job_id は 'IT_PROG' です。 #②IT_PROGSELECT以外の部署の情報を調べる* 従業員から ここで、job_id != 'IT_PROG'; #③従業員テーブルで、従業員ID AS 従業員番号を選択するために、①と②をマージします。 CONCAT(姓,名) AS 名前、 job_id ASジョブ番号、 従業員からの給与として ここで、job_id != 'IT_PROG' AND 給与<ANY( 給与を選択 従業員から ここで、job_id='IT_PROG' ); ANYの代わりにMAXを使用すると、上記のSELECT employee_id AS employee numberと同じ効果が得られます。 CONCAT(姓,名) AS 名前、 job_id ASジョブ番号、 従業員からの給与として ここで、job_id <> 'IT_PROG' そして給料<( SELECT MAX(給与) 従業員から ここで、job_id='IT_PROG' ); #ケース 3. job_id が「IT_PROG」の部門よりも給与が低い他の部門のすべての従業員の従業員番号、名前、job_id、給与を返します。 #①まずはIT_PROG部門の給与を調べます。 給与を個別に選択 従業員から ここで、job_id は 'IT_PROG' です。 従業員IDを従業員IDとして選択し、 CONCAT(姓,名) AS 名前、 job_id ASジョブ番号、 従業員からの給与として WHERE 給与<ALL( 給与を個別に選択 従業員から ここで、job_id='IT_PROG' ) AND ジョブID <> 'IT_PROG'; ============================= ALL ではなく MIN 従業員IDを従業員IDとして選択し、 CONCAT(姓,名) AS 名前、 job_id ASジョブ番号、 従業員からの給与として 給与<( MIN(給与)を選択 従業員から ここで、job_id='IT_PROG' ) AND ジョブID <> 'IT_PROG'; #3. 行サブクエリ(結果セットに 1 行と複数の列、または複数の行と複数の列が含まれる) #ケース1. 従業員番号が最も小さく、給与が最も高い従業員を照会します。SELECT MIN(employee_id) を導入します。 従業員から; ================= SELECT MAX(給与) 従業員から; 選択* 従業員から ここで、従業員ID = ( SELECT MIN(従業員ID) 従業員から ) 給与 = ( SELECT MAX(給与) 従業員から ); このクエリ結果では仮想フィールドが使用され、単一行演算子は一貫している必要があります。結果は上記と同じです。 選択* 従業員から ここで (従業員ID, 給与)=( SELECT MIN(従業員ID)、 MAX(給与) 従業員から ); #2. SELECT サブクエリ#スカラー サブクエリのみをサポートし、結果は 1 行 1 列になります#ケース 1. 各部門の従業員数をクエリするSELECT d.*,(SELECT COUNT(*) FROM employees) 部門dから; 条件SELECT d.*,(SELECT COUNT(*)を追加します。 従業員から e.department_id=d.department_id の場合 ) AS numberFROM departments d; #ケース2. 従業員番号=102の部署名を照会します。 部門名を選択 部門から; ============== 従業員IDを選択 従業員から ここで、従業員ID = 102; 従業員IDを選択します。 ( 部門名を選択 部門から e.department_id=d.department_id の場合 ) 従業員から ここで、従業員IDは102です。 #3. FROM の後の注意: サブクエリの結果はテーブルとして使用され、別名を指定する必要があります。#ケース: 各部門の平均給与レベルをクエリします。 SELECT ROUND(AVG(給与),2),部門ID 従業員から 部門IDでグループ化; e.averagesalary、j.grade_level を選択 job_grades から j へ 、( SELECT ROUND(AVG(給与),2) AS averagesalary,department_id 従業員から 部門IDによるグループ化 ) AS e e.average_sal が j.lowest_sal と j.highest_sal の間である場合; #1999 文法、教師の答え SELECT e.*,j.grade_level から ( SELECT ROUND(AVG(給与),2) AS averagesalary,department_id 従業員から 部門IDによるグループ化 ) AS e 内部結合 job_grades j e.average_sal が j.lowest_sal と j.highest_sal の間です。 #4. EXISTSの後(相関サブクエリ) 構文: EXISTS (完全なクエリステートメント) 注: 完全なクエリ ステートメントは、1 行 1 列、または 1 行複数列にすることができます。 注: 最初に外部クエリを実行し、特定のフィールドの値に従ってフィルター処理します。 EXISTS は、値 (ブール型) が存在するかどうかを判断します。結果は 1、0、いいえの 2 つだけです。 #SELECT EXISTS (SELECT employee_id FROM employees); を導入します。 給与を含む従業員情報を照会します 3W SELECT EXISTS(SELECT * FROM employees WHERE salary=30000); #事例紹介。従業員名と部署名の照会#従業員名と部署名の照会SELECT first_name,department_id 従業員から 部門IDは; #部門名を照会する SELECT department_name 部門から; #従業員名と部署名をチェックする SELECT e.first_name,d.department_name 従業員から 内部結合 ( SELECT 部門名、部門ID 部門から ) AS d オン e.department_id=d.department_id; #ケース1..従業員の部署名を照会する SELECT department_name 部門から 存在する場所( 選択* 従業員から ここで、d.department_id=e.department_id ); EXISTSの代わりにINを使用すると、上記のSELECT department_nameと同じ結果になります。 部門から d.department_id IN ( ) のWHERE 部門IDを選択 従業員から ); #ケース2.恋人がいない男神様の情報を問い合わせる#INメソッドSELECT * 男の子から bo.id が IN でない( ボーイフレンドIDを選択 美しさから ); =============== #EXISTS メソッド SELECT * 男の子から 存在しない場所( ボーイフレンドIDを選択 美しさから ここで、bo.id=be.boyfriend_id ); 上級 9: ユニオン クエリ UNION ユニオン マージ: 複数のクエリ ステートメントの結果を 1 つの結果にマージします。 文法: クエリステートメント 1 連合 クエリ 2 連合 ... 適用シナリオ: クエリされる結果は複数のテーブルから取得され、複数のテーブル間に直接的な接続はありません。 ただし、クエリ情報が一貫している場合。 Web ページの検索コンテンツでは、さまざまなテーブルからコンテンツが取得され、結合されてユーザーに返されます。 特徴: 1. 複数のクエリ ステートメント内のクエリ列の数は一貫している必要があります。 2. 複数のクエリ ステートメント内の各列の型と順序は一貫している必要があります。 3. デフォルトで重複を削除するには、UNION キーワードを使用します。UNION ALL を使用すると、重複を含むすべての項目が表示されます。 これを注意深く読んでくださった皆様に感謝します。MySql クエリの部分は終了です。私のブログのテンプレートに従って、いくつかの簡単な SQL クエリ ステートメントを完了できると思います。SQL を学習したので、今後はもっと練習してください。SQL1992 および 1999 構文は、主流のリレーショナル データベースで共通です。今後もMySQLの知識を広げていきますので、興味のある方はフォローしてください! o(^▽^)o これで、MySql のサブクエリ内のクエリ例の詳細な説明に関するこの記事は終了です。サブクエリ内の MySql クエリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Ubuntu 18.04 に Nvidia グラフィック カード ドライバーをインストールするチュートリアル (画像とテキスト付き)
>>: Vue プロジェクトでブラウザ キャッシュ設定を無効にする例
スロークエリログ関連のパラメータMySQL スロー クエリ関連のパラメータの説明: slow_que...
MVCC MVCC (Multi-Version Concurrency Control) は、マル...
1.メニューバーにスタートと入力し、スタートアップアプリケーションをクリックして入力します。 2. ...
多くの場合、Linux システムに Web サービス アプリケーション (Tomcat、Apache...
1. コマンドの紹介ifconfig (ネットワーク インターフェイスを構成する) コマンドは、ネッ...
Docker をインストールした後、会社が構築したプライベート サーバー Harbor からプルしよ...
オペレーティング システム win10 MySQL は、公式 Web サイトからダウンロードした 6...
無料のパブリック STUN サーバーSIP 端末がプライベート IP アドレスを使用する場合、スタン...
ブーストをインストールPython から C/C++ を呼び出す方法はたくさんあります。この記事では...
まずは簡単なデータを見てみましょう。 Googleが発表したレポートによると、 ①中国の都市の97%...
目次分割代入を使用したオブジェクトパラメータコールバック関数の命名条件文を説明的にするスイッチ文をM...
第一に: CSSを導入する4つの方法CSS を導入する方法には、インライン スタイル、埋め込みスタイ...
この記事では、Docker コンテナとフロントエンド プロセスの関係と、コンテナを永続的に実行できる...
この記事では、例を使用して、MYSQL データベース テーブル構造を最適化する方法を説明します。ご参...
序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...