mysql多表 MySQL 多表查詢

2021-10-25 14:16:38 字數 1826 閱讀 8721

多表查詢:

select listname from tablename1,tablename2;

笛卡爾積

多表查詢中,如果沒有連線條件,則會產生笛卡爾積

數學中的定義:假設集合a=,集合b=,則兩個集合的笛卡爾積為

實際執行環境下,應避免使用笛卡爾積;

解決方案:

在where加入有效的連線條件----->等值連線(連線n張表,需要n-1個連線條件)

主鍵約束

約束當前表中,指定列的值非空且唯一

外來鍵約束

表a中的外來鍵列的值必須參照表b中的某一列的值

mysql中,innodb支援外來鍵和事務,myisam不支援外來鍵和事務

/* 修改表的儲存引擎 */

alter table [tablename] engine='innodb';

alter table [tablename] engine='myisam';

新增外來鍵後:

一般情況下,如果列要使用外來鍵列,可以這樣命名:引用表名_引用列名

我們要引用productdir表中的id列

命名;dir_id

在開發中,為了提高效能,會故意刪除外來鍵約束,通過**來控制資料的合理性。

隱式連線

隱式內連線(看不到連線):僅選出兩張表中互相匹配的記錄

隱式連線缺點:

需要在where條件中加入連線條件,如果忘了寫,**不會報錯,但是會產生笛卡爾積

只能做內連線

顯示連線

內連線查詢:查詢效果和隱式內連線相同

select [table.list],[table.list] from [table] join [table] on(連線關係);

select e.empno,e.name,d.dname from emp e join dept d on(e.deptno = d.deptno);

/* 連線關係列名相同可以用using */

select e.empno,e.name,d.dname from emp e join dept d using(deptno);

外連線:

左連線:將join左邊表全部資料都查詢處理啊,join右邊表不匹配的資料null填充

/* 將左邊表所有資料都顯示 */

select * from emp left join dept using(deptno);

右連線全外連線:mysql暫時不支援

自連線:把一張表看成兩張表來做查詢

mysql的多表操作 MySQL多表操作

交叉連線 交叉連線 cross join 又稱笛卡爾連線 cartesian join 或叉乘 product 它是所有型別內連線的基礎。它把表看作是行記錄的集合,交叉連線即返回這兩個集合的笛卡爾積。這其實等價於內連線的連線條件始終為 真 或連線條件不存在。笛卡爾積引用自數學,在數學中,兩個集合x和...

mysql多表分析 MySQL 多表查詢實現分析

1 檢視第乙個表 mytable 的內容 mysql select from mytable name birth birthaddr abccs f 1977 07 07 china mary f 1978 12 12 usa tom m 1970 09 02 usa 2 建立第二個表 title...

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

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