sql 减法_SQL中的几种表联结的区别

DAY1 Studyboom

整理如下:

SQL中表的联结(JOIN)就是将其他表中的列添加过来,进行“添加列”的集合运算。与表的加减法(UNION并集、INTERSECT交集、EXCPTE差集)等集合运算不一样,UNION等运算是以行(纵向)为单位进行操作,而JOIN等联结方式是以列(横向)为单位进行的。

主要分为INNER JOIN和OUTER JOIN

这里复习一下如何创建表A:

CREATE TABLE persons(
id_p varchar(10) not null primary KEY,
Lastname varchar(20) not null,
Firstname varchar(20) not null,
Address varchar(20) not null) 
alter table persons add column City varchar(20) not NULL;

发现少了City一列,如何添加列?

ALTER TABLE <表名> ADD COLUMN <列名> <该列数据类型> <该列所需条件>

alter table persons add column City varchar(20) not NULL;

在Persons表中插入数据:

INSERT into persons values(
'1','Adams','John','Oxford Street','City');
INSERT into persons values(
'2','Bush','George','Fifth Avenue','New York');
INSERT into persons values(
'3','Carter','Thomas','Changan Street','Beijing');

发现City这里的数据添加错了,如何修改数据呢?

UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...

update persons set City='London' WHERE id_p='1'

查看表

e875de01d64467eaf8c77b7871177612.png

创建表B:

CREATE TABLE Orders(
id_O  VARCHAR(5) NOT NULL PRIMARY KEY,
OrderNo varchar(10) not NULL,
id_p varchar(5) not NULL)

INSERT into Orders values('1','77895','3');
INSERT into Orders values('2','44678','3');
INSERT into Orders values('3','22456','1');
INSERT into Orders values('4','24356','1');
INSERT into Orders values('5','34764','65');

cb14b0bbe07a6eb6234a6b3c323a3597.png

1、内联接—inner join 只返回两个表中联结字段相等的行

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName;

45777b45ee6e844936c04c93ca4966b2.png

2.左联结—left(outer)rjoin 返回包括左表中的所有记录和右表中联结字段相等的记录

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName;

840f1b19336f73b0e151ea66d971a64b.png

以左表为基础,LastName为Bush的行的Id_P字段在右表中没有匹配,查询结果仍然保留该行,右表没有的数据并用null填充。

3. 右联结—right(outer) join 返回包括右表中的所有记录和左表中联结字段相等的记录

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName;

c41725abb25fbce572af8085c1910df5.png

以右表为基础,右表中存在的OrderNo列中的34764在左表中无对应的数值,结果仍保留,无对应的值用null填充。

4. full join 表A和表B的并集

5. cross join 笛卡尔积

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值