MySQL多表查询SQL语句主要有以下几种写法:
单表查询
最基础的多表查询SQL语句,从一张表中查询数据。
```sql
SELECT * FROM 表名 WHERE 条件;
```
简单多表查询
使用逗号分隔多张表,查询这些表中的数据。
```sql
SELECT 字段名 FROM 表1, 表2;
```
也可以在`WHERE`子句中指定表之间的关联条件。
```sql
SELECT 字段名 FROM 表1, 表2 WHERE 表1.关联字段 = 表2.关联字段;
```
复杂多表查询
使用`JOIN`子句(包括`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`、`FULL OUTER JOIN`)来连接多张表,并进行查询。
内连接:获取两个表中字段相互匹配关系的记录。
```sql
SELECT a.id, a.name, a.address, b.math, b.english, b.chinese
FROM tb_demo065 AS a
INNER JOIN tb_demo065_tel AS b
ON a.id = b.id;
```
左连接:获取左表所有记录,右表为空的字段补null。
```sql
SELECT a.id, a.name, a.address, b.math, b.english, b.chinese
FROM tb_demo065 AS a
LEFT JOIN tb_demo065_tel AS b
ON a.id = b.id;
```
右连接:获取右表所有记录,左表为空的字段补null。
```sql
SELECT a.id, a.name, a.address, b.math, b.english, b.chinese
FROM tb_demo065 AS a
RIGHT JOIN tb_demo065_tel AS b
ON a.id = b.id;
```
全连接:获取左右表所有记录,无匹配的记录用null填充。
```sql
SELECT a.id, a.name, a.address, b.math, b.english, b.chinese
FROM tb_demo065 AS a
FULL OUTER JOIN tb_demo065_tel AS b
ON a.id = b.id;
```
交叉连接(笛卡尔积)
获取两张表的笛卡尔积,即所有可能的组合。
```sql
SELECT * FROM 表1, 表2;
```
建议在实际开发中,尽量使用主外键约束来实现表之间的关联,以提高查询效率和数据一致性。同时,根据具体需求选择合适的连接类型,避免使用笛卡尔积导致性能问题。