mysqlでサブクエリを作成するにはどうすればよいですか?
mysql では、サブクエリとは、別のクエリ ステートメント内にクエリ ステートメントをネストすることを指します。サブクエリは、SELECT、UPDATE、および DELETE ステートメントの WHERE 句で実装できます。WHERE 句の構文形式は次のとおりです: "WHERE
(別のクエリ ステートメント)」。
(推奨チュートリアル: mysql ビデオ チュートリアル )
サブクエリは MySQL における比較です。一般的に使用されるクエリ方法である複数テーブル クエリは、サブクエリを通じて実装できます。サブクエリとは、あるクエリ ステートメントを別のクエリ ステートメント内にネストすることを指します。サブクエリは SELECT、UPDATE、および DELETE ステートメントで使用でき、複数のレベルでネストできます。実際の開発では、サブクエリが WHERE 句に出現することがよくあります。
WHERE のサブクエリの構文形式は次のとおりです。
WHERE <表达式> <操作符> (子查询语句)
このうち、演算子には比較演算子と、IN、NOT IN、EXISTS、NOT EXISTS などのキーワードを使用できます。
1) IN | NOT IN
式がサブクエリによって返された結果セットの値と等しい場合は TRUE が返され、それ以外の場合は FALSE が返されます。キーワード NOT を使用した場合、戻り値はまったく逆になります。
2) EXISTS | NOT EXISTS
は、サブクエリの結果セットが空かどうかを判断するために使用されます。サブクエリの結果セットが空でない場合は、TRUEが返され、それ以外の場合は FALSE が返され、キーワード NOT が使用された場合、戻り値はまったく逆になります。
例 1
サブクエリを使用して、tb_students_info テーブルと tb_course テーブルで Java コースを受講している学生の名前をクエリします。SQL ステートメントと実行結果は次のとおりです。
mysql> SELECT name FROM tb_students_info -> WHERE course_id IN (SELECT id FROM tb_course WHERE course_name = 'Java'); +-------+ | name | +-------+ | Dany | | Henry | +-------+ 2 rows in set (0.01 sec)
結果は、Dany と Henry だけが Java コースを受講していることを示しています。上記のクエリ プロセスを次の 2 つのステップに分割して、同じ効果を達成することもできます。
1) まず内部クエリを別途実行して、tb_course テーブル内のコース Java の ID を確認します SQL ステートメントと実行結果は次のとおりです。
mysql> SELECT id FROM tb_course -> WHERE course_name = 'Java'; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec)
条件を満たすidフィールドの値が1であることがわかります。
2) 次に、外側のクエリを実行して、tb_students_info テーブル内の course_id が 1 に等しい学生の名前をクエリします。 SQL文と実行結果は以下のとおりです。
mysql> SELECT name FROM tb_students_info -> WHERE course_id IN (1); +-------+ | name | +-------+ | Dany | | Henry | +-------+ 2 rows in set (0.00 sec)
従来、外側の SELECT クエリは親クエリと呼ばれ、括弧内に埋め込まれたクエリはサブクエリと呼ばれます (サブクエリは括弧内に配置する必要があります)。上記の例で MySQL が SELECT ステートメントを処理するときの実行フローは、最初にサブクエリを実行し、次に親クエリを実行します。
例 2
例 1 と同様に、SELECT ステートメントで NOT IN キーワードを使用して、Java コースを受講していない学生の名前をクエリします。実行結果は以下の通りです。
mysql> SELECT name FROM tb_students_info -> WHERE course_id NOT IN (SELECT id FROM tb_course WHERE course_name = 'Java'); +--------+ | name | +--------+ | Green | | Jane | | Jim | | John | | Lily | | Susan | | Thomas | | Tom | | LiMing | +--------+ 9 rows in set (0.01 sec)
実行結果は例 1 とまったく逆であることがわかります。Java コースを学習していない学生は、Dany と Henry 以外の学生です。
例 3
= 演算子を使用して、tb_course テーブルと tb_students_info テーブルで Python コースを学習しているすべての学生の名前をクエリします。SQL ステートメントと実行結果は次のとおりです。が続きます。
mysql> SELECT name FROM tb_students_info -> WHERE course_id = (SELECT id FROM tb_course WHERE course_name = 'Python'); +------+ | name | +------+ | Jane | +------+ 1 row in set (0.00 sec)
結果は、Python コースを勉強している唯一の学生が Jane であることを示しています。
例 4
<> 演算子を使用して、tb_course テーブル内の Python コースを受講していない学生の名前、SQL ステートメント、および実行結果をクエリします。 tb_students_info テーブルは次のようになります。
mysql> SELECT name FROM tb_students_info -> WHERE course_id <> (SELECT id FROM tb_course WHERE course_name = 'Python'); +--------+ | name | +--------+ | Dany | | Green | | Henry | | Jim | | John | | Lily | | Susan | | Thomas | | Tom | | LiMing | +--------+ 10 rows in set (0.00 sec)
実行結果は例 3 とまったく逆であることがわかります。Python コースを学習していない学生は、Jane 以外の学生です。
例 5
tb_course テーブルに id=1 のコースがあるかどうかをクエリします。存在する場合は、tb_students_info テーブルのレコードをクエリします。SQL ステートメント実行結果は以下の通りです。
mysql> SELECT * FROM tb_students_info -> WHERE EXISTS(SELECT course_name FROM tb_course WHERE id=1); +----+--------+------+------+--------+-----------+ | id | name | age | sex | height | course_id | +----+--------+------+------+--------+-----------+ | 1 | Dany | 25 | 男 | 160 | 1 | | 2 | Green | 23 | 男 | 158 | 2 | | 3 | Henry | 23 | 女 | 185 | 1 | | 4 | Jane | 22 | 男 | 162 | 3 | | 5 | Jim | 24 | 女 | 175 | 2 | | 6 | John | 21 | 女 | 172 | 4 | | 7 | Lily | 22 | 男 | 165 | 4 | | 8 | Susan | 23 | 男 | 170 | 5 | | 9 | Thomas | 22 | 女 | 178 | 5 | | 10 | Tom | 23 | 女 | 165 | 5 | | 11 | LiMing | 22 | 男 | 180 | 7 | +----+--------+------+------+--------+-----------+ 11 rows in set (0.01 sec)
結果からわかるように、tb_course テーブルには id=1 のレコードがあるため、EXISTS 式は TRUE を返します。TRUE を受け取った後、外側のクエリ ステートメントはテーブル tb_students_info をクエリし、すべての値を返します。記録。
EXISTS キーワードは、他のクエリ条件と併用することができ、条件式と EXISTS キーワードは AND または OR で接続されます。
例 6
tb_course テーブルに id=1 のコースがあるかどうかをクエリします。存在する場合は、年齢フィールドが 24 を超えるレコードをクエリします。 tb_students_info テーブル SQL ステートメント そして、実行結果は次のようになります。
mysql> SELECT * FROM tb_students_info -> WHERE age>24 AND EXISTS(SELECT course_name FROM tb_course WHERE id=1); +----+------+------+------+--------+-----------+ | id | name | age | sex | height | course_id | +----+------+------+------+--------+-----------+ | 1 | Dany | 25 | 男 | 160 | 1 | +----+------+------+------+--------+-----------+ 1 row in set (0.01 sec)
結果は、レコードが tb_students_info テーブルからクエリされたことと、このレコードの age フィールド値が 25 であることを示しています。内部クエリ ステートメントは tb_course テーブルからレコードを取得し、TRUE を返します。外側のクエリ ステートメントはクエリを開始します。クエリ条件に従って、tb_students_info テーブルから年齢が 24 歳以上のレコードをクエリします。
展開
サブクエリの機能はテーブル結合によっても実現できますが、サブクエリを使用すると SQL ステートメントの読み書きが容易になります。
一般に、テーブル結合 (内部結合や外部結合など) はサブクエリで置き換えることができますが、その逆は必ずしも当てはまらず、一部のサブクエリはテーブル結合で置き換えることができません。サブクエリはより柔軟で便利で、形式が多様であり、クエリのフィルター条件として適しています。一方、テーブル結合は、接続されたテーブル内のデータを表示するのに適しています。
以上がmysqlでサブクエリを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。
