マルチテーブル設計_関連クエリ
データベース設計:データベースの設計では、しばしばいくつかの問題(現場の内容は同じ、データの冗長性とも呼ばれます)が発生し、そのような問題はデータの破壊につながる可能性があり、データの冗長性を解決するために、データベースを設計するには、特定のルール (5 つのパラダイム) に従います。通常は 3 つのパラダイムに従うだけで十分です
シリアルナンバー | 名前 | 国籍 | 学年 |
1 | 張三 | 中国語 | 一年生 |
2 | 李思 | 中国語 | 一年生 |
第 1 正規形: すべてのフィールドの値は分解不可能です。つまり、原子性を維持するため、最も基本的な正規形です。
第 2 正規形: レコードの整合性を保証するための主キーがあります。
3 番目のパラダイム: 推移的な依存関係、利便性、理解を排除する、つまり冗長性を排除します。
注文番号 | 注文金額 | 製品番号 |
555555 | 1000 | 22 |
製品番号 | 商品名 | 単価 |
22 | ナイキ | 100 |
外部キー: 別のテーブルを参照するレコードは、テーブルとテーブルを関連付けるフィールドです。
(1) 外部キーカラムの型が主キーの型と同じである
(2) データテーブル間の関連付けは、主キーと外部キーの依存関係によって実現されます。
向某个suser表中添加专业编号,通过专业编号来关联专业信息
ALTER TABLE suser ADD COLUMN majorid INT
suser テーブルのプロフェッショナル ID はメジャーに関連付けることができ、majorid は外部キーになることができます。ただし、外部キーを
追加するケースは 2 つあります。1 つは制約のない外部キーで、もう 1 つは外部キーです。外部キー制約が追加されたキー
- - 外部キー制約の関連付けなし、テーブル間のリンクが 3 つ、外部キー制約なしの関連付けは弱い関連付けとも呼ばれます
-- 制約外部キーなし。メイン テーブル (プロフェッショナル) 情報を削除する場合、外部キー制約なし。外部キー
-- 外部キー制約を外部キー列に追加すると、テーブル間に強力な制約関係が存在します。
強く関連付けられた外部キー:
ALTER TABLE suser ADD CONSTRAINT majorid_fk FOREIGN KEY(majorid) REFERENCES major(id)
マスターテーブルとスレーブテーブル: 外部キーがスレーブテーブルに追加されます
(1) マスターテーブルに対応するレコードがない場合、スレーブテーブルから気軽にレコードを追加することができない
(2) マスターテーブルの値を変更することができず、スレーブテーブルの情報が孤立してしまう
(3)スレーブテーブルはマスターテーブルのレコードと同様に存在するため、マスターテーブルから該当レコードを削除することはできません。
(4) マスターテーブルを削除する前に、スレーブテーブルを削除してください。
関連する関係タイプ:
(1) 多対一、一対多 例:部門と従業員の関係
(2) 多対多 例: 2 つのテーブル間の関係を関連付ける中間テーブルを作成します。
(3) 1 対 1 例: 通常、複数のテーブル、生徒、詳細を分割するために使用されます。
アソシエーション クエリ: マルチテーブル クエリ。クエリ フィールドが複数のテーブルから取得される場合、接続クエリが使用されます。
有効な結合条件がない場合は、デカルト積現象が最初に選択されます。
機能別に分類:
内部結合外部結合
等結合、非等結合、自己結合、左外部結合、右外部結合
同等の接続:
SELECT a.sname,b.cname FROM suser a INNER JOIN major b ON a.majorid=b.id
テーブルとテーブル クエリの結果には、同じフィールドがいくつか含まれている場合がありますが、いくつかのフィールドの内容は異なっています。
SELECT
s.id,s.name,s.gender,m.name,GROUP_CONCAT(c.name)-- 分组连接,把同一个组中的多个进行连接,只适用于多对多的情况
FROM -- 将不相同的字段进行拼接
suser s INNER JOIN major m ON s.id=m.id
INNER JOIN major_course mc ON m.id=mc.majorid
INNER JOIN course c ON mc.courseid=c.id
GROUP BY
s.name,s.id,s.gender -- 按相同的字段进行分组
左外側、右外側の関連付け:
SELECT a.sname,b.cname FROM suser a LEFT JOIN major b ON a.majorid=b.id
SELECT a.sname,b.cname FROM suser a RIGHT JOIN major b ON a.majorid=b.id
非等価結合:
CREATE TABLE height(
nname VARCHAR(20),
low DOUBLE(3,2),
hei DOUBLE(3,2)
)
-- 非等值连接
SELECT s.name,s.gender FROM suser s INNER JOIN height h ON s.height BETWEEN h.low AND h.hei
自己参加:
CREATE TABLE AREA(
id INT PRIMARY KEY,
NAME VARCHAR(20),
pid INT -- 父级id
)
SELECT * FROM AREA WHERE pid=0
SELECT * FROM AREA WHERE pid=610
SELECT * FROM AREA WHERE pid=61001
-- 自连接
SELECT * FROM AREA a1 INNER JOIN AREA a2 ON a1.pid=a2.id
INNER JOIN AREA a3 ON a2.pid=a3.id
WHERE a1.id = 61001
-- 条件是区级的区域,依次往上查询父级
サブクエリ: 他のステートメント内に出現する select ステートメント
サブクエリが発生する場所:
(1) 選択後: スカラーサブクエリをサポート
(2) from の後のスカラー サブクエリをサポート: テーブル サブクエリをサポート
(3) テーブル サブクエリをサポートします。スカラー サブクエリ、列サブクエリをサポートします。
列サブクエリは、関数と結果セットの行数と列数に応じて異なります。
(1) スカラーサブクエリ (結果セットには 1 行 1 列のみが含まれます)
(2) 列サブクエリ(結果セットは 1 列のみ、複数行を持つ)
(3) テーブルサブクエリ(結果セットは通常複数行、複数列)