赞
踩
员工表emp
部门表dept
在mysql中,笛卡尔积是指两个表没有指定任何连接条件的连接结果。两个表的笛卡尔积为这两个表所有行的组合,即每个表中的每一行都会与另一个表的每一行进行组合,产生一个包括两个表所有组合情况的结果集。(可也以不止两个表)
笛卡尔积的大小:例如表A有n行,表B有m行,那表AB的笛卡尔积的结果集为n*m行。
案例:将dept表与emp表进行无条件连接
from后面接需要连接的表,用逗号隔开。
内连接是SQL中常用的连接类型之一,用于将两个表中满足条件的行合并成一个结果集。内连接返回两个表中在连续条件上匹配的行,并且只包含匹配的行。其中如果两个内连的表是同一张表,我们称之为自连接。
语法:
SELECT columns
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
inner join
表示内连接,inner可省略。on
后面跟匹配条件,表示从两个表的笛卡尔积中进行条件筛选。也可以用where代替。下面用实际案例来学习内连接:
select ename,dname from dept join emp on dept.deptno=emp.deptno where ename='SMITH';
跟内连接不一样的是,外连接能返回两个表匹配或者不匹配的行。跟详细地,外连接又分为左外连接和右外连接。
左外连接返回左表的所有行,包括右表中与左表条件匹配地行。如果左表的某一些行在右表没有与之匹配的行不,则右表的列会显示null。左表表示最靠近from的表。简单来说,左外连接就是以左表为核心,去看右表有没有与之匹配的,没有就显示NULL.
语法:
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
上面语法中,table1表示左表,table2表示右表。
准备表数据:
-- 建两张表
create table stu (id int, name varchar(30)); -- 学生表
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
create table exam (id int, grade int); -- 成绩表
insert into exam values(1, 56),(2,76),(11, 8);
select * from stu left join exam on stu.id=exam.id;//为了避免歧义,stu.id表示stu表中的id字段
含义和左外连接类似,只不过是以右表为主,如果左表没有与之条件匹配的行,合并后该行的左表信息显示NULL。
select * from stu right join exam on exam.id=stu.id;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。