多表查询

表与表之间的关系

  --一对一

  --一对多

  --多对多

 

多表查询

  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;

 

posted @ 2017-05-28 12:33  Java_皮卡丘漏电  阅读(132)  评论(0)    收藏  举报