/* 人 拥有朋友(字段) */ -- 创建数据库 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), -- 朋友 phome varchar(100) -- 家乡 ); insert into person values (null,'张三',default,20,'李四,王五,赵六','河南省郑州市'); */ /* 一个人,多个朋友,属于一个字段带多个数据 再设计一个表作为朋友表(通过外键来设计关系) */ create table person( pid int primary key auto_increment, -- 编号 pname varchar(20) not null, -- 姓名 psex char(2) default "男", -- 性别 page int not null, -- 年龄 sheng varchar(50), -- 省 shi varchar(50) -- 市 ); -- 插入测试数据 insert into person values (1,'张三',default,20,'河南省','郑州市'), (2,'李四',default,22,'河南省','洛阳市'); -- 查询测试 select * from person; -- 朋友表 create table friends( fid int primary key auto_increment, -- 编号 fname varchar(20) not null, -- 朋友名称 pid int not null, -- 是pid的朋友 foreign key (pid) references person(pid) -- 关系 ); -- 添加测试数据 insert into friends values (null,'李四',1), (null,'王五',1), (null,'赵六',1); -- 查询测试 select * from friends; /* 联表查询 select 字段 from 表1,表2 where 连接条件 内连接: select 字段 from 表1 inner join 表2 on 连接条件 外连接: # 左外连接,以左侧表为主,左表数据全部显示(即使没有关系) # 右侧表没有对应显示为null select 字段 from 表1 left join 表2 on 连接条件 # 右外连接,和左外连接相反 select 字段 from 表1 right join 表2 on 连接条件 */ -- 问题:查询姓名为张三的人的朋友 select * from person,friends where person.pid=friends.pid; select * from person p,friends f where p.pid=f.pid; select concat(pname,"的朋友有",fname) 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;
mysql建库建表和查询
最新推荐文章于 2022-09-24 09:38:54 发布