目次
複数テーブル クエリ
ケースの説明
デカルト積の解決策
複数テーブル クエリの分類
等価結合と非等価結合
クエリ結果のマージ
自然な接続
キーワードを使用: NATURAL JOIN (柔軟性に欠ける)、自動クエリ テーブル内のすべての同じフィールドを使用し、等しい値接続を実行します
キーワード: USING (同じ名前のフィールド) を使用して、テーブル内の同じ名前のフィールドを自動的に結合します Equijoining
ホームページ データベース mysql チュートリアル MySQL マルチテーブルクエリのケース分析

MySQL マルチテーブルクエリのケース分析

May 27, 2023 am 10:52 AM
mysql

複数テーブル クエリ

ケースの説明

デカルト積の理解

select id,department_name
from employees,departments;#错的

select id,department_id,department_name
from employees CROSS JOIN departments;#错的
ログイン後にコピー

各従業員と各部門が 1 回照合されました (見つかったエントリの数 = ID の数 * 数値

エラーの原因: 接続条件がありません

デカルト積の解決策

接続条件を書き込みます: 表 1. 列 = 表 2. 列 (複数接続する場合)テーブル、少なくとも n-1 個の接続条件を使用する必要があります)

select id,employees.name,department_name 
from employees,departments
WHERE employees.name = departments.name;
ログイン後にコピー

注: 表示される列がクエリ対象のテーブル内で同じ名前を持つ場合は、それがどのテーブルからのものであるかを示す必要があります。 :employees .name

複数のテーブルをクエリするときにどのテーブル情報を表示するかを指定することをお勧めします (最適化)

最適化: FROM の後にテーブルの別名を使用できますが、別名は一度使用します。必ずエイリアスを使用してください。

複数テーブル クエリの分類

等価結合と非等価結合

  • 等価結合:上記 =

  • ##非等結合: No=

  • select t1.id,t1.name,t2.grade
    from employees t1,departments t2
    WHERE ti.salary BETWEEN t2.lowest_salary AND t2.highest_salary ;#非等值
    ログイン後にコピー
自己結合と非自己結合

  • 非セルフリンク: テーブル 1 とテーブル 2 が接続されています

  • セルフリンク: テーブル 1 とそれ自体が接続されています

  • #显示员工(t1)和其管理者(t2)的基本信息
    select t1.id,t1.name,t2.id,t2.name
    from employees t1,employees t2#一个表看作两个表
    WHERE t1.manage_id = t2.id ;#自连接
    ログイン後にコピー
内部接続と外部接続 Connection

  • 内部結合: 同じ列を含むテーブルをマージします。結果には、あるテーブルと別のテーブルに一致しない行は含まれません

  • 結合を除く: 同じ列を含むテーブルを結合します。内部結合の結果に加えて、一致しない行もクエリされます。

外部結合の分類:左外部結合 (左側のテーブルを増やし、右側を補完)、右外部結合 (右側のテーブルを増やし、左側を埋める)、完全外部結合

SQL92: () を使用して接続を作成します

内部結合: 上記を参照

外部結合: 左側のテーブル データの不一致がある場合は、右側のテーブルに ( ) を追加します。そうでない場合は、左側のテーブルに ( ) を追加します。ただし、MySQL は

WHERE t1.department_id = t2.department_id(+)#左连接
ログイン後にコピー
をサポートしていません

SQL99: JOIN...ON メソッドを使用します

内部結合

select t1.id,t1.name,t2.department_name,t3.environment
from employees t1 JOIN departments t2
ON t1.department_id = t2.department_id
JOIN locations t3#加入第二个人表
ON t2.department_location = t3.department_location;
ログイン後にコピー

OUTER JOIN

OUTER JOIN...ON...

## を使用します

    #左外部結合: LEFT OUTER JOIN
  • 右外部結合
  • 完全外部結合: 完全外部結合 (MySQL)はサポートしていません)
  • select t1.name,t2.department_name#左外连接
    from employees t1 LEFT OUTER(可省略) JOIN departments t2
    ON t1.department_id = t2.department_id;
    ログイン後にコピー
  • UMION の使用

クエリ結果のマージ

SELECT colum... FROM table1
UNION (ALL)
SELECT colum... FROM table2
ログイン後にコピー

    UNION 演算子
  • 2 つのクエリ結果の結合、重複排除 (低効率)

    UNION ALL 演算子 (推奨)
  • 重複排除なしの 2 つのクエリ結果の結合 (高効率)

7 種類の SQL JOINS の実装

MySQL マルチテーブルクエリのケース分析中央の図 (内部結合):

select t1.name,t2.department_name
from employees t1 JOIN departments t2
ON t1.department_id = t2.department_id;
ログイン後にコピー

左上の図 (左外部結合):

select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id;
ログイン後にコピー

右上の図 (右外部結合):

select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id;
ログイン後にコピー

中左の図:

select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t2.department_id IS NULL;
ログイン後にコピー

中右図:

select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t1.department_id IS NULL;
ログイン後にコピー

左下の図 (完全外部結合):

#方式一:左上图 UNION ALL 右中图
select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id
UNION ALL 
select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t1.department_id IS NULL;

#方式二:左中图 UNION ALL 右上图
select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t2.department_id IS NULL
UNION ALL
select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id;
ログイン後にコピー

右下の図:

#左中图 UNION ALL 右中图
select t1.name,t2.department_name
from employees t1 LEFT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t2.department_id IS NULL
UNION ALL
select t1.name,t2.department_name
from employees t1 RIGHT JOIN departments t2
ON t1.department_id = t2.department_id
WHERE t1.department_id IS NULL;
ログイン後にコピー

SQL 構文の新機能

自然な接続

キーワードを使用: NATURAL JOIN (柔軟性に欠ける)、自動クエリ テーブル内のすべての同じフィールドを使用し、等しい値接続を実行します

USING 接続 (自己結合には適用されません)

キーワード: USING (同じ名前のフィールド) を使用して、テーブル内の同じ名前のフィールドを自動的に結合します Equijoining

select t1.name,t2.department_name
from employees t1 JOIN departments t2
ON t1.department_id = t2.department_id;
等价于
select t1.name,t2.department_name
from employees t1 JOIN departments t2
USING(department_id);
ログイン後にコピー

以上がMySQL マルチテーブルクエリのケース分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

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

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

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

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

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

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

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

Apacheのデータベースに接続する方法 Apacheのデータベースに接続する方法 Apr 13, 2025 pm 01:03 PM

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

DockerによるMySQLを開始する方法 DockerによるMySQLを開始する方法 Apr 15, 2025 pm 12:09 PM

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

See all articles