MySQL--操作简记(联结表,组合查询(UNION))

联结表

1.创建联结

SELECT vend_name,prod_name,prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id
  • 1
  • 2
  • 3

上面的语句与之前最大的区别在于,指定的列位于两张表内,使用where进行联结。
返回表vendors与表products中vend_id相等的vend_name,prod_name,prod_price

基于两个表之间的相等测试,这种联结称为等值联结,或内部联结。对于这种联结,还可以使用下面这种语法:

  • INNER JOIN
    ON
SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
 ON vendors.vend_id = products.vend_id
  • 1
  • 2
  • 3

2.联结多个表

SELECT vend_name,prod_name,prod_price, quantity
FROM vendors, products, order
WHERE vendors.vend_id = products.vend_id
AND order.prod_id = products.vend_id
AND order_num = 20005;
  • 1
  • 2
  • 3
  • 4
  • 5

FROM后跟多个表,WHERE子句条件用AND连接。

3.联结的其他类型

  • 自联结:在select语句中不止一次引用相同的表
  • 自然联结:至少有一个列出现在不止一个表中
  • 外部联结:联结包含了在相关表中没有关联行的行

组合查询

执行多个查询(多条SELECT语句),并将结果作为但个查询结果集返回。

1.创建组合查询

  • UNION

    例如,我想查询价格小于10 或供应商名字为a的id号,即下面的两段语句怎么同时实现

SELECT order_id, order_price, order_name
FROM order1
WHERE order_price < 10;
  • 1
  • 2
  • 3
SELECT order_id, order_price, order_name
FROM order1
WHERE order_name = 'a';
  • 1
  • 2
  • 3

使用union组合:

SELECT order_id, order_price, order_name
FROM order1
WHERE order_price < 10
UNION
SELECT order_id, order_price, order_name
FROM order1
WHERE order_name = 'a';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里写图片描述

2.UNION规则

  • 必须由两条或两条以上的select语句组成,每两条之间用一个UNION分隔
  • UNION中的每个查询必须包含相同的列,表达式或聚集函数
  • 列数据类型必须兼容,类型不必完全相同,但必须是可以隐含转换的类型
  • 使用UNION满足了条件后,可能会有条件满足重复的,就会有重复,使用UNION ALL可以自动除去重复的行

3.对组合查询结果排序

在使用UNION组合查询时,只能使用一条ORDER BY子句,必须出现在最后一条SELECT语句之后

猜你喜欢

转载自blog.csdn.net/bingguang1993/article/details/79798407