mysql データベース (マルチテーブル)

マルチテーブル設計_関連クエリ

データベース設計:データベースの設計では、しばしばいくつかの問題(現場の内容は同じ、データの冗長性とも呼ばれます)が発生し、そのような問題はデータの破壊につながる可能性があり、データの冗長性を解決するために、データベースを設計するには、特定のルール (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) テーブルサブクエリ(結果セットは通常複数行、複数列)

おすすめ

転載: blog.csdn.net/weixin_71243923/article/details/126709820