数据库使用的是mysql
以下创建的表,实现以下功能:
用户1,账号admin,年龄20,关联3件商品
用户2,账号admin2,年龄30,关联2件商品(没有商品和用户1重复)
用户3,账号admin3,年龄50,关联2件商品(这两件商品均是用户1的其中两种)
CREATE TABLE Users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
age INT
);
-- 插入用户数据
INSERT INTO Users (username, age) VALUES ('admin', 20);
INSERT INTO Users (username, age) VALUES ('admin2', 30);
INSERT INTO Users (username, age) VALUES ('admin3', 50);
CREATE TABLE ShoppingCart (
item_id INT PRIMARY KEY AUTO_INCREMENT,
item_name VARCHAR(255) NOT NULL
);
-- 插入购物车商品数据
INSERT INTO ShoppingCart (item_name) VALUES ('商品1');
INSERT INTO ShoppingCart (item_name) VALUES ('商品2');
INSERT INTO ShoppingCart (item_name) VALUES ('商品3');
INSERT INTO ShoppingCart (item_name) VALUES ('商品4');
INSERT INTO ShoppingCart (item_name) VALUES ('商品5');
CREATE TABLE UserItem (
user_id INT,
item_id INT,
PRIMARY KEY (user_id, item_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id),
FOREIGN KEY (item_id) REFERENCES ShoppingCart(item_id)
);
-- 插入用户与购物车商品的关联数据
-- 用户1 (admin) 有三件商品(参数一是用户表id,参数二是商品表id,后面还可以添加其他与此用户相关联的表)
INSERT INTO UserItem (user_id, item_id) VALUES (1, 1);
INSERT INTO UserItem (user_id, item_id) VALUES (1, 2);
INSERT INTO UserItem (user_id, item_id) VALUES (1, 3);
-- 用户2 (admin2) 有两件商品(与用户1没相同的)
INSERT INTO UserItem (user_id, item_id) VALUES (2, 4);
INSERT INTO UserItem (user_id, item_id) VALUES (2, 5);
-- 用户3 (admin3) 有两件商品,都与用户1 (admin) 相同
INSERT INTO UserItem (user_id, item_id) VALUES (3, 1);
INSERT INTO UserItem (user_id, item_id) VALUES (3, 2);
SELECT Users.username, Users.age, ShoppingCart.item_name
FROM Users
LEFT JOIN UserItem ON Users.user_id = UserItem.user_id
LEFT JOIN ShoppingCart ON UserItem.item_id = ShoppingCart.item_id
WHERE Users.username = 'admin2';
-- 这个名字就是用户名(根据用户名查询的,使用了左连接,如果查询不到匹配的值,左连接的右边没有匹配的数据会显示null)
打印结果如下:
admin2打印结果
插入用户信息:首先,插入新用户的信息到 Users 表。假设新用户的用户名是 admin4 年龄是 25,可以执行以下 SQL 语句
INSERT INTO Users (username, age) VALUES ('admin4', 25);
这样就添加用户成功了,执行上面的查询语句会打印出数据,但是商品那里就是null,因为还没有添加商品
SELECT LAST_INSERT_ID() AS new_user_id;
-- 将新用户与商品1和商品2绑定
INSERT INTO UserItem (user_id, item_id) VALUES (new_user_id, 1);
INSERT INTO UserItem (user_id, item_id) VALUES (new_user_id, 2);
SELECT Users.username, Users.age, ShoppingCart.item_name
FROM Users
LEFT JOIN UserItem ON Users.user_id = UserItem.user_id
LEFT JOIN ShoppingCart ON UserItem.item_id = ShoppingCart.item_id
WHERE Users.username = 'admin4';
这里已经成功查询到了admin4用户对应的数据了,如果需要更多的数据,可以分别创建更多的列表
-- 删除用户1(admin)的商品1
DELETE FROM UserItem WHERE user_id = 1 AND item_id = 1;
-- 更新用户2(admin2)的商品4为商品2
UPDATE UserItem
SET item_id = 2
WHERE user_id = 2 AND item_id = 4;
最后还是执行上面的查询语句检查是否更新或者删除商品