Java 面试知识整理(二):数据库

内连接 vs 外连接

假设有两张表:

users 表:

idname
1田中
2佐藤
3鈴木

orders 表:

iduser_idproduct
11りんご
21みかん
33ぶどう

INNER JOIN(内连接)

只返回匹配的数据

SELECT * FROM users u
INNER JOIN orders o ON u.id = o.user_id;

结果:只显示有订单的用户(田中×2、鈴木×1),佐藤没有订单所以不显示

LEFT JOIN(左外连接)

返回左表所有数据,右表没有匹配的显示 NULL

SELECT * FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

结果:佐藤也会出现,但订单列为 NULL

RIGHT JOIN(右外连接)

返回右表所有数据,左表没有匹配的显示 NULL

SELECT * FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;

对比总结

连接类型返回结果
INNER JOIN两表都匹配的数据
LEFT JOIN左表全部 + 右表匹配的
RIGHT JOIN右表全部 + 左表匹配的
FULL OUTER JOIN两表全部(MySQL 用 UNION 模拟)

面试回答(日文):

内部結合(INNER JOIN)は、両方のテーブルに一致するデータのみを返します。 外部結合(OUTER JOIN)は、一致しないデータも含めて返します。 LEFT JOINは左側のテーブルの全データを、RIGHT JOINは右側のテーブルの全データを返します。


索引(Index) vs 主键(Primary Key)

对比项索引(インデックス)主键(プライマリーキー)
目的查询加速唯一标识一条记录
唯一性可以不唯一必须唯一
NULL允许不允许
数量一个表可以有多个一个表只能有一个
自动创建需要手动创建创建表时自动创建索引
CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,  -- 主键
    email VARCHAR(100),
    INDEX idx_email (email)  -- 普通索引
);

主键(Primary Key) vs 外键(Foreign Key)

对比项主键外键
作用唯一标识本表记录关联其他表
所在表本表子表(从表)
值来源自增或业务生成必须来自主表的主键
重复不允许允许重复
NULL不允许允许
CREATE TABLE orders (
    id BIGINT PRIMARY KEY,
    user_id BIGINT,
    FOREIGN KEY (user_id) REFERENCES users(id)  -- 外键
);

MySQL 增删改查语法

-- 查询(SELECT)
SELECT * FROM users;
SELECT id, name FROM users WHERE age > 20 ORDER BY id DESC;
SELECT COUNT(*) FROM users GROUP BY status;

-- 新增(INSERT)
INSERT INTO users (name, email) VALUES ('田中', 'tanaka@test.com');
INSERT INTO users (name, email) VALUES 
    ('佐藤', 'sato@test.com'),
    ('鈴木', 'suzuki@test.com');

-- 修改(UPDATE)
UPDATE users SET email = 'new@test.com' WHERE id = 1;

-- 删除(DELETE)
DELETE FROM users WHERE id = 1;