数据库联表跨表查询

本文详细介绍了SQL中的五种核心查询技巧:去除重复项的UNION与UNION ALL、左连接(left join)、右连接(right join)、内连接(inner join)以及子查询(in),并提供了具体的示例帮助理解。

a表
aidname
1a1
2a2
3a3
4a4


b表
bidnick
1a1
3b3
5a3
6b4

1. union  和 union all

将两个表的查询结果合并起来,这个两个不同得是union会将重复的去掉,而union all 无论是否重复都会将查询到的内容全部显示出来。

示例:SELECT name FROM a UNION   SELECT nick FROM b

结果 :a1 a2 a3 a4 b3 b4

SELECT name FROM a UNION ALL  SELECT nick FROM b

结果: a1 a2 a3 a4 a1 b3 a3 b4

============================================================

2. 左联 (left join)

以左表为基准,首先取出左表中的全部数据,再加上与右表相匹配的数据。
示例:select * from a left join b on a.aid = b.bid 
先取出a中的全部数据,再加上b表中与a表aid相等的数据
查询结果:1 a1 a1
  2 a2  null
3  a3  b3
4  a4  null

3. 右联 (right join)

与左联正好相反,它是以右表为基准,再加上与左表相匹配的数据
示例:select * from a right join b on a.aid = b.bid
先取出b中的全部数据,再加上a表中与b表aid相等的数据
查询结果 : 1 a1 a1
   3  b3 a3
   5  a3  null
   6  b4 null

4. 内联 (inner join)

他没有表做基准,只查询出相匹配的数据
示例: select * from a inner join b on a.aid = b.bid
查询结果 : 1   a1   a1
   3    a3   b3

5.子查询(in)

通过一个查询语句查询出来的结果是另一个查询语句的查询内容。
示例 : select * from a where aid in(select bid from b)
查询结果 : 1  a1
   3   a3
当然 还有 not in  正好与 in 相反,查询不在 这些结果集里面的 

### 达梦数据库查询示例教程 #### 1. 基本概念 在关系型数据库中,查询是指通过多个之间的关字段来检索数据。达梦数据库支持多种类型的查询方式,包括内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)以及全外连接(FULL OUTER JOIN)。这些连接类型允许用户根据不同需求组合不同格的数据[^1]。 #### 2. 内连接 (INNER JOIN) 当两个或更多个之间存在共同列时,可以使用 `INNER JOIN` 来返回匹配记录的结果集。下面是一个简单的例子: 假设有一个订单 `orders` 和客户 `customers`,其中 `customer_id` 是两者的公共键,则可以通过如下 SQL 查询获得所有已下单客户的姓名及其对应的订单编号: ```sql SELECT customers.name, orders.order_number FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id; ``` 此命令仅显示那些既存在于顾客列又出现在订单中的条目。 #### 3. 左外连接 (LEFT OUTER JOIN) 有时即使右边的里找不到对应项也希望保留左边的所有行;这时就可以采用 `LEFT OUTER JOIN`. 它会列出左侧内的全部记录,并附加右侧符合条件的部分——对于没有找到配对的情况则填充NULL值: 继续以上述两张为例,如果我们想要查看所有的客户信息并附带他们所下的订单(如果有),那么应该这样写SQL语句: ```sql SELECT customers.name, orders.order_number FROM customers LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id; ``` 这将展示每一个注册过的消费者的名字连同他们的购买历史(如果没有的话就为空白). #### 4. 右外连接 (RIGHT OUTER JOIN) 和 全外连接(FULL OUTER JOIN) - **右外连接**: 类似于左外连接但是保持的是右边里的所有记录。 - **全外连接**: 将左右两侧都尽可能多地展现出来,无论是否有对方相匹配的内容都会被包含进来. 由于这两种情况相对少见,在这里不再给出具体实例. #### 5. 多重接 还可以在一个查询里面同时运用多次JOIN操作来进行复杂的关系映射。比如要从三个不同的中提取有用的信息,只需依次指定各个参与方即可实现多层嵌套式的合搜索: ```sql SELECT a.column_name, b.another_column, c.yet_another_one FROM tableA AS a JOIN tableB AS b ON a.common_field = b.matching_field JOIN tableC AS c ON b.some_other_key = c.related_value; ``` 上述代码片段展示了如何利用别名简化达的同时完成三张独立存储单元间的数据交互过程.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值