今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)

改正细节

1)改表2:增加 id =7 

--// done 

2) 看新的的left join

right join的效果

3)看 增加id=7 后的 full join 效果

4)看 inner join 效果.

5)看 不带 where的交叉链接产生的笛卡尔记积.

它等价的 select (sqli 语句)

6)网上再搜下 自链接的例子. 


下面是操作的具体结果 : 

see what does happen in practical lab!! 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第1张图片

1) 如右接连 right join 或 right outer join

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第2张图片

我们以右边voter表为准,则左表(voteMaster)中的记录只有当其ID在右边(voter)中存在时才会显示出来,如上图,左边中ID为3.4.5.6因为这些ID右表中没有相应记录,所以没有显示!


2) 因此我们自然能理解左连接 left join 或者 left outer join 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第3张图片

可见,现在右边中ID在中存在时才会显示,当右边中没有相应数据时则用NULL代替!


3) 全连接 full join 或者 full outer join,为二个表中的数据都出来,这里演示效果与上一样! 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第4张图片

--// 注意 看上图: 

其实 就是  left join + right join 后的全集 !!  (虽然 各自 多了很多的 null 属性 == 就是不符合 vm.id =vt.id 的,但是也是 全集里的值)  


今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第5张图片

4) inner join 或者 join;

4-1  ,用 join (直接是 join) 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第6张图片

4-2 ,用 inner join :

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第7张图片



5):交叉连接(完全连接)cross join 不带 where 条件的 

--//注意: 没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生6*4=24条记录)

--// 注意 : 等价 

select vm.id,vm.voteTitle,vt.ip 

from voteMaster as vm,voter as vt   

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第8张图片
今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第9张图片

6) self join // SELF JOIN 自联接  

--注意 , 自联接 , 因为 --本质上是 

SQL 自联接(SELF JOIN)是一个数据表和它本身的正常联接。注: SQL 自联接可以是任何类型的联接:SQL INNER JOIN, SQL LEFT JOIN, SQL RIGHT JOIN, SQL FULL JOIN。 SQL 自联接(SELF JOIN)本身不是一个SQL关键词。

6-01 ) 可以 用join   --- // 用join 的时候,没有 self join 这个语法, 直接用 left join 或 (inner)join 就可以,== 因为 从 逻辑上说 ,self join 自联接是等大的 2个表,所以 左联 join 和 内联 join 就够了。 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第10张图片

6-02 )  可以 不用join ,用 (select 的嵌套) 也可以完成 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第11张图片

6-03)  当问题是 :选择并显示所有的在同一部门的职员(employee)?

用left join 做self join 做一次 同部门的应用案例的尝试 (注意是 左6*3右) rows 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第12张图片

6-04)  当问题是 :选择并显示所有的在同一部门的职员(employee)?

用inner join 做self join 做一次 同部门的应用案例的尝试 

--//注意 ,(注意是 左6*3右) rows 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第13张图片

6-05) 当问题是 : 选择所有的和 Mazojys Fxoj 在同一部门的职员(employee)?:

用inner join 做self join 做一次 同部门的应用案例的尝试 + 加上 dpt2.的缩小范围的限制。 

今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表)_第14张图片

你可能感兴趣的:(今晚 要做的join的作业6大分类(基于目前vm ,vt2个例子表))