資料庫 SQL 外鍵約束 多表查詢

來源:互聯網
上載者:User

標籤:


多表設計與多表查詢
1.外鍵約束
       表是用來儲存現實生活中的資料的,而現實生活中資料和資料之間往往具有一定的關係,我們在使用表來儲存資料時,可以明確的聲明表和表之前的依賴關係,命令資料庫來幫我們維護這種關係,像這種約束就叫做外鍵約束。         定義外鍵約束  foreign key(本表的列名 ordersid) references orders(id)(引用的表明及列名)    create table dept(        id int primary key auto_increment,        name varchar(20)    );    create table emp(        id int primary key auto_increment,        name varchar(20),        dept_id int,        foreign key(dept_id) references dept(id)    );2.多表設計    一對多:在多的一方儲存一的一方的主鍵做為外鍵    一對一:在任意一方儲存另一方的主鍵作為外鍵    多對多:建立第三方關係表儲存兩張表的主鍵作為外鍵,儲存他們對應關係3.多表查詢
    3.1笛卡爾積查詢:將兩張表的記錄進行一個相乘的操作查詢出來的結果就是笛卡爾積查詢,如果左表有n條記錄,右表有m條記錄,笛卡爾積查詢出有n*m條記錄,其中往往包含了很多錯誤的資料,所以這種查詢方式並不常用        select * from dept,emp;    3.2內串連查詢:查詢的是左邊表和右邊表都能找到對應記錄的記錄        select * from dept,emp where dept.id = emp.dept_id;        select * from dept inner join emp on dept.id=emp.dept_id;    3.3外串連查詢        a.左外串連查詢:在內串連的基礎上增加左邊表有而右邊表沒有的記錄            select * from dept left join emp on dept.id=emp.dept_id;        b.右外串連查詢:在內串連的基礎上增加右邊表有而左邊表沒有的記錄            select * from dept right join emp on dept.id=emp.dept_id;        c.全外串連查詢:在內串連的基礎上增加左邊表有而右邊表沒有的記錄和右邊表有而左表表沒有的記錄            select * from dept full join emp on dept.id=emp.dept_id;        d.但是mysql不支援全外串連,不過我們可以使用union關鍵字類比全外串連            select * from dept left join emp on dept.id = emp.dept_id            union            select * from dept right join emp on dept.id = emp.dept_id;

多表查詢執行個體
create table a(id int primary key,job varchar(20));insert into a values(1,‘AA‘), (2,‘BB‘), (3,‘CC‘);select * from a; create table b(id int ,name varchar(20) ,foreign key(id) references a(id));
一對多:在多的一方(b)儲存一的一方(a)的主鍵做為外鍵;多對多:建立第三方關係表儲存兩張表的主鍵作為外鍵,儲存他們對應關係注意:被參照的a(id)必須定義為unique才可以被參照,否則報錯(邏輯錯誤)。insert into b values(1,‘bqt‘), (2,‘bqt2‘), (2,‘bqt3‘);注意:插入資料的id必須在被參照的表中已經存在,否則報錯(邏輯錯誤)。select * from b; select * from a,b;
 將兩張表的記錄進行一個相乘的操作查詢出來的結果就是笛卡爾積查詢,如果左表有n條記錄,右表有m條記錄,笛卡爾積查詢出有n*m條記錄,其中往往包含了很多錯誤的資料,所以這種查詢方式並不常用.select * from a,b where a.id = b.id;
或select * from a inner join b on a.id=b.id; 內串連查詢:查詢的是左邊表和右邊表都能找到對應記錄的記錄。select * from a left join b on a.id=b.id;
 左外串連查詢:在內串連的基礎上增加左邊表有而右邊表沒有的記錄select * from a right join b on a.id=b.id;
 右外串連查詢:在內串連的基礎上增加右邊表有而左邊表沒有的記錄備忘:由於右邊表參照左邊表,所以不存在右邊表有而左邊表沒有的記錄。select * from a left  join b on a.id = b.id
unionselect * from a right join b on a.id = b.id; 全外串連查詢:在內串連的基礎上增加左邊表有而右邊表沒有,和右邊表有而左表表沒有的記錄select * from a full join b on a.id=b.id; -- 某些資料庫支援,但mysql不支援!



來自為知筆記(Wiz)

資料庫 SQL 外鍵約束 多表查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.