JoinON
查詢參加考試的同學(學號,科目名稱分數),這些參數是在2個table中,需要用join連接 需要有一個關聯的參數
1.INNER JOIN 並集
SELECT `sid`,`sname`,`cname`
FROM `student` AS a
INNER JOIN `course` AS c
on s.sid=c.sid
2.RIGHT JOIN
3. LEFT JOIN
SELECT `sname`,`cname`
FROM `student` AS a
LEFT JOIN `course` AS c
ON a.sid=c.sid
操作 | 描述 |
INNER JOIN | 如果表中至少一個匹配,就返回行 |
LEFT JOIN | 會從左表中返回所有的值,即使右表中沒有匹配 |
RIGHT JOIN | 會從右表中返回所有的值,即使左表中沒有匹配 |
join(連接的表) on 連接查詢 on代表查詢的條件
where 等值查詢
from a left join b 以a表為基准
SELECT `score`,`tid`,`tname`
FROM `sc` s
RIGHT JOIN `course` c
ON s.sid=c.sid
INNER JOIN `teacher` t
ON c.`cname`=t.`cname`
自連接及連表查詢
自連接:自己的表跟自己的表連接 一張表拆分成2張一樣的表
CREATE TABLE `category`(
`categoryid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主題id',
`pid` VARCHAR(30) NOT NULL COMMENT '父id',
`categoryName`VARCHAR(50) NOT NULL COMMENT '主題名稱',
PRIMARY KEY (`categoryid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
INSERT INTO `category`(`categoryid`,`pID`,`categoryName`)
VALUES('2','1','信息技術'),('3','1','軟件開發'),('4','3','數據庫'),('5','1','美術設計'),('6','3','web開發'),('7','5','ps技術'),('8','2','辦公信息')
父類:
categoryName | categoryid |
信息技術 | 2 |
軟件開發 | 3 |
美術設計 | 5 |
子類:
pid | categoryid | categoryName |
3 | 4 | 數據庫 |
3 | 6 | web開發 |
5 | 7 | ps技術 |
2 | 8 | 辦公信息 |
子類的父id=父類的categoryid
操作:查詢父類對應子類的關系
父類 | 子類 |
信息技術 | 辦公信息 |
軟件開發 | 數據庫 |
軟件開發 | web開發 |
美術設計 | ps技術 |
--查詢父/子類信息
SELECT a.`categoryName` AS '父欄目',b.`categoryName` AS '子欄目'
FROM `category` AS a,`category`AS b
WHERE a.`categoryid`=b.`pid`
查詢學員的