多表查詢:
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...