當在其他表進行子查詢時,mysql會將結果儲存在一張臨時表中,查詢結束後會釋放建立的臨時表,這就將使查詢的速度變慢。在多表查詢時一般不使用子查詢,而使用連線。
連線分為內連線,外連線,外連線又分為左外連線和右外連線。
例項:
觀察表tdb_goods會發現,欄位goods_cate和brand_name中有很多重複的記錄。
可以對goods_cate,brand_name進行分類。
語句:select `goods_cate` from `tdb_goods` group by `goods_cate`;
語句:select `brand_name` from `tdb_goods` group by `brand_name`;
我們發現在僅僅上面的23條記錄中就有很多重複的條目,如果記錄的條數為1000條,10000條,1000000條甚至更多呢?那將會多少是重複的?並且儲存乙個漢字要佔兩位元組,那有沒有更好的辦法來記錄這些資料呢?答案是有的。
可以把goods_cate和brand_name設定為「邏輯外來鍵「,通過外來鍵關聯其他的表來達到儲存的目的。
具體操作如下:
建立一張tdb_goods_cates表,把上面分類的結果插入到表中。
使用insert ...select....語句把記錄插入的表中
現在台式電腦對應有個編號為1,其他的類別都有乙個對應的編號。
接下來我們通過create...select實現查詢和插入資料一步到位。
查詢表中的記錄如下:
表中各種類別也都對應有乙個編號。
同樣的我們把錶tdb_goods中欄位goods_cate和brand_name中的相應類別也更新為對應的編號,並把欄位名也相應的更新為cate_id,和brand_id.
使用內連線(inner join)來更新。
update tdb_goods inner join `tdb_goods_cates` on goods_cate=cate_name set cate_name=cate_id;
update tdb_goods as a inner join `tdb_goods_brands` as b on a.brand_name=b.brand_name set a.brand_name=b.brand_id.
注意更新brand_name時一定要為兩張表起別名。因為兩張表中有重複字段,會有二義性。
修改欄位名稱alter table tdb_goods
同樣的當我們要顯示產品的資訊時,也要同多表連線才能得到具體的值,而不是對應的編號。
使用內連線inner join來查詢出表中的資訊。
C 學習筆記(八) LINQ查詢之子查詢
在linq中,所謂的子查詢就是包含在另乙個查詢的lambda表示式中的查詢語句。下面這個示例中就是使用子查詢對一組 家名字按姓氏排序 string musos ienumerablequery musos.orderby m m.split last string names ienumerable...
mysql之子查詢
所謂子查詢,就是指在乙個查詢之中巢狀了其他的若干查詢,通過子查詢可以實現多表查詢,該查詢語句中可能包含in,any,all和exists等關鍵字,除此之外還可以包含比較運算子,子查詢經常出現在where和from字句中。where字句中的子查詢 該位置處的子查詢一般返回單行單列,多行單列,單行多列資...
MySQL 之子查詢
定義 子查詢指乙個查詢語句巢狀在另乙個查詢語句內部的查詢,這個特性從 mysql4.1 開始引入,在 select 子句中先計算子查詢,子查詢結果作為外層另乙個查詢的過濾條件,查詢可以基於乙個表或者多個表。子查詢中常用的操作符有 any some all in 和 exists。子查詢可以新增到 s...