表的内连接和外链接(左连接和右连接)

表的内连接

内连接是利用where子句对两种表形成的笛卡尔积进行筛选。

select 字段 from1 inner join2 on 连接条件 and 其他条件;

inner可以省略
and可以换成where

例:显示SMITH的名字和部门名称
emp表:
在这里插入图片描述
dept表:
在这里插入图片描述

select ename,dname from emp,dept where emp.deptno=dept.deptno and ename ='SMITH';

select ename,dname from emp inner join  dept on emp.deptno=dept.deptno and ename ='SMITH';

select ename,dname from emp inner join  dept on emp.deptno=dept.deptno where ename ='SMITH';

select ename,dname from emp  join  dept on emp.deptno=dept.deptno where ename ='SMITH';

在这里插入图片描述

外连接

左连接

左连接是把左边的表数据全部显示,而右边表数据会进行筛选。

当左边表和右边表没有匹配时,也会显示左边表的数据
select 字段名 from 表名1 left join 表名2 on 连接条件

首先建两张表person和hobby,对应的是个人喜欢的东西

mysql> create table person(
    -> id int,
    -> name varchar(11),
    -> sex varchar(3));

mysql> create table hobby(
    -> id int,
    -> favour varchar(10));
   
给person插入数据   
mysql> insert into person values(1,'pick','男'),(2,'sopha','女'),(3,'alice','女');

给hobby插入数据
mysql> insert into hobby values(1,'vollable'),(2,'run'),(24,'swing');

查询所有人的爱好,如果这个人没有爱好,也要将他个人信息显示出来:

//利用左连接
mysql> select * from person left join hobby on person.id=hobby.id;

在这里插入图片描述

右连接

将右边表信息全部显示出来,左边表数据会进行筛选

select 字段 from 表名1 right join 表名2 on 连接条件;

查询有爱好的人信息:

mysql> select * from person right join hobby on person.id=hobby.id;

在这里插入图片描述

SQL中的连接(Join)用于将两个或多个中的数据关联起来,以便于查询数据。常见的连接类型包括左连接右连接内连接连接。 1. 左连接Left Join):左连接返回左中所有的数据记录,以及右中所有和左匹配的数据记录。如果右中没有匹配的数据记录,则返回 NULL。左连接使用 "LEFT JOIN" 或 "LEFT OUTER JOIN" 关键字实现。 2. 右连接Right Join):右连接返回右中所有的数据记录,以及左中所有和右匹配的数据记录。如果左中没有匹配的数据记录,则返回 NULL。右连接使用 "RIGHT JOIN" 或 "RIGHT OUTER JOIN" 关键字实现。 3. 内连接Inner Join):内连接只返回左右两中都匹配的数据记录。内连接使用 "INNER JOIN" 或 "JOIN" 关键字实现。 4. 连接(Outer Join):连接分为左连接和右连接,左连接返回左中所有的数据记录,以及右中所有和左匹配的数据记录,如果右中没有匹配的数据记录,则返回 NULL;右连接返回右中所有的数据记录,以及左中所有和右匹配的数据记录,如果左中没有匹配的数据记录,则返回 NULL。连接使用 "FULL OUTER JOIN" 或 "FULL JOIN" 关键字实现。 示例代码: ```sql -- 左连接 SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column; -- 右连接 SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column; -- 内连接 SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column; -- 左连接 SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column; -- 右连接 SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.column = table2.column; -- 全连接 SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值