多表查询
表与表之间的关系
--一对一
--一对多
--多对多
多表查询
student表

score1表

curse表

-- 查询得到的结果叫笛卡尔积 SELECT * FROM student,score1; -- 目的是查询学生的某个科目的某个成绩 -- 通过某些特殊的键(主外键关系)去除一些重复的信息 SELECT student.id,student.name,student.age,student.gender,score1.cid,score1.score,curse.cname,curse.catogory FROM student,score1,curse WHERE student.id=score1.id AND score1.cid= curse.cid; -- 简化语句 SELECT s.id,s.name,s.age,s.gender,c.cname,c.catogory,s1.cid,s1.score FROM student s,score1 s1,curse c WHERE s.id=s1.id AND s1.cid=c.cid;
-- 连接查询 -- 1.内连接:inner(可选) join on 条件,默认的查询连接,可以不加on条件 SELECT * FROM student INNER JOIN score1 ON student.id=score1.id; SELECT * FROM student JOIN score1 ON student.id=score1.id; -- 等价于 SELECT * FROM student,score1 where student.id=score1.id; -- 2.外连接: 左外连接 left outer(可选) join on 条件,右外连接 right outer(可选) join on 条件: 必须添加条件 SELECT * FROM student LEFT OUTER JOIN score1 ON student.id=score1.id; SELECT * FROM score1 LEFT OUTER JOIN student ON student.id=score1.id; -- 等价于 SELECT * FROM student RIGHT OUTER JOIN score1 ON student.id=score1.id; -- left 关键字前的表为主表,left 关键字前的表为副(从)表,查询的结果参照的是主表 -- right 关键字前的表为副(从)表,right 关键字前的表为主表,查询的结果参照的是主表 -- 3.自然连接: natural join :自动去除无用重新信息 SELECT * FROM student NATURAL JOIN score1; -- 情况2:联合查询列数相同 (列的个数,列的类型) -- select * from student -- union all -- select * from score1; -- 为了面试:联合查询条件:列名可以不一样,类型一样,列数必须一致 -- UNION ALL:保存所有表的数据,会出现重复数据 -- UNION:保存所有表数据,但是会去除重复的数据 SELECT * FROM b UNION SELECT * FROM a;

浙公网安备 33010602011771号