MySql多表設計和多表查詢白話講解

2021-10-03 12:24:55 字數 2457 閱讀 2049

mysql多表設計和多表查詢白話講解

眾所周知,資料庫在我們實際開發中起到了至關重要的作用,在如今這種資訊大**的時代,各個行業的快速發展,隨著資料的逐漸增多,那就需要乙個很好的容器去儲存這些資料,mysql就是乙個比較不錯的資料庫,企業中用的也比較多。今天給大家介紹的是mysql資料庫的多表設計以及多表之間的查詢。

2、多表查詢

mysql中的多表查詢就是指查詢多張表,將多張表中滿足一定條件的資料查詢出來,mysql中的多表查詢分類其實並不多,總共就分幾類:  

笛卡爾積查詢  外鏈結查詢:左外連線查詢,右外鏈結查詢  內連線查詢:隱式內連線查詢,顯示內連線查詢  子查詢   例:假設有兩張表a,b,這兩張表的關係是一對多的關係  

建立a表:  

create table a (  id int primary key auto_increment, name varchar(20)  )   向a表中插入幾條記錄:

insert into a values(1, 'aaa');  insert into a values(2, 'bbb');  insert into a values(3, 'ccc'); 建立b表:  

create table b ( id int primary key auto_increment,   name varchar(20)  )   向b表中插入幾條記錄:  

insert into b values(1, '張三');  insert into b values(2, '李四');  insert into b values(4, '王五');   我們在進行多表查詢之前,可以分別檢視一下表裡的資料是否完整:

select * from a;  select * from b;   笛卡爾積查詢:  

select * from a, b;   笛卡爾積查詢是最簡單的多表查詢,但也是最沒有用的多表查詢,因為這種查詢的查詢結果沒有多大意義,沒法借鑑,而且資料是混亂重複的。之所以叫笛卡爾積,因為查詢出來的結果和我們當年學習數學時候的笛卡爾的結果一下,相互穿插配對的查詢效果。  結果:  

1 'aaa' 1 '張三'  2 'bbb' 1 '張三'  3 'ccc' 1 '張三'  1 'aaa' 2 '李四'  2 'bbb' 2 '李四'  3 'ccc' 2 '李四'  1 'aaa' 4 '王五'  2 'bbb' 4 '王五'  3 'ccc' 4 '王五'   內連線查詢:  

隱式內連線:select * from a, b where a.id=b.id;顯示內連線:select * from a inner join b on a.id=b.id;結果:1 'aaa' 1 '張三'2 'bbb' 2 '李四' 內連線一共就這兩種格式,雖然有兩種格式,但是它們查詢出來的結果是一模一樣的,所以大家能記住乙個即可,相對來說第一種用的比較多,並且第一種格式就是在原有的笛卡爾積查詢的基礎之上,增加了乙個條件而已。

外鏈結查詢:

左外連線:select * from a left join b on a.id=b.id;結果:1 'aaa' 1 '張三'2 'bbb' 2 '李四'3 'ccc' null null右外連線:select * from b right join a on a.id=b.id;結果:1 '張三' 1 'aaa'2 '李四' 2 'bbb'null null 3 'ccc' 注:以上兩種寫法其實查詢出來的結果也算是一樣的,只不過查詢出來的表的列誰在前誰在後的問題,外鏈結查詢說白了,就是在原有的內連線查詢的結果基礎之上,在多查詢出來乙個結果,就是左外連線的左邊的表裡的所有資料或者右外連線表裡的所有的資料,既先滿足on後面的條件,然後再查詢左外或者右外表裡的所有的資料。上面這兩種寫法都是查詢出所有的a表裡的資料,如果想要查詢所有的b表裡的資料如下:

左外連線:select *from b left join a on a.id=b.id;結果:1 '張三' 1 'aaa'2 '李四' 2 'bbb'4 '王五' null null右外連線:select * from a right join b on a.id=b.id;結果:1 'aaa' 1 '張三'2 'bbb' 2 '李四'null null 4 '王五' 子查詢:  所謂的子查詢就是指乙個查詢語句中又巢狀了乙個查詢語句。  

例:         

查詢a表中id值為b表中名字為張三的id值的姓名:select name from a where id=(select id from b where name='張三');結果:'aaa' 以上幾種查詢格式就是mysql中多表查詢比較簡單,並且不複雜的查詢語句,當然,今天講解的這幾個查詢也是mysql最基礎入門的查詢語句,在實際開發中,有很多很多複雜的查詢結構,所以以後還需要大家多做一些多表查詢的練習題來鞏固。如果朋友們能把以上的內容掌握的話,那mysql的多表設計和多表查詢也算是入門了。

以上內容就是本章要給大家講解的知識點,內容不多,但可以幫助大家尤其是零基礎的朋友們學好mysql中的多表設計和多表查詢,最後祝願每一位學習mysql的朋友們馬到成功,更上一層樓。

mysql多表 MySQL 多表查詢

多表查詢 select listname from tablename1,tablename2 笛卡爾積 多表查詢中,如果沒有連線條件,則會產生笛卡爾積 數學中的定義 假設集合a 集合b 則兩個集合的笛卡爾積為 實際執行環境下,應避免使用笛卡爾積 解決方案 在where加入有效的連線條件 等值連線 ...

mysql多表查詢方式 MySQL多表查詢方式問題

你的 sql 沒有用到任何索引,對 a b 兩個表都是全表掃瞄,在資料量小的時候是沒有問題的,但是如果資料量超過 100 萬,效能問題就會突顯出來。這裡不清楚你的 created at 欄位是什麼型別,不過從你的 date format created at,y m d 看來,應該是 datetim...

mysql 多表查詢or MySQL 多表查詢

前期準備 建表create table dep id int,name varchar 20 create table emp id int primary key auto increment,name varchar 20 enum male female not null default ma...