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 よりも優れたファイル表示エクスペリエンス)

推薦する

Mysql の mysql.user ユーザー テーブルの詳細な説明

MySQL は、異なるユーザーに異なる権限を割り当てることができるマルチユーザー管理データベースであ...

一般的な HTTP ステータス コード 10 個の詳細な説明

HTTP ステータス コードは、Web サーバーの HTTP 応答ステータスを示すために使用される ...

IE6 フォントを定義できません: 13px サイズは無効です。IE6 は自動的に大きいフォント ソリューションを表示します。

数日前、Web ページのモジュールを調整していたとき、ページのフォント サイズを 13px に設定し...

ウェブサイトのBGM実装方法

個々のウェブマスターにとって、自分のウェブサイトをいかにユニークで個性あふれるものにするかは、常に絶...

IE6かどうかを判定する最短JS(IEの書き方)

ブラウザが IE のどのバージョンであるかを検出するためによく使用される JavaScript コー...

マウスが画像のハイパーリンク上を通過するときに画像のサイズ(幅、高さ)を変更する CSS

マウスが画像の上を通過したときに画像のハイパーリンクを変更する方法:コードをコピーコードは次のとおり...

JSはじゃんけんゲームを実装します

この記事の例では、じゃんけんゲームを実装するためのJSの具体的なコードを参考までに共有しています。具...

VMware Tools を最初からインストールするための詳細な手順 (グラフィック チュートリアル)

VMware Tools は VMware 仮想マシンに付属するツールで、VirtualBox (...

webpack と rollup を使用してコンポーネント ライブラリをパッケージ化する方法

序文以前、ローディングスタイルのコンポーネントを作成しました。コードの再利用性を実現するために、この...

Dockerのクイックガイド

Docker は、安全で繰り返し可能な環境でソフトウェアを自動的にデプロイする方法を提供し、コンピュ...

LinuxにMySQLをインストールするための詳細なチュートリアル

すべてのプラットフォーム用の MySQL ダウンロードは、MySQL ダウンロードから入手できます。...

MySQLにおけるSQLの実行順序についてのちょっとした質問

今日、仕事中に左結合に関するSQLの問題に遭遇しました。後で解決しましたが、この問題を通じてSQLの...

Linux 継続的インテグレーションで Maven を自動的にインストールする方法

Mavenパッケージを解凍する tar xf apache-maven-3.5.4-bin.tar....

IE8を閲覧するときにウェブサイトが自動的にIE7互換モードを使用するようにする

序文IE の将来のすべてのバージョンで Web ページの外観が一貫していることを保証するために、IE...

Vue ページ スタック マネージャーの詳細

目次2. 試した方法2.1 キープアライブ2.2 ネストされたルートを持つ CSS 3. 機能説明4...