この記事では、mysql に関する関連知識を提供します。主に、複数テーブルのリレーションシップ、外部キー制約、複数テーブルの結合クエリ、内部接続クエリ、外部クエリなどの複数テーブル操作に関連する問題を紹介します。接続クエリなど、皆様のお役に立てれば幸いです。
推奨される学習: mysql チュートリアル
複数テーブルのリレーションシップ
1 対 1 (通常はマージされる)テーブル)、
1 対多/多対 1 (部門と従業員)、
多対多 (学生とコース) - 中間テーブルの使用
外部キー制約の概念
複数テーブルのリレーションシップに特化した制約
マスター テーブルの主キーを介してスレーブ テーブルの外部キーを制御
外部キー制約:
1. マスター テーブルが既に存在するか、作成している必要があります## 2. 主キー列がメイン テーブルに設定されている必要があります## 3. 主キーには null 値を含めることはできませんが、外部キーには null 値を含めることができます
4. メインテーブルのテーブル名の後に列を指定するか、列名の組み合わせを指定します。この列または列の組み合わせは、メイン テーブルの主キーまたは候補キーである必要があります
5. 外部キーの列の数は、主キーの列の数と同じである必要があります
6.外部キーの列のデータ型は主キーの列の数と同じである必要があります 対応する列のデータ型は同じです
• 外部キー制約の作成
テーブルを作成する前に外部キー制約を追加します
テーブルを作成した後に外部キー制約を追加します
##外部キー制約の役割を確認します
まずメイン テーブルに追加する必要があります制約
スレーブ テーブルからの制約の追加はマスター テーブルに依存します。
#2. データ削除 マスターテーブルのデータがスレーブテーブルに依存している場合は削除できませんが、そうでない場合は削除可能です。削除されました
例:
delete from dept where deptno = '1001';-----不可以删除(被依赖了)delete from dept where deptno = '1004'; ------可以删除delete from emp where eid = '7'; -----可以删除外部キー制約を削除します削除後、テーブル間に隙間ができますもう関係ありません
構文:
alter table 表名字 drop foreign key 外键约束名alter table emp2 drop foreign key emp2_fk;
• 多対多の関係 - 外部キー制約の構築 テーブル A の 1 つの行は、次のものに対応します。テーブル B の複数の行、テーブル B の 1 行がテーブル A の複数の行に対応します。このとき、テーブルの関係を記録するために
を再作成する必要があります。
注:
変更と削除の場合、中央のスレーブ テーブルは自由に削除および変更できますが、両側のスレーブ テーブルとマスター テーブルが依存するデータは削除できませんまたは変更されました。
複数テーブルの結合クエリ (非常に重要)
• コンセプト は、同時に 2 つ以上のテーブルをクエリすることです
注:
外部キー制約はデータの追加、削除、変更にのみ影響し、データ クエリには影響しません• クロス結合クエリ
;---冗長データが生成されます
1. クロス結合クエリは、接続された
2. デカルト集合は、あるテーブルの各行が別のテーブルの任意の行と一致すると理解できます
3. テーブル A に m 行のデータがあり、テーブル B には m 行のデータがあるとします。 n 行のデータの場合、
が返されます。 4. デカルト積により、大量の 冗長
データが生成され、その後の他のクエリを実行できます。この条件付きフィルタリングでは、セット
内部結合クエリ
に基づいて 2 つのテーブル間の 交差部分を検索します
inner 暗黙的な内部結合 (SQL92 標準):
select * from A,B where 条件;
明示的な内部結合 (SQL99 標準); <pre class="brush:php;toolbar:false">select * from A inner join B on 条件</pre>
<pre class="brush:php;toolbar:false">---查询每个部门的所属员工 //隐式内连接</pre>
<pre class="brush:php;toolbar:false">select* from dept3,emp3 where dept3.deptno = emp3.dept_id; //这样写标准</pre>
を指定することもできます。テーブルの別名 (例:
select* from dept3 a ,emp3 b where a.deptno = b.dept_id;
---查询每个部门的所属员工 //显式内连接select *from dept3 inner join emp3 on dept3.deptno = emp3.dept_id; //这样写标准
) テーブルに別名 (例:
select *from dept3 a join emp3 b on a.deptno = b.dept_id;#) を付けることもできます。
#外部結合クエリ
# は次のように分割されます: (outer は省略可能) 左外部結合
左外部結合、
select* from A left outer join B on 条件;
right外部結合
右外部結合、
select* from A right outer join B on 条件;
完全外部結合
完全外部結合
select* from A full outer join B on 条件;
注意:
Oracle 里面有 full join
,可是在mysql 对 full join
支持的不好,我们可以使用 union
来达到目的
----外连接查询
----查询哪些部门有员工,哪些部门没有员工
use mydb3;select* from dept3 left outer join emp3 on dept3.deptno =emp3.dept_id;
----查询哪些员工有对应的部门,哪些没有
select* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;
----使用 union 关键字实现左外连接和右外连接的并集
select* from dept3 left outer join emp3 on dept3.deptno=emp3.dept_idunionselect* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;
----外连接查询
----查询哪些部门有员工,哪些部门没有员工
usemydb3;select* from dept3 a left outer join emp3 b on a.deptno = b.dept.idselect* from dept3 a left join emp3 b on a.deptno = b.dept_id;
----外连接多个表
select* from Aleft join B on 条件1left join C on 条件2left join D on 条件3;
----查询哪些员工有对应的部门,哪些没有
select * from dept3 a right outer join emp3 b on a.deptno = b.dept_id;select* from dept3 a right join emp3 b on a.deptno = b,dept_id;select*from Aright joinB on条件1,right joinC on条件2,right joinD on条件3;
----实现满外连接: full join
----使用 union
关键字实现左外连接和右外连接的并集
----select * from dept3 a full join emp3 b on a.deptno = b.dept_id; --不能执行
----union是将两个查询结果上下拼接,并去重
select* from dept3 a left join emp3 b on a.deptno = b.dept_idunionselect* from dept3 a right join emp3 b on a.deptno = b.dept_id
----union all 是将两个查询结果上下拼接,不去重
select* from dept3 a left join emp3 b on a.deptno = b.dept_idunion allselect* from dept3 a right join emp3 b on a.deptno= b.dept_id
• 基本子查询
• 子查询关键字-ALL
• 子查询关键字-ANY ,SOME
• 子查询关键字-IN
• 子查询关键字-EXISTS
• 自关联查询
推荐学习:mysql视频教程
以上がmysqlの複数テーブル操作を完全にマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MySQLは、非同期、半同期、およびグループ複製の3つのモードを介してデータの複製を処理します。 1)非同期の複製パフォーマンスは高くなりますが、データが失われる可能性があります。 2)半同期複製により、データセキュリティが向上しますが、遅延が増加します。 3)グループレプリケーションは、高可用性要件に適したマルチマスターレプリケーションとフェールオーバーをサポートします。

説明ステートメントは、SQLクエリのパフォーマンスを分析および改善するために使用できます。 1.説明ステートメントを実行して、クエリプランを表示します。 2。出力結果を分析し、アクセスの種類、インデックスの使用量に注意し、順序を結合します。 3.分析結果に基づいてインデックスを作成または調整し、結合操作を最適化し、フルテーブルスキャンを回避してクエリ効率を向上させます。

論理バックアップにMySQLDUMPとホットバックアップにMySQLenterPriseBackupを使用することは、MySQLデータベースをバックアップする効果的な方法です。 1. mysqldumpを使用してデータベースをバックアップします:mysqldump-uroot-pmydatabase> mydatabase_backup.sql。 2。ホットバックアップにmysqlenterprisebackupを使用:mysqlbackup - user = root-password = password - backup-dir =/path/to/backupbackup。回復するときは、対応する寿命を使用します

MySQLのクエリが遅い主な理由には、インデックスの欠落または不適切な使用、クエリの複雑さ、過剰なデータボリューム、および不十分なハードウェアリソースが含まれます。最適化の提案には以下が含まれます。1。適切なインデックスを作成します。 2。クエリステートメントを最適化します。 3.テーブルパーティションテクノロジーを使用します。 4.適切にハードウェアをアップグレードします。

MySQLビューは、SQLクエリの結果に基づいた仮想テーブルであり、データを保存しません。 1)ビューは複雑なクエリを簡素化し、2)データセキュリティを強化し、3)データの一貫性を維持します。ビューは、テーブルのように使用できるデータベースにクエリを保存しますが、データは動的に生成されます。

MySQLdiffersfromotherSQLdialectsinsyntaxforLIMIT,auto-increment,stringcomparison,subqueries,andperformanceanalysis.1)MySQLusesLIMIT,whileSQLServerusesTOPandOracleusesROWNUM.2)MySQL'sAUTO_INCREMENTcontrastswithPostgreSQL'sSERIALandOracle'ssequenceandt

MySQLパーティション化により、パフォーマンスが向上し、メンテナンスが簡素化されます。 1)大きなテーブルを特定の基準(日付範囲など)、2)物理的に独立したファイルに物理的に分割する、3)MySQLはクエリするときに関連するパーティションに焦点を合わせることができます。

mysqlで許可を許可および取り消す方法は? 1。grantallprivilegesondatabase_name.to'username'@'host 'などの許可を付与するために付与ステートメントを使用してください。 2。Revokeallprivilegesondatabase_name.from'username'@'host 'など、Revoke Statementを使用して、許可のタイムリーな通信を確保します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









