Sql多表查询大全

多表查询是SQL中一个重要的概念,它允许你从多个表中选择数据。以下是一些常见的多表查询技术和示例:

 

### 1. 内连接(INNER JOIN)

内连接是最常见的连接类型,它只返回两个表中匹配的记录。

 

```sql

SELECT A.*, B.*

FROM TableA A

INNER JOIN TableB B ON A.id = B.id;

```

 

### 2. 左连接(LEFT JOIN)

左连接返回左表中的所有记录,即使右表中没有匹配的记录。

 

```sql

SELECT A.*, B.*

FROM TableA A

LEFT JOIN TableB B ON A.id = B.id;

```

 

### 3. 右连接(RIGHT JOIN)

右连接返回右表中的所有记录,即使左表中没有匹配的记录。

 

```sql

SELECT A.*, B.*

FROM TableA A

RIGHT JOIN TableB B ON A.id = B.id;

```

 

### 4. 全连接(FULL JOIN)

全连接返回两个表中的所有记录,只要其中至少一个表中有匹配的记录。

 

```sql

SELECT A.*, B.*

FROM TableA A

FULL OUTER JOIN TableB B ON A.id = B.id;

```

 

### 5. 交叉连接(CROSS JOIN)

交叉连接返回两个表的笛卡尔积。

 

```sql

SELECT A.*, B.*

FROM TableA A

CROSS JOIN TableB B;

```

 

### 6. 自连接(Self Join)

自连接是一个表与其自身的连接。

 

```sql

SELECT A.*, B.*

FROM TableA A

INNER JOIN TableA B ON A.parent_id = B.id;

```

 

### 7. 联合(UNION)

联合操作用于将两个或多个SELECT语句的结果集组合成一个结果集。

 

```sql

SELECT column1, column2 FROM TableA

UNION

SELECT column1, column2 FROM TableB;

```

 

### 8. 子查询(Subquery)

子查询用于在一个查询中嵌套另一个查询。

 

```sql

SELECT A.*, 

       (SELECT MAX(B.value) 

        FROM TableB B 

        WHERE B.id = A.id) AS max_value

FROM TableA A;

```

 

### 9. 复杂查询示例

以下是一个更复杂的查询示例,涉及多个连接和子查询。

 

```sql

SELECT A.id, A.name, B.total, C.avg_value

FROM TableA A

INNER JOIN (SELECT id, COUNT(*) AS total FROM TableB GROUP BY id) B ON A.id = B.id

LEFT JOIN (SELECT id, AVG(value) AS avg_value FROM TableC GROUP BY id) C ON A.id = C.id

WHERE A.status = 'active';

```

 

### 10. 使用别名

使用别名可以使查询更简洁易读。

 

```sql

SELECT A.id AS user_id, A.name AS user_name, B.order_count

FROM Users A

INNER JOIN (SELECT user_id, COUNT(*) AS order_count FROM Orders GROUP BY user_id) B

ON A.id = B.user_id;

```

 

这些只是多表查询的一部分,实际应用中可能会更加复杂。希望这些示例对你有所帮助!如果有任何具体的问题,欢迎随时提问。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值