MySQL之多表的操作

2021-09-25 19:21:10 字數 3188 閱讀 2913

本篇總結資料庫中對於多個表的操作,對於任何專案,資料庫裡都會有n張表,表之間也通過一對

一、多對一或者多對多的關係進行關聯,比如新聞管理系統,而通過多表操作即可實現大量資料的組合或者篩選,完成需求 ~

1、聯合查詢

select 查詢【決定欄位名字】

union 查詢選項

select 查詢

...

查詢選項:與select選項類似

示例如下:

(1)建立乙個表與t_40相同,並插入資料

create table t_42 like t_40;

insert into t_42 values(null,'犬夜叉','男',200,'神妖1班'),

(null,'日暮戈薇','女',16,'現代1班'),

(null,'桔梗','女',88,'法師1班'),

(null,'彌勒','男',28,'法師2班')

# 兩張表結構相同,可以理解為資料量太大,分表儲存。

(2)使用聯合查詢將兩張表的資料拼接到一起顯示

select * from t_40 

union

select * from t_42;

(3)聯合查詢不要求字段型別一致,只對數量要求一致,而且欄位與第一條查詢語句相關

select name from t_40

union all

select age from t_40;

(4)如果使用where對資料進行篩選,where針對的是select指令,而不是針對union結果

select * from t_40 

union all

select * from t_42

where gender = '女';

2、聯合查詢排序

例如:t_40表按年齡降序排序,t_42表按年齡公升序排序

# 無效方式

(select * from t_40 order by age desc)

union

(select * from t_42 order by age);

# 正確方式

(select * from t_40 order by age desc limit 99999)

union

(select * from t_42 order by age desc limit 99999);

連線查詢:join,將兩張表依據某個條件進行資料拼接

不同的連表有不同的連線方式,對於結果的處理也不同

連線查詢不限定表的數量,可以進行多表連線,只是表的連線需要乙個乙個的連(a join b join c …)

1、交叉連線

沒有實際資料價值,只是豐富了連線查詢的完整性

select * from t_41 cross join t_42;
2、內連線

內連線語法:左表 join 右表 on 連線條件

# 學生和專業在兩個表中,所以需要連表

# 學生必須有專業,而專業也必須存在,所以是內連線

# 連線條件:專業編號

# 兩張表有兩個字段衝突:id、name,所以需要使用別名

select t_43.*,t_44.name as course_name from t_43 inner join t_44 on t_43.course_no = t_44.id;

# 表名的使用也可以使用別名

select s.*,c.name as c_name from t_43 as s inner join t_44 c on s.course_no = c.id;

3、外連線

外連線有主表和從表之分

外連線是將主表的記錄去匹配從表的記錄

(1)查出所有的學生資訊,包括所在班級(左連線)

# 主要資料是學生,而且是全部學生:外連線、且學生表是主表

select s.*,c.name c_name from t_43 s left join t_44 c on s.course_no = c.id;

(2)查出所有班級裡的所有學生(右連線)

# 主表是班級

select s.*,c.name c_name from t_43 s right join t_44 c on s.course_no = c.id;

4、自然連線

自然連線條件匹配模式:自動尋找相同欄位名作為連線條件(欄位名相同)

select  * from t_43 natural join t_44;
5、using關鍵字

例:查詢t_45中所有的學生資訊,包括所在班級名字

select s.*,c.c_name from t_45 s left join t_46 c using(c_id);

select * from t_45 s left join t_46 c using(c_id);

6、總結

(1)連線查詢是實際開發過程中應用最多的查詢方式

(2)連線查詢的效率沒有單錶查詢高,可適當用逆規範化來提公升效率

(3)連線查詢中使用較多的就是內連線和外連線

1、子查詢分類

按子查詢得到的結果分類

子查詢都需要使用括號()進行包裹,必要時需要對子查詢結果進行別名處理(from子查詢)

2、標量子查詢

3、列子查詢

4、行子查詢

通常也是用來作為主查詢的結果條件

行子查詢是可以使用多個標量子查詢替代解決問題的,但是行子查詢的效率會比多個標量要高。

如果資料**不在一張表可以考慮使用多個標量子查詢實現

5、錶子查詢

6、exists子查詢

7、比較方式

any:滿足任意條件

some:滿足任意條件(與any完全一樣)

結果集:可以是直接的資料也可以是子查詢結果(通常是列子查詢)

比較方式其實很多都可以實現替代,越精準的資料匹配方式效率就越高

8、總結

子查詢的效率比連線查詢的效率低,適當選用

MySql之多表查詢

select e.empname,d.deptname from emp e,dept d where e.deptno d.deptno select e.empname d.deptname from emp e inner join dept d on e.deptno d.deptno se...

MySQL之多表查詢

1合併結果集,使用關鍵字union和union all,其區別是union會去掉合併中重複的部分而union all不會去掉重複的列。使用這個關鍵字的要求結果姐的列和型別必須相同。定義兩個表如下所示 a和b,兩個表分別有乙個整型的id和乙個字串的name。1.1使用union all 1.2使用un...

MySQL之多表查詢

準備資料 user info表 create table user info id int 2 primary key,user name varchar 12 unique,password varchar 15 not null,real name varchar 8 not null,age ...