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`
查询学员的