MySql 学習 3 日目: データ テーブル間の接続とクエリの詳細

MySql 学習 3 日目: データ テーブル間の接続とクエリの詳細

主キー:

キーワード: 主キー

機能: null にすることはできず、一意である必要があります。

主キーの分類:

  1. 論理主キー: ID など、実際のビジネス上の重要性を表すものではなく、レコードを一意に識別するためにのみ使用されます (推奨)
  2. ビジネス主キー: 実際のビジネス ロジックに関係するユーザー名など。

主キーの使用法:

方法1:

    テーブルt1を作成します(

       Id int 主キー、

       名前varchar(100)

);

t1に値(1,'zs')を挿入します。

t1に値(2,'ls')を挿入します。

主キーの自動増分:

キーワード: auto_increment

   テーブルt4を作成します(

                     id int 主キー auto_increment,

                     名前varchar(100)

);

t4(name) に values('zs') を挿入します。

t4 に値 (null、'ls') を挿入します。

ドメイン整合性:

特定のデータ型または制約に準拠する必要があるデータベーステーブルの列(フィールド)を参照します。

データ型

長さ

NULL ではない制約: NOT NULL

一意制約: UNIQUE

    テーブルt5を作成します(

                     ユーザー名varchar(100) NOT NULL UNIQUE、

                     性別 varchar(100) NOT NULL,

                     phonenum varchar(100) ユニーク

       );

データ テーブル間の接続:

1. 1 対多 (1*N): 顧客と注文。1 人の顧客は複数の注文を持つことができ、各注文は 1 人の顧客にのみ属します。

顧客テーブルを作成します。

テーブルcustomers(を作成)

  id int、

  名前varchar(100)、

  アドレスvarchar(255)、

  主キー(id)

);

注文テーブルを作成します。

テーブル注文の作成(

       order_num int 主キー、

       価格 float(8,2)、

       ステータス int、

       顧客ID int,

制約 customer_id_fk 外部キー(customer_id) 参照 customers(id)

);

データを挿入:

2. 多対多: 3 番目のテーブルの外部キーを使用して、2 つのテーブルの主キーを接続します。

教師と生徒の間には多対多の関係があります。1 人の教師は複数の生徒に対応し、1 人の生徒は複数の教師によって指導されます。

教師テーブルを作成します。

   テーブル教師を作成する(

              id int、

              名前varchar(100)

              給与フロート(8,2)

              主キー(ID)

);

学生テーブルを作成します。

 学生テーブルを作成する(

  id int、

  名前varchar(100)、

  グレードvarchar(100)、

  主キー(ID)

);

3番目の表:

テーブルteacher_student(を作成する

       t_id 整数、

       s_id 整数、

       主キー(t_id,s_id)

制約 teacher_id_fk 外部キー(t_id) 参照 teachers(id),

制約 student_id_fk 外部キー(s_id) 参照 students(id)

);

データを挿入:

3. 1 対 1: 1 つのテーブルの外部キーが 2 番目のテーブルの主キーに接続します。これは実際の開発では必要ありません。テーブルを設計するだけで済みます。

複数テーブルクエリ:

クロス結合 (直積): 最初のテーブルのすべての行が 2 番目のテーブルのすべての行で乗算されます。最終結果は不正確であるため、通常は使用されません。

内部結合:

クロス結合によって取得された結果セットが間違っているためです。したがって、内部接続はクロス接続に基づいています

接続条件に一致する接続テーブル内のデータ行のみがリストされ、一致しないレコードはリストされません。

文法:

暗黙の構文:

customers.id=orders.customer_id の場合、customers、orders から * を選択します。

明示的な構文:

customers c から * を選択し、 INNER JOIN orders o ON c.id=o.customer_id;

外部結合:

外部結合は、1 つのテーブルをベース テーブルとして使用し、他のテーブルからの情報を連結します。情報が存在する場合は連結されます。存在しない場合は、null が表示されます。外部結合は、左外部結合と右外部結合に分けられます。

左外部結合: キーワードの左側のテーブルをベーステーブルとして結合します

構文: select * from customers c LEFT JOIN orders o ON c.id=o.customer_id;

右外部結合: キーワードの右側のテーブルがベーステーブルです

構文: select * from orders o RIGHT JOIN customers c ON c.id=o.customer_id;

注: テーブル a の左外部結合テーブル b とテーブル b の右外部結合テーブル a の結果は同じです。

サブクエリ:

クエリを実行する際に、別の選択ステートメントの結果が条件として必要な場合があります。このとき、サブクエリが使用されます。メインクエリ (外部クエリ) にデータを提供するために最初に実行されるクエリ (内部クエリ) をサブクエリと呼びます。サブクエリは、ネストされたサブクエリと相関サブクエリに分けられます。

ネストされたサブクエリ:

内部クエリの実行は外部クエリとは独立しています。内部クエリは 1 回だけ実行され、実行完了後にその結果が外部クエリの条件として使用されます (ネストされたサブクエリ内のサブクエリ ステートメントを取り出して個別に実行できます)。

文法と演習: ID 1 の教師が指導するすべての生徒を照会します。

id が 1 である students から * を選択します (teacher_student から s_id を選択し、 t_id=1 である teacher_student から s_id を選択します);

相関サブクエリ:

内部クエリの実行は外部クエリのデータに依存します。外部クエリが実行されるたびに、内部クエリも実行されます。毎回、最初に外部クエリが実行され、外部クエリ テーブル内のタプルが取り出され、現在のタプル内のデータが内部クエリに渡され、次に内部クエリが実行されます。内部クエリの実行結果に基づいて、現在のタプルが外部クエリの where 条件を満たしているかどうかを判断します。満たしている場合、現在のタプルは要件を満たすレコードであり、満たしていない場合は要件を満たしていません。その後、外部クエリは次のタプル データの取得を継続し、すべてのタプルが処理されるまで上記の操作を実行します。

文法と演習: 各科目のテストの点数が平均点を上回る生徒の数を調べます。

スコアを a として * を選択し、 a.score>(スコアを b として avg(b.score) を選択し、 a.cou_id=b.cou_id);

上記は、エディターによって導入されたMySqlデータテーブル間の接続とクエリの詳細の統合です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。エディターがすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • mysql 結合クエリ (左結合、右結合、内部結合)
  • PHP 入門チュートリアル: MySQL を使用してデータベースを操作する方法 (接続、クエリ、トランザクション ロールバックなど)
  • MySQL のグループクエリと結合クエリステートメントの詳細な説明
  • MySQL での基本的な複数テーブル結合クエリのチュートリアル
  • PHP の基本: MySQL データベースへの接続とデータのクエリ
  • PHP 接続で MySQL クエリ結果に中国語の文字化けが表示される問題の解決方法
  • MySQL ノート: 接続クエリの詳細な説明
  • MySQL クエリの最適化: 結合クエリのソート制限の概要 (結合、順序、制限ステートメント)
  • MySQL クエリの最適化: 非主キー結合クエリの例の代わりにサブクエリを使用する
  • MySQL クエリの最適化: 結合クエリのソートに関する簡単な説明

<<:  Vueはアンカー配置機能を実装します

>>:  Linux exa コマンド (ls よりも優れたファイル表示エクスペリエンス)

推薦する

Linuxでディスク使用量を確認する方法

1. dfコマンドを使用してディスク全体の使用量を表示します。 df コマンドは、ハードディスクのマ...

インタラクティブな視覚化 JS ライブラリ gojs の使い方の紹介とヒント

目次1. gojsの紹介2. Gojsのアプリケーションシナリオ3. gojs を選ぶ理由: 4. ...

Docker で複数のアプリケーション サイトをプロキシするために Nginx を使用する方法

序文エージェントの役割は何ですか? - 複数のドメイン名が同じサーバーに解決される- 1つのサーバー...

Vueはシンプルなタイマーコンポーネントを実装します

プロジェクトを実行すると、リアルタイム更新、広告アニメーションの連続表示などの要件に遭遇することは避...

Linux MySQL ルートパスワードを忘れた場合の解決方法

MySQL データベースを使用する際、何らかの理由で長期間 MySQL にログインしていない場合、ま...

マークアップ言語 - 画像の置き換え

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

ウェブデザイナーが知っておくべき効率的なナビゲーションデザインの3つの原則

ウェブサイトのナビゲーションを設計することは、家の基礎を築くようなものです。基礎がしっかりしていなけ...

AngularとIonicのライフサイクルとフック関数を素早く理解するための記事

目次角度成し遂げる呼び出し順序知らせイオニックionic はページのライフサイクルをどのように処理し...

HTML ユーザー登録ページ設定ソースコード

上記の Web ページをデザインします。 <!DOCTYPE html> <htm...

CSS オーバーフローラップの新しいプロパティ値をどこでも使用

1.まず、overflow-wrap属性を理解する CSS のoverflow-wrapプロパティは...

Jsモジュール化の動作原理とソリューションの詳細な説明

目次1. モジュラーコンセプト2. モジュール化3. モジュール化プロセス1. 通常の記述(グローバ...

MySQLにおける区切り文字の定義と機能の詳細な説明

MySQL を初めて学ぶときは、区切り文字の本当の目的を理解していないかもしれません。区切り文字は、...

Vue 関数のアンチシェイクとスロットリングの正しい使用方法

序文1. デバウンス: 高頻度イベントがトリガーされた後、関数は n 秒以内に 1 回だけ実行されま...

Reactのdiffアルゴリズムの詳細な分析

Reactのdiffアルゴリズムの理解diffアルゴリズムは、 Virtual DOMの変更された部...

Vue+element はローカル検索機能付きのドロップダウン メニューを実装します

必要:バックエンドは配列オブジェクトを返し、それがフロントエンドで配列に結合されます。配列は名前に従...