MySql のサブクエリ内のクエリ例の詳細な説明

MySql のサブクエリ内のクエリ例の詳細な説明

北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。

月が再びゆっくりと空に昇っています。寝る前に夢を見ている間に、私の愛する読者の皆さんを 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 をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の列サブクエリと行サブクエリ操作に関するチュートリアル
  • MYSQL サブクエリとネストされたクエリの最適化例の分析
  • MySQL のサブクエリの例
  • MySQL サブクエリ (ネストされたクエリ)、結合テーブル、複合クエリの詳細な説明
  • MySQL チュートリアル: サブクエリの例の詳細な説明

<<:  Ubuntu 18.04 に Nvidia グラフィック カード ドライバーをインストールするチュートリアル (画像とテキスト付き)

>>:  Vue プロジェクトでブラウザ キャッシュ設定を無効にする例

推薦する

MySQLオンラインDDLの使用に関する詳細な説明

目次文章LOCKパラメータアルゴリズムパラメータCOPY TABLE プロセスIN-PLACEプロセ...

spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]

Docker入門Docker はオープンソースのアプリケーション コンテナ エンジンです。従来の仮...

MySQL 分離レベル操作プロセスの詳細説明 (cmd)

コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り1. 2 つの My...

JavaScriptアニメーション関数のカプセル化の詳細な説明

目次1. アニメーション機能の原理2. アニメーション関数のシンプルなカプセル化3. アニメーション...

RHEL7.5 mysql 8.0.11 インストールチュートリアル

この記事はRHEL7.5でのMySQL 8.0.11のインストールチュートリアルを記録しています。具...

VMware および CentOS システムのインストール方法 - ルート パスワードをリセットする

今日のタスク1. Linuxディストリビューションの選択2.vmwareが仮想マシン(centos)...

shtml includeの使い方

これを応用することで、ウェブサイトの一部の公開領域を独立したページにすることができ、その後、この技術...

jQuery はラブエフェクトをクリックする

この記事では、jQueryのクリック時のラブエフェクトの具体的なコードを参考までに共有します。具体的...

LinuxでHomebrewを使用する正しい方法

多くの人が Linux Homebrew を使用しています。これをより良く使用するための 3 つのヒ...

MySQLクエリのソートとページング関連

概要通常、データベース内のデータを直接表示することは望ましくないため、最後の 2 つのセクションでは...

Mac OS に MySQL 5.7.20 をインストールするための詳細なグラフィックとテキストの説明

Mac OS X で TAR.GZ から MySQL 5.7 をインストールする MySQL 5.6...

JavaScript 履歴オブジェクトの説明

目次1. ルートナビゲーション2. 履歴状態管理API (1)ハッシュチェンジイベント(2)ポップス...

Nginx設定ファイルの詳細な説明

Nginx の主な設定ファイルは nginx.conf で、グローバル ブロック、イベント ブロック...

インストールされていないバージョンの MySQL を使用する手順とパスワードを忘れた場合の解決策

最初のステップは、圧縮されたパッケージを対応するディスクに解凍することです。 2 番目の手順は、cm...

VueRouterルーティングの詳細な説明

目次vueルーター1. ルーティングの概念を理解する1.1 ルーティングとは何ですか? 1.2. バ...