哈密市网站建设_网站建设公司_全栈开发者_seo优化
2025/12/19 10:32:36 网站建设 项目流程

一、INNER JOIN(内连接)

返回两个表中匹配的行

-- 显式写法(推荐)
SELECT * 
FROM table1 
INNER JOIN table2 
ON table1.id = table2.table1_id;-- 隐式写法
SELECT * 
FROM table1, table2 
WHERE table1.id = table2.table1_id;

二、LEFT JOIN(左连接)

返回左表所有行 + 右表匹配的行(不匹配则为NULL)

SELECT *
FROM table1
LEFT JOIN table2 
ON table1.id = table2.table1_id;-- 只查左表有但右表没有的记录
SELECT *
FROM table1
LEFT JOIN table2 
ON table1.id = table2.table1_id
WHERE table2.table1_id IS NULL;

三、RIGHT JOIN(右连接)

返回右表所有行 + 左表匹配的行(不匹配则为NULL)

SELECT *
FROM table1
RIGHT JOIN table2 
ON table1.id = table2.table1_id;

四、FULL OUTER JOIN(全外连接)

MySQL不直接支持,但可通过UNION模拟

SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id
UNION
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id
WHERE table1.id IS NULL;

五、CROSS JOIN(交叉连接)

返回笛卡尔积(所有可能的组合)

-- 显式写法
SELECT * 
FROM table1 
CROSS JOIN table2;-- 隐式写法
SELECT * 
FROM table1, table2;

六、SELF JOIN(自连接)

表与自身连接

-- 查询员工的经理信息
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

七、NATURAL JOIN(自然连接)

自动根据相同列名连接(不推荐使用)

SELECT * 
FROM table1 
NATURAL JOIN table2;

八、USING 子句

当连接列名相同时的简化写法

SELECT *
FROM table1
JOIN table2 USING (id);  -- 等同于 ON table1.id = table2.id

九、多表连接

SELECT *
FROM orders o
JOIN customers c ON o.customer_id = c.id
JOIN products p ON o.product_id = p.id
LEFT JOIN shippers s ON o.shipper_id = s.id;

十、连接性能优化建议

  1. 使用索引:确保连接条件的列有索引

  2. 小表驱动大表:将小表放在前面

  3. **避免SELECT ***:只选择需要的列

  4. 注意NULL值:NULL会影响连接结果

  5. 使用EXPLAIN分析:查看执行计划

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询