検索
ホームページデータベースmysql チュートリアルMySQL マルチテーブル関連付けクエリの例の分析

データベース設計パラダイム

データベース設計には現在 5 つのパラダイムがあります。通常、データベースが満たす必要があるのは最初の 3 つのパラダイムだけです

最初のパラダイム: 各列がアトミックであることを確認します

原子性とは何ですか? 細分化できないことを意味します。たとえば、以下の連絡先情報は

MySQL マルチテーブル関連付けクエリの例の分析

です。連絡先情報には、QQ、WeChat、電話が含まれますなど。明らかに、この列は原子性を満たしていません。別の QQ または電話番号の場合、第 1 正規形を満たすのは 1 つだけです。

第 2 正規形: 主キーを持つには、その他フィールドは主キーに依存する必要があります

なぜ主キーがそれほど重要なのでしょうか?テーブルをチームとみなした場合、主キーはチームのフラグであると理解できます

• 主キーがなければ、一意性はありません。一意性がなければ、このレコード行をコレクション内で見つけることができません。そのため、主キーが必要です。

他のフィールドが主キーに依存する必要があるのはなぜですか?主キーに頼らずにそれらの場所を特定する方法がないためです。さらに重要なのは、他のフィールドで構成されるレコード行は主キーと同じものを表しており、主キーは一意であり、主キーに依存するだけで一意になります。

第 3 正規形: 第 3 正規形は、推移的な依存関係を排除し、理解を容易にするものです。これは「冗長性の排除」とみなすことができます

これを理解するにはどうすればよいですか? 次の例を参照してください

MySQL マルチテーブル関連付けクエリの例の分析

#上記のようなテーブルを設計すると、見た目は普通ですが、テーブルを分割します

MySQL マルチテーブル関連付けクエリの例の分析

これを行うとより明確になります。製品番号を通じて 2 つのテーブルを直接関連付けます。あらゆる面で、すべてを 1 つのテーブルに詰め込むよりもはるかに優れています。

キー

私たちはそれを知っています。テーブルの識別子に相当する主キーがありますが、外部キーはどうなるのでしょうか?

# 外部キー: 別のデータ テーブル内のレコードを参照します。

# 外部キー列の型は主キー列の型と一致しており、特定の主キー (主キー) と外部キー (外部キー) に依存してデータ テーブル間の関連付け/参照関係が確立されます

構文:

外部キー制約の追加
ALTER TABLE テーブル名 ADD [CONSTRAINT 制約名] FOREIGN KEY (外部キー列)
REFERENCES 関連テーブル (主キー) ;
外部チェック キーを削除します。 ALTER TABLE テーブル名 DROP FOREIGN KEY 外部キー制約名

上記の第 3 正規形の例では、冗長性を排除し、2 つのテーブルを関連付けます。通常、2 つのテーブルを接続するこの列を外部キーとして設定します。

ただし、2 つのテーブル間の関連情報をクエリする必要がある場合は、必ずしも外部キー制約を使用するとは限りません

  • 2 つのテーブルがクエリに関連付けられている場合、外部キー制約は追加しません。これを弱参照と呼びます。

  • 外部キー制約が追加された場合場合、それは強力な参照です。

では、これら 2 つの参照の違いは何ですか?

外部キーを使用すると、外部キーが配置されることがわかります。セカンダリ テーブルのキーはメイン テーブルの主キーを指すため、2 つのテーブル間に制約が設定されます。この時点では、メイン テーブルまたはスレーブ テーブルに関連付けられた値を自由に変更することはできません。これは強参照です

1. マスターテーブルに該当するレコードがない場合、スレーブテーブルにレコードを追加できません

#2. マスターテーブルの値は変更できません、スレーブ テーブルに孤立したレコードが発生します

3、スレーブ テーブルにはマスター テーブルに対応するレコードがあり、その行をマスター テーブルから削除することはできません

4。マスターを削除する前にテーブル、最初にスレーブ テーブルを削除します

弱い参照を使用すると、関連付けを自由に変更できます。

-- 创建学生表
CREATE TABLE student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    num INT,
    NAME VARCHAR(20),
    sex CHAR(1),
    gradeId INT   -- 从表外键列
)
-- 创建年级表
CREATE TABLE grade(
    -- 主表主键列
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20)
)     
-- 添加外键约束
ALTER TABLE student ADD CONSTRAINT fk_grade 
      FOREIGN KEY(gradeId) REFERENCES grade(id)

間の値を作成してメイン テーブルにデータを追加します:

MySQL マルチテーブル関連付けクエリの例の分析

データを作成してスレーブ テーブルに追加します。

MySQL マルチテーブル関連付けクエリの例の分析#ご覧のとおり、外部キー制約が GradeId フィールドに追加されています

この時点で、メイン テーブルの列を削除しようとします:

MySQL マルチテーブル関連付けクエリの例の分析はい、メイン テーブルを自由に変更することはできません。一度変更すると、データはスレーブ テーブル内のデータは分離されます。

#内部結合

##●● 条件を満たす 2 つのテーブルの交差データをクエリします。MySQL マルチテーブル関連付けクエリの例の分析

構文:

表 1、表 2 から結果を選択します (表 1.列 1 = 表 2.列 2)

内部結合には、等価結合、非等価結合、自己結合が含まれますここでは主に自己結合について説明します。

デカルト積現象: テーブル 1 には m 行があり、テーブル 2 には n 行があり、結果 =m*n

自己接続とは何ですか?これは、自分自身を自分自身と関連付け、自分自身とデカルト積を計算することを意味します。これは簡単に理解できないかもしれません。例を次に示します:

我们平时在淘宝网购填地址的时候, 都是采用选择的方式, 先选择省,然后是省下面的市, 接着是市下面的区(县) ,它们都是在数据库中存着, 如何去实现这个功能呢 ? 

有人可能会说, 建三张表相互关联即可 , 但实际是 , 我们采用自连接的方式 , 一张表即可实现

CREATE TABLE demo(     -- 建立demo表
    id INT PRIMARY KEY,
    NAME VARCHAR(50),
    pid INT    
 )

往表中填入数据, pid为关联上一级的id

MySQL マルチテーブル関連付けクエリの例の分析

-- 自连接 
-- 在多表关系中我们需要定义别名来区分
SELECT d1.name,d2.name,d3.name FROM demo d1 
            INNER JOIN demo d2 ON d1.id=d2.pid  --自连接条件
            INNER JOIN demo d3 ON d2.id=d3.pid  --自连接条件
  WHERE d3.id=6101011   -- 查询条件

结果 : 

MySQL マルチテーブル関連付けクエリの例の分析

外连接

外连接又分为左外连接与右外连接

先看左外连接 : 

MySQL マルチテーブル関連付けクエリの例の分析

语法 

select 结果 from 表1 left join 表 2 on 表1.column1 = 表 2.column2 

左连接和内连接有什么不同呢?  通过两幅图我们就可以看出 ,内连接是取了两张表的共同部分 , 而左连接是取了左边表的全部(包括两张表的共同部分)

也就是说, 不仅查询两张表的共同部分, 并且左边表会被全部查询出来

我们通过上面外键所建的表来演示 , 为了演示方便,我们为student表再添加一列数据

MySQL マルチテーブル関連付けクエリの例の分析

可以看到, 此时第五列并没有去关联grade表

-- 左外连接查询
SELECT * FROM student s 
     LEFT JOIN grade g ON s.gradeId= g.id

查询结果如下 : 

MySQL マルチテーブル関連付けクエリの例の分析

 那么说到这, 右外连接也就不难理解了 , 每次都会完整的查询右边的表

MySQL マルチテーブル関連付けクエリの例の分析

同样我们再为grade添加一条无关联的数据

MySQL マルチテーブル関連付けクエリの例の分析

语法 :

 select 结果 from 表1 right join 表2 on 表1.column1 = 表2.column2 

-- 右外连接查询
SELECT * FROM student s 
     RIGHT JOIN grade g ON s.gradeId= g.id

查询结果 : 

MySQL マルチテーブル関連付けクエリの例の分析

可以看到, 右表被完全查询

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

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
InnoDBバッファープールとそのパフォーマンスの重要性を説明してください。InnoDBバッファープールとそのパフォーマンスの重要性を説明してください。Apr 19, 2025 am 12:24 AM

Innodbbufferpoolは、データをキャッシュしてページをインデックス作成することにより、ディスクI/Oを削減し、データベースのパフォーマンスを改善します。その作業原則には次のものが含まれます。1。データ読み取り:Bufferpoolのデータを読む。 2。データの書き込み:データを変更した後、bufferpoolに書き込み、定期的にディスクに更新します。 3.キャッシュ管理:LRUアルゴリズムを使用して、キャッシュページを管理します。 4.読みメカニズム:隣接するデータページを事前にロードします。 BufferPoolのサイジングと複数のインスタンスを使用することにより、データベースのパフォーマンスを最適化できます。

MySQL対その他のプログラミング言語:比較MySQL対その他のプログラミング言語:比較Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

MySQLの学習:新しいユーザー向けの段階的なガイドMySQLの学習:新しいユーザー向けの段階的なガイドApr 19, 2025 am 12:19 AM

MySQLは、データストレージ、管理、分析に適した強力なオープンソースデータベース管理システムであるため、学習する価値があります。 1)MySQLは、SQLを使用してデータを操作するリレーショナルデータベースであり、構造化されたデータ管理に適しています。 2)SQL言語はMySQLと対話するための鍵であり、CRUD操作をサポートします。 3)MySQLの作業原則には、クライアント/サーバーアーキテクチャ、ストレージエンジン、クエリオプティマイザーが含まれます。 4)基本的な使用には、データベースとテーブルの作成が含まれ、高度な使用にはJoinを使用してテーブルの参加が含まれます。 5)一般的なエラーには、構文エラーと許可の問題が含まれ、デバッグスキルには、構文のチェックと説明コマンドの使用が含まれます。 6)パフォーマンスの最適化には、インデックスの使用、SQLステートメントの最適化、およびデータベースの定期的なメンテナンスが含まれます。

MySQL:初心者が習得するための必須スキルMySQL:初心者が習得するための必須スキルApr 18, 2025 am 12:24 AM

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQL:構造化データとリレーショナルデータベースMySQL:構造化データとリレーショナルデータベースApr 18, 2025 am 12:22 AM

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQL:説明されている主要な機能と機能MySQL:説明されている主要な機能と機能Apr 18, 2025 am 12:17 AM

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLの目的:MySQLデータベースとの対話SQLの目的:MySQLデータベースとの対話Apr 18, 2025 am 12:12 AM

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

初心者向けのMySQL:データベース管理を開始します初心者向けのMySQL:データベース管理を開始しますApr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境