MySQL学习小记(二) 混合表

混合表

继续上次的内容

MySQL学习小记(一)_☆迷茫狗子的秘密基地☆-CSDN博客添加新用户及密码查看所有用户给本地的用户赋予特权查看用户的特权工作台按照字段进行升序/降序查看指定范围有哪些人https://blog.csdn.net/qq_39391544/article/details/121354629

新建一个表posts,将上次的users表中的id作为posts的外键

CREATE TABLE posts(
	id INT auto_increment,
    user_id INT,
    title VARCHAR(100),
    body text,
    publish_date DATETIME DEFAULT CURRENT_TIMESTAMP, #时间戳的默认值
    PRIMARY KEY(ID),
    FOREIGN KEY(user_id) REFERENCES users(id) #★
);

插入了几条记录,

通过主键将他们关联起来

SELECT users.first_name, users.last_name, posts.title, posts.publish_date
FROM users
INNER JOIN posts
ON users.id = posts.user_id
ORDER BY posts.title;

 

再新建一个评论表,与使用者和帖子联系起来

CREATE TABLE comments(
	id INT AUTO_INCREMENT,
    post_id INT,
    user_id INT,
    body TEXT,
    publish_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(id),
    FOREIGN KEY(post_id) REFERENCES posts(id),
    FOREIGN KEY(user_id) REFERENCES users(id)
);

插入几条记录

INSERT INTO comments(post_id, user_id, body)
VALUES (1, 3, "1st comment by user_3"),
(2, 3, "2nd comment by user_3"),
(4, 5, "3rd comment by user_5"),
(3, 4, "4th comment by user_4");

连接多个表

SELECT 
comments.body, posts.title, 
CONCAT(users.first_name,'-',users.last_name) AS 'Name'
FROM comments
LEFT JOIN posts ON posts.id = comments.post_id
INNER JOIN users ON users.id = comments.user_id
ORDER BY posts.title;

 

为啥此时在右边加入会出现下面这种情况捏

SELECT 
comments.body, posts.title, users.first_name
FROM comments
LEFT JOIN posts ON posts.id = comments.post_id
RIGHT JOIN users ON users.id = comments.user_id
ORDER BY posts.title;

 

各种JOIN之间的区别

这就需要了解一下各种JOIN之间的区别了, 网上有张图流传的较为广泛

 

以我建的两个表举例

comments表(下面统称为C表)

users表(下面统称为U表)

表C左连接表U,以左为主,则表示以表C为主,关联上表U的数据,查出来的结果显示左边的所有数据,右边显示的是和左边有交集部分的数据

SELECT 
comments.id,comments.user_id,comments.body, users.last_name
FROM comments
LEFT JOIN users ON users.id = comments.user_id;

 

若是右接U表,则会是这样

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泥烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值