自連線查詢
假想以下場景:某一電商**想要對站內產品做層級分類,乙個類別下面有若干子類,子類下面也會有別的子類。例如數碼產品這個類別下面有筆記本,台式電腦,智慧型手機等;筆記本,台式電腦,智慧型手機又可以按照品牌分類;品牌又可以按照**分類,等等。也許這些分類會達到乙個很深的層次,呈現一種樹狀的結構。那麼這些資料要怎麼在資料庫中表示呢?我們可以在資料庫中建立兩個欄位來儲存id和類別名稱,使用第三個字段儲存類別的子類或者父類的id,最後通過自連線去查詢想要的結果。
自連線查詢其實等同於連線查詢,需要兩張表,只不過它的左表(父表)和右表(子表)都是自己。做自連線查詢的時候,是自己和自己連線,分別給父表和子表取兩個不同的別名,然後附上連線條件。看下面的例子:
1. 建立資料表:
create table tdb_cates(
id smallint primary key auto_increment,
cate_name varchar(20) not null,
parent_id smallint not null
注:cate_name表示分類的名稱,parent_id表示父類的id。
2. 插入資料:
insert into tdb_cates(cate_name, parent_id) values('數碼產品', 0);
insert into tdb_cates(cate_name, parent_id) values('家用產品', 0);
insert into tdb_cates(cate_name, parent_id) values('筆記本', 1);
insert into tdb_cates(cate_name, parent_id) values('智慧型手機', 1);
insert into tdb_cates(cate_name, parent_id) values('電器', 2);
insert into tdb_cates(cate_name, parent_id) values('家具', 2);
insert into tdb_cates(cate_name, parent_id) values('冰箱', 5);
insert into tdb_cates(cate_name, parent_id) values('洗衣機', 5);
insert into tdb_cates(cate_name, parent_id) values('汽車品牌', 0);
insert into tdb_cates(cate_name, parent_id) values('別克', 9);
insert into tdb_cates(cate_name, parent_id) values('寶馬', 9);
insert into tdb_cates(cate_name, parent_id) values('雪佛蘭', 9);
insert into tdb_cates(cate_name, parent_id) values('家紡', 0);
查詢結果:
3. 查詢所有分類以及分類的父類:假想有左右兩張表(都是tdb_cates),左表是子表,右表是父表;查詢子表的id,子表的cate_name,父表的cate_name;連線條件是子表的parent_id等於父表的id。
複製** **如下:
select s.id, s.cate_name, p.cate_name from tdb_cates s left join tdb_cates p on s.parent_id=p.id;
查詢結果:
4. 查詢所有分類以及分類的子類:還是假想有左右兩張表(都是tdb_cates),左表是子表,右表是父表;查詢子表的id,子表的cate_name,父表的cate_name;連線條件是子表的id等於父表的parent_id。
複製** **如下:
select s.id, s.cate_name, p.cate_name from tdb_cates s left join tdb_cates p on p.parent_id=s.id;
查詢結果:
mysql自連線例項 Mysql自連線查詢例項詳解
自連線查詢 假想以下場景 某一電商 想要對站內產品做層級分類,乙個類別下面有若干子類,子類下面也會有別的子類。例如數碼產品這個類別下面有筆記本,台式電腦,智慧型手機等 筆記本,台式電腦,智慧型手機又可以按照品牌分類 品牌又可以按照 分類,等等。也許這些分類會達到乙個很深的層次,呈現一種樹狀的結構。那...
mysql 自連線查詢
自連線查詢 自連線就是乙個表和它自身進行連線,是多表連線的特殊情況。在自連線查詢中,要先在from字句中為表分別定義兩個不同的別名,然後使用這兩個別名寫出乙個連線條件。條件比較在同乙個表中的情況 任務1 查詢課程類別相同但是開課系部不同的課程資訊 要求顯示課程編號 課程名稱 課程類別與系部 編號,並...
mysql連線查詢 010 MySQL 自連線查詢
本節內容不多,主要是補充一下,對初學sql者來說,接觸的比較少或者說不易理解的自連線查詢。因為面試題中也是會遇到的,所以一定還是要理解。自連線是指使用表的別名實現表與其自身連線的查詢方法。一般情況下,很多問題的解決,需要我們進行多表查詢,將兩表中某些資料聯結,來得到我們所需的資料。但有些情況下,我們...