内链接,外连接,左连接,右链接

本文介绍了如何从不符合第一范式的数据库设计出发,通过拆分`pfriends`字段创建`person`和`friends`表,并进行内连接、外连接查询。重点在于数据库规范化和SQL操作实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*人
拥有朋友(字段)*/

--创建数据库
drop database if exists mydb;
create database mydb character set utf8;
use mydb;
/*
# 不符合第一范式
# 家乡字段:不符合第一范式(列不可再分,列的原子性)
# 可以把“河南省郑州市”分为两个字段“河南省”“郑州市”
--创建Person表
create table person(
pid int PRIMARY KEY auto_increment,--编号
pname varchar(20) not null,--姓名
psex char(2) default "男",--性别
page int not null,--年龄
pfriends varchar(100)--家乡
);
*/



create table person(
pid int primary key auto_increment, -- 编号
pname varchar(20) not null, -- 姓名
psex char(2) default "男", -- 性别
page int not null, -- 年龄
pfriends varchar(100), -- 朋友
sheng varchar(50), -- 省
shi varchar(50) -- 市
);

--插入测试数据
insert into person values
(1,'张三',default,20,'河南省','郑州市'),
(2,'张四',default,20,'河南省','郑州市');

--朋友表
create table friends(
fid int PRIMARY KEY auto_increment,
fname varchar(20) not null, 
pid int not null,  
FOREIGN KEY (pid) REFERENCES person(pid)
);
--插入数据
INSERT INTO friends VALUES 
(null,'赵六',1),
(null,'李四',1);

/*
联表查询
        select 字段 from 表1,表2 where 连接条件
    内连接:
        select 字段 from 表1 inner join 表2 on 连接条件
    外连接:
        select 字段 from 表1 left join 表2 on 连接条件
        select 字段 from 表1 right join 表2 on 连接条件
*/ 

--查询测试
select * from person;
select * from friends;

select * from person,friends where  person.pid=friends.pid;
--内链接
select * from person p  inner join friends f on p.pid=f.pid;
--左连接
select * from person p left join friends f on p.pid=f.pid;
--右链接
select * from person p right join friends f on p.pid=f.pid;

SELECT  concat(pname,'他的朋友',fname) from person p  inner join friends f on p.pid=f.pid;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值