您的位置:首页 > 数据库 > MySQL

数据库MYSQL学习总结24—多表联查的操作

2019-04-19 21:18 330 查看
版权声明:. https://blog.csdn.net/WildestDeram/article/details/89403524

先创建一个新user

[code]CREATE TABLE IF NOT EXISTS user(
id TINYINT UNSIGNED AUTO_INCREMENT KEY COMMENT '编号',
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
email VARCHAR(50) NOT NULL DEFAULT '134679258@qq.com' COMMENT '邮箱',
proName VARCHAR(10) NOT NULL DEFAULT '北京' COMMENT '用户所在省份'
);

-- 插入数据
INSERT user(username,proName) VALUES('a','北京'),
('b','哈尔滨'),
('c','上海'),
('d','深圳'),
('e','广州'),
('f','重庆');

 如果要把上海删除,而会把上海这个用户删除。如果需要把上海修改成江苏,万一有几万条数据则修改起来麻烦。所以我们需要重新修改表的结构。也就是说把省份作为一个单独的表

[code]-- 创建省份表
CREATE TABLE provinces(
id TINYINT UNSIGNED AUTO_INCREMENT KEY COMMENT'编号',
proName VARCHAR(10) NOT NULL UNIQUE COMMENT '省份'
);
[code]INSERT provinces(proName) VALUES('北京'),
('上海'),
('深圳');
[code]CREATE TABLE IF NOT EXISTS user(
id TINYINT UNSIGNED AUTO_INCREMENT KEY COMMENT '编号',
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
email VARCHAR(50) NOT NULL DEFAULT '134679258@qq.com' COMMENT '邮箱',
proid TINYINT UNSIGNED NOT NULL COMMENT '用户所在省份'
);

-- 插入数据
INSERT user(username,proid) VALUES('a',1),
('b',1),
('c',1),
('d',2),
('e',3),
('f',1),
('g',1);

proid是用户省份的值,通过内连接就可以查询出来

[code]SELECT u.id,u.username,p.proName
FROM user AS u
JOIN provinces AS p
ON u.proid=p.id;

 如果要将'北京'修改成'首都',只需要修改省份表中的数据

[code]UPDATE provinces SET proName='首都'
WHERE id=1;
[code]SELECT u.id,u.username,p.proName
FROM user AS u
JOIN provinces AS p
ON u.proid=p.id;

比起直接去修改user中的值,显然修改省份表比较节省性能 

[code]CREATE TABLE shopName(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT KEY COMMENT '编号',
cateName VARCHAR(50) NOT NULL UNIQUE COMMENT '商品分类名称',
cateDesc VARCHAR(100) NOT NULL DEFAULT 'XX' COMMENT '商品分类描述'
);
INSERT shopName(cateName) VALUES('母婴'),
('服装'),
('电子');

CREATE TABLE thing(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT KEY COMMENT '编号',
productName VARCHAR(50) NOT NULL UNIQUE COMMENT '商品名称',
price FLOAT(8,2) COMMENT '价格',
cateId TINYINT UNSIGNED NOT NULL COMMENT '商品所在分类的编号',
adminId TINYINT UNSIGNED NOT NULL COMMENT '管理员编号'
);
INSERT thing(productName,price,cateId,adminId)
VALUES('iphone9',9888,3,1),
('adidas',1088,2,2),
('nike',888,2,2),
('奶瓶',288,1,1);
[code]-- 查询商品id、商品名称、商品价格 --- 商品分类
SELECT t.id,t.productName,t.price,s.cateName
FROM thing AS t
JOIN shopName AS s
ON t.cateId=s.id;

[code]-- 查询管理员 id username email --- provinces proName
SELECT a.id,a.username,a.email,p.proName
FROM admin AS a
JOIN provinces AS p
ON a.proId=p.id;

 

[code]-- 查询 thing id,productName,price
-- shopName cateName
-- admin username email
SELECT t.id,t.productName,t.price,c.cateName,a.username,a.email
FROM thing AS t
JOIN admin AS a
ON t.adminId=a.id
JOIN shopName AS c
ON t.cateId=c.Id;

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: