MySQL數(shù)據(jù)庫(kù)的多表操作
一、 數(shù)據(jù)庫(kù)的多表操作
數(shù)據(jù)庫(kù)的多表關(guān)系:
- 一對(duì)一
- 一對(duì)多
- 多對(duì)一
- 多對(duì)多
二,操作
一對(duì)一
建立數(shù)據(jù)表person
和card
,設(shè)置person
數(shù)據(jù)表id
為主鍵且自增,設(shè)置card
的id
為外鍵
// 創(chuàng)建person表 CREATE TABLE person ( id INT PRIMARY KEY AUTO_INCREMENT, // 主鍵 自增 NAME VARCHAR(20) ); // 創(chuàng)建card表 CREATE TABLE card ( id INT PRIMARY KEY AUTO_INCREMENT, // 主鍵 自增 number VARCHAR(20) UNIQUE NOT NULL,// 不能為null pid INT UNIQUE,// pid唯一 CONSTRAINT cp_fk1 FOREIGN KEY (pid) REFERENCES person(id) // 外鍵列 );
一對(duì)多
創(chuàng)建user數(shù)據(jù)表和orderlist數(shù)據(jù)表,這里不再設(shè)置uid為唯一值,因此是一對(duì)多的關(guān)系
// 創(chuàng)建user表 CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, // 主鍵 自增 NAME VARCHAR(20) ); // 添加數(shù)據(jù) INSERT INTO USER VALUES (NULL, '張三'),(NULL, '李四'); // 創(chuàng)建orderlist表 CREATE TABLE orderlist( id INT PRIMARY KEY AUTO_INCREMENT, number VARCHAR(20), uid INT, // 這里沒有再設(shè)置唯一值 CONSTRAINT out_fk1 FOREIGN KEY (uid) REFERENCES USER(id) // 外鍵列 ); -- 添加數(shù)據(jù) INSERT INTO orderlist VALUES (NULL, 'hm001', 1), (NULL, 'hm002', 1),(NULL, 'hm003', 2),(NULL, 'hm004', 2);
- 多對(duì)多 創(chuàng)建student數(shù)據(jù)表,設(shè)置主鍵,再創(chuàng)建course數(shù)據(jù)表,創(chuàng)建中間表將兩者關(guān)聯(lián)起來(lái)
// 創(chuàng)建student表 CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); // 創(chuàng)建course表 CREATE TABLE course ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10) ); // 創(chuàng)建中間表 CREATE TABLE stu_course( id INT PRIMARY KEY AUTO_INCREMENT, sid INT, cid INT, CONSTRAINT sc_fk1 FOREIGN KEY (sid) REFERENCES student(id),// 設(shè)置外鍵 CONSTRAINT sc_fk2 FOREIGN KEY (cid) REFERENCES course(id)// 設(shè)置外鍵 );
多表查詢-內(nèi)鏈查詢:
通過規(guī)定語(yǔ)法,進(jìn)行內(nèi)鏈查詢
// 標(biāo)準(zhǔn)語(yǔ)法: SELECT 列名 FROM 表名1 [INNER] JOIN 表名2 ON 關(guān)聯(lián)條件; -- 查詢用戶信息和對(duì)應(yīng)的訂單信息 SELECT * FROM USER INNER JOIN orderlist ON orderlist.uid = user.id; // 設(shè)置別名進(jìn)行查詢 SELECT u.name, u.age, o.number FROM USER u INNER JOIN orderlist o ON o.uid = u.id;
多表查詢-隱式內(nèi)連接:
// 標(biāo)準(zhǔn)語(yǔ)法: SELECT 列名 FROM 表名1,表名2 WHERE 關(guān)聯(lián)條件; // 查詢用戶姓名,年齡。和訂單編號(hào) SELECT u.name, u.age, o.number FROM USER u, orderlist o WHERE o.uid = uid;
多表查詢-左外連接:
標(biāo)準(zhǔn)語(yǔ)法: SELECT 列名 FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 條件; // 查詢所有用戶信息,以及用戶對(duì)應(yīng)的訂單信息 SELECT u.* o.number FROM USER u LEFT OUTER JOIN orderlist o ON o.uid = u.id;
多表查詢-右外連接:
標(biāo)準(zhǔn)語(yǔ)法: SELECT 列名 FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 條件; // 查詢所有訂單信息,以及訂單所屬的用戶信息 SELECT o.*, u.name FROM USER u RIGHT OUTER JOIN orderlist o ON o.uid = u.id;
多表查詢-子查詢:
// 結(jié)果是單行單列的 // 標(biāo)準(zhǔn)語(yǔ)法: SELECT 列名 FROM 表名 WHERE 列名=(SELECT 列名 FROM 表名 [WHERE 條件]); // 查詢年齡最高的用戶姓名 SELECT NAME,age FROM USER WHERE age=(SELECT MAX(age) FROM USER); // 結(jié)果是多行單列的 // 標(biāo)準(zhǔn)語(yǔ)法:SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 [WHERE 條件]); // 查詢張三和李四的訂單信息 SELECT * FROM orderlist WHERE uid IN (SELECT id FROM USER WHERE NAME IN ('張三','李四')); // 結(jié)果是多行多列的 // 標(biāo)準(zhǔn)語(yǔ)法: SELECT 列名 FROM 表名 [別名],(SELECT 列名 FROM 表名 [WHERE 條件]) [別名] [WHERE 條件]; // 查詢訂單表中id大于4的訂單信息和所屬用戶信息 SELECT u.name, o.number FROM USER u, (SELECT * FROM orderlist WHERE id > 4) o WHERE o.uid=u.id;
到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù)的多表操作的文章就介紹到這了,更多相關(guān)MySQL表操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql數(shù)據(jù)庫(kù)插入速度和讀取速度的調(diào)整記錄
由于項(xiàng)目變態(tài)需求;需要在一個(gè)比較短時(shí)間段急劇增加數(shù)據(jù)庫(kù)記錄(兩三天內(nèi),由于0增加至4億)。在整個(gè)過程調(diào)優(yōu)過程非常艱辛2012-07-07MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn)
這篇文章主要介紹了MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn),幫助大家更好的對(duì)新版本的MySQL進(jìn)行測(cè)試使用,感興趣的朋友可以了解下2021-04-04DB為何大量出現(xiàn)select @@session.tx_read_only 詳解
這篇文章主要給大家介紹了關(guān)于DB為何大量出現(xiàn)select @@session.tx_read_only 的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04MySQL如何快速創(chuàng)建800w條測(cè)試數(shù)據(jù)表
這篇文章主要介紹了MySQL如何快速創(chuàng)建800w條測(cè)試數(shù)據(jù)表,下面文章圍繞MySQL創(chuàng)建測(cè)試數(shù)據(jù)表的相關(guān)資料展開詳細(xì)內(nèi)容,具有一的的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03