left join
創(chuàng)新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站設計、成都網站建設、全州網絡推廣、微信小程序開發(fā)、全州網絡營銷、全州企業(yè)策劃、全州品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯為所有大學生創(chuàng)業(yè)者提供全州建站搭建服務,24小時服務熱線:13518219792,官方網址:www.cdcxhl.com
join
主外鍵是兩種對表的約束。
例如:
學生表student(學號(id),姓名(name),性別(sex))
表內有:1,aa,女
課程表subject(課程編號(id),課程名(name))
表內有:1,語文
成績表grade(成績編號(id),學號(stu_id),課程號(sub_id),成績(grade))
表內有:1,1,1,90
成績表的學號就是學生表的學號相對應,并且為學生表的主鍵,這樣就稱成績表中的學號是學生表的外鍵,同理,成績表中的課程號是課程表的外鍵。
select * from ?student as s inner join subject as su on su.stu_id=s.id inner join grade as g on g.sub_id=su.id where 1.
擴展資料:
注意事項
SQL 連接(JOIN) 子句用于把來自兩個或多個表的行結合起來,基于這些表之間的共同字段。連接的結果可以在邏輯上看作是由SELECT語句指定的列組成的新表。
左連接與右連接的左右指的是以兩張表中的哪一張為基準,它們都是外連接。外連接就好像是為非基準表添加了一行全為空值的萬能行,用來與基準表中找不到匹配的行進行匹配。
假設兩個沒有空值的表進行左連接,左表是基準表,左表的所有行都出現在結果中,右表則可能因為無法與基準表匹配而出現是空值的字段。
不同的 SQL JOIN可以使用的不同的 SQL JOIN 類型:
INNER JOIN:如果表中有至少一個匹配,則返回行
LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行
FULL JOIN:只要其中一個表中存在匹配,則返回行(MySQL不支持FULL JOIN)
例如:
mysql select * from access_log;
+-----+---------+-------+------------+
| aid | site_id | count | date? ? ? ?|
+-----+---------+-------+------------+
|? ?1 |? ? ? ?1 |? ? 45 | 2016-05-10 |
|? ?2 |? ? ? ?3 |? ?100 | 2016-05-13 |
|? ?3 |? ? ? ?1 |? ?230 | 2016-05-14 |
|? ?4 |? ? ? ?2 |? ? 10 | 2016-05-14 |
|? ?5 |? ? ? ?5 |? ?205 | 2016-05-14 |
|? ?6 |? ? ? ?4 |? ? 13 | 2016-05-15 |
|? ?7 |? ? ? ?3 |? ?220 | 2016-05-15 |
|? ?8 |? ? ? ?5 |? ?545 | 2016-05-16 |
|? ?9 |? ? ? ?3 |? ?201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set
--表結構設計有誤,其實還需要path字段?在插入數據的時候拼接id和pid存入path中即可
CREATE?TABLE?`gtp`?(
`id`?int(11)?NOT?NULL?AUTO_INCREMENT,
`name`?varchar(255)?DEFAULT?NULL,
`pid`?int(11)?DEFAULT?NULL,
`path`?varchar(255)?DEFAULT?NULL,
`status`?varchar(255)?DEFAULT?NULL,
PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=16?DEFAULT?CHARSET=utf8;
--
INSERT?INTO?`gtp`?VALUES?('1',?'男裝',?'0',?'0',?'1');
INSERT?INTO?`gtp`?VALUES?('2',?'女裝',?'0',?'0',?'1');
INSERT?INTO?`gtp`?VALUES?('13',?'上衣',?'1',?'0,1',?'1');
INSERT?INTO?`gtp`?VALUES?('15',?'短袖',?'13',?'0,1,13',?'0');
可以這樣做
path表,新增一個字段比如叫
virtualId,把path字段的{0},{1},{4}
處理下,存到virtualId,值是1,4
type表,新增一個字段比如叫
virtualId,把type字段的1-4-6,處理下,存到virtualId,值是1,4,6,且classId=6
然后用關聯查詢,用virtualId關聯兩張表
先介紹一個簡單的關鍵字(concatenate).將不同的字段的所對應的值可以拼接在一起。簡單的先用一個簡單的示例來演示一下。
首先我們可以看看一個實驗的表格:
上面的表格中有一些數據。例如我們想將id和描述信息放在同一個表格中,此時我們就可以使用concatenate這個關鍵字來將兩個字段進行聯合起來:
從上圖可以看出,我們在使用concat的使用,可以將任意的字段拼接在一起。中間可以加上我們想要填充的內容。在上面的語句中,我添加了一個“:”來分割id和desc信息。
有時候我們對于新生成的一個字段可以給他設置一個別名,就像上面的 concat (prod_id,':',prod_desc) ,這樣看起來并不是很友好。我們現在可以使用as關鍵字來進行對檢索出來的內容進行重命名。直接看結果:
從上圖我們可以看出,將 concat (prod_id,':',prod_desc) 的結果改為一個新的名字, prod_total_desc .