数据库操作(2)

参考链接出处:https://www.cnblogs.com/yuzhanhong/p/9286910.html

a,b两张表结构:

2--外连接:

left join 或者left outer join(等同于left join)

左外连接:

SELECT a.*,b.* FROM a LEFT JOIN b ON a.`id`=b.`id`;

等同于:SELECT a.*,b.* FROM a LEFT OUTER JOIN b ON a.`id`=b.`id`;   

b中更不存在的记录填充Null:

(2)[left   join 或者left outer join(等同于left join)]  +  [where B.column is null]

SELECT a.`id` aid,a.`age`,b.`id` bid,b.`name` FROM a LEFT JOIN b ON a.`id`=b.`id` WHERE b.`id` IS NULL;

(3)  right join 或者fight outer join(等同于right join)

SELECT a.`id` aid,a.`age`,b.`id` bid,b.`name` FROM a RIGHT JOIN b ON a.`id`=b.`id`;

(4)[left   join 或者left outer join(等同于left join)]  +  [where A.column is null]

SELECT a.`id` aid,a.`age`,b.`id` bid,b.`name` FROM a RIGHT JOIN b ON a.`id`=b.`id` WHERE a.`id` IS NULL;

(5)full join (mysql不支持,但是可以用 left join  union right join代替)

:这种场景下得到的是满足某一条件的公共记录,和独有的记录

SELECT a.`id` aid,a.`age`,b.`id` bid,b.`name` FROM a LEFT JOIN b ON a.`id`=b.`id` UNION 
       SELECT a.`id` aid,a.`age`,b.`id` bid,b.`name` FROM a RIGHT JOIN b ON a.`id`=b.`id`

(6) full join + is null(mysql不支持,但是可以用 (left join + is null) union (right join+isnull代替)

:这种场景下得到的是A,B中不满足某一条件的记录之和

 SELECT a.`id` aid ,a.`age`,b.`id` bid,b.`name` FROM a
        LEFT JOIN b 
        ON a.`id`=b.`id`
        WHERE b.`id` IS NULL
        UNION 
        SELECT a.`id` aid,a.`age`,b.`id` bid,b.`name` FROM a
        RIGHT JOIN b
        ON a.`id`=b.`id`
        WHERE a.`id` IS NULL

3---交叉连接:(cross join)

:实际应用中还有这样一种情形,想得到A,B记录的排列组合,即笛卡儿积,这个就不好用集合和元素来表示了。需要用到cross join:

 SELECT a.`id` aid,a.`age`,b.`id` bid,b.`name` FROM a 
        CROSS JOIN b

3.1还可以为cross  join指定条件 (where):

 SELECT a.`id` aid,a.`age`,b.`id` bid,b.`name` FROM a
        CROSS JOIN b
        WHERE a.`id`=b.`id`

3.2创建表,创建外键约束的表:

01.new表:

CREATE TABLE news(

id INT UNSIGNED AUTO_INCREMENT KEY,

title VARCHAR(100) NOT NULL UNIQUE,

content VARCHAR(100) NOT NULL,

cate_id TINYINT UNSIGNED NOT NULL,

FOREIGN KEY(cate_id) REFERENCES news_cate(id)

);

02:新闻分类表:

创建新闻分类表:news_cate

CREATE TABLE news_cate(

id TINYINT UNSIGNED AUTO_INCREMENT KEY,

cate_name  VARCHAR(50) NOT NULL UNIQUE,

cate_desc VARCHAR(100)  NOT NULL DEFAULT ' '

);

所谓的脏数据,此时我们就要用外键,来保持数据的一致性和完整性.此时news表中的id和news_cate中的id进行了约束绑定,所以在进行news表中的数据插入时,同时要考虑到news_cate中标中的id存在不存在的情况:

不能插入非法数据了:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值