-- 联表查询 join
-- 查询参加了考试的同学(学号,姓名,成绩)
ALTER TABLE `student2_copy` ADD grade INT(100)
UPDATE `student2_copy`SET `grade`=66 WHERE id=1;
UPDATE `student2_copy`SET `grade`=89 WHERE id<8 AND id>2 -- 添加成绩
SELECT * FROM`student2`;
SELECT * FROM `student2_copy`
/*思路
1.分析需求,分析查询的字段来自那些表(连接查询)
2.确定使用哪种连接查询?主要三种,共七种
3.确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中的id=id
*/
ALTER TABLE `student2_copy`DROP `grade`-- 删除表字段
SELECT a.`id`,a.`name`,b.`grade`
FROM `student2_copy` AS a
INNER JOIN `student2_copy_copy` AS b
WHERE a.`id` = b.`id`
-- right join
SELECT c.`id`,c.`name`,c.`sex`,d.`grade`
FROM `student2_copy` c
RIGHT JOIN `student2_copy_copy` d
ON c.`id` = d.`id`
-- left join
SELECT e.`id`,e.`name`,e.`sex`,f.`grade`
FROM `student2_copy` e RIGHT JOIN `student2_copy_copy` f
ON e.`id` = f.`id`
/*
操作 描述
inner join 如果表中至少有一个匹配,就返回行
left join 会从左表中返回所有的值,即使右表中没有匹配
right join 会从右表中返回所有的值,即使左表中没有匹配*/
-- 查询缺考的同学
SELECT e.`id`,e.`name`,e.`sex`,f.`grade`
FROM `student2_copy` e RIGHT JOIN `student2_copy_copy` f
ON e.`id` = f.`id`
WHERE `grade` IS NULL
-- 思考题(查询参加考试的同学的名字,邮箱,学号,出身日期,贯籍)
SELECT e.`id`,e.`name`,e.`birthday`,e.`address`,e.`email`,f.`grade`
FROM `student2_copy` e RIGHT JOIN `student2_copy_copy` f
ON e.`id` = f.`id`
WHERE `grade` !='NULL'