首页 > 代码库 > 多表联接查询解析

多表联接查询解析

/*******************************************************************/
>多表联接查询解析
/*******************************************************************/

0.为什么要多表联接查询
/*******************************************************************/
>原因:
      //为了达到数据表的独立性我们不能够将学生表和成绩表这两张表设计成一张表
      //需要将其分成两张表,如果我想要学生的信息和学生的成绩信息,这时候不知道要
      //怎么办,就需要用到多表连接查询了,多表连接查询通常通过主外键关系进行关联,
      //将两张表中指定列中具有相同的值的行给连接起来组成一行,形成一个新的表。
>原理:
      //多表联接查询实际上是通过各个表之间共同列的关联性来查询数据的,他是关系数据查询
      //最主要的特征。
/*******************************************************************/

1.内联接(inner join)
/*******************************************************************/
>介绍:
//       内联接是最典型,最常用的联接查询,它根据表中共同的列来进行匹配,
//       特别是两个表之间存在主外键关系的时候通常会使用到内联接查询。
//注意:
//在联接中两个表的地位是平等的只有被指定的两个列的值相等的时候才将这两
//两个表中的记录连接起来否则将会被丢弃掉   
//查询实例:
//    select st.name,st.age,st.id,sc.scocre from student st
//    inner join score sc
//     on st.id=sc.id;//条件对等则连接起来成为一行
    
//也可以使用笛卡尔积来做内联接
//    select st.name,st.age,st.id,sc.score from student st,score sc
//    where st.id=sc.id;
   
/*******************************************************************/

2.外联接
/*******************************************************************/
>//外联接和内联接之间的主要区别在于内联接的时候两个表的地位是平等的而
 //在外联的时候区分主从就是以哪个表为基准而不是双方同时满足的时候才决定是否
 //联接起来,而是只要有主方满足条件就行如果从放不满足条件就会以null的形式填充
>左外联接
 //在左边都是主表
 select s.name,c.coreseid,c.score from student s
 left outer join score c
 on s.sid=c.sid;//返回所有学生表的信息行并且有列值相同的成绩表的信息的行连接起来否则成绩表的行为null
>右外联接
//右外联接和左外联接是相对的
>全联接
/*******************************************************************/


3.union和union all
/*******************************************************************/
>select * from emp union all select * from emp;
 //将两个查询的结果集合并成一个表(上下关系)
>select * from emp union select * from emp;
 //将两个查询的结果集合并成一个表会去除重复的行
/*******************************************************************/


4.子查询
/*******************************************************************/
>select * from stuinfo where stuage>(select stuage from stuinfo where stuinfo.name=‘zhangsan‘);
//子查询会首先执行得到查询结构然后再执行外围查询

//in/not in
//exists/not exists
/*******************************************************************/

多表联接查询解析