1、join连接
join对比
操作符名称 | 介绍 |
---|---|
[inner] join | 只有两个表相匹配的行才会出现在结果集中 |
left join | 即使右表中没有匹配,左表始终返回所有的行信息 |
right join | 即使左表中没有匹配,左表始终返回所有的行信息 |
代码测试
2、建表
CREATE TABLE student(
sno INT AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(10) COMMENT '姓名',
sage INT COMMENT '年龄',
PRIMARY KEY(`sno`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
CREATE TABLE result(
sno INT COMMENT '学号',
subno INT COMMENT '科目编号',
subname VARCHAR(20) COMMENT '科目名称'
)ENGINE=INNODB DEFAULT CHARSET=utf8
ALTER TABLE result ADD grade INT
INSERT INTO result VALUES(1,1,'数学',90),(1,2,'化学',99),(1,3,'物理',98)
UPDATE result SET subno=3 WHERE subname='物理'
INSERT INTO result VALUES(2,1,'数学',90),(2,4,'政治',99)
INSERT INTO result VALUES(3,1,'数学',90),(3,4,'政治',87),(3,2,'化学',89)
ALTER TABLE result DROP subname
CREATE TABLE kemu(
subno INT,
subname VARCHAR(20) COMMENT '科目名称',
subteacher VARCHAR(20) COMMENT '科目老师'
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO kemu VALUES(1,'数学','李老师'),(2,'化学','尧老师'),(3,'物理','吴老师'),(4,'政治','夕老师')
2.1、测试
– 测试[inner] join连接情况
SELECT *
FROM result re
INNER JOIN student s
ON re.`sno` = s.`sno`
– 测试left join连接情况
SELECT *
FROM result re
LEFT JOIN student s
ON re.`sno` = s.`sno`
– 测试rightjoin连接情况
SELECT *
FROM result re
RIGHT JOIN student s
ON re.`sno` = s.`sno`
– 查询学号、学生名字、学科编号、学科成绩
SELECT s.sno,s.sname,re.subno,re.grade
FROM student s
JOIN result re
ON s.sno=re.sno
– 查询学号、学生名字、学科编号、学科成绩、学科名称
SELECT s.sno,s.sname,re.subno,re.grade,k.subname
FROM student s
JOIN result re
ON s.sno=re.sno
JOIN kemu k
ON re.subno=k.subno