第六部分 连接部分

连接,顾名思义就是将不同的表利用SELECT语句连接到一起,从而查询表中的信息。举例来说,假如有两个表,一个存储供应商信息的表vendors,另一个存储产品信息表products,其中,产品信息表products中字段包含供应商信息表vendors中的主键vend_id以及产品主键prod_id。此时,vendors表的主键vend_id又叫products表的外键,它将vendors表与products表关联,我们可以利用vend_id从vendors表中找出相应供应商的信息。

主键:表中的唯一标识符

外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系

(1) 创建连接

示例:查询表中供应商名称、商品名称和商品价格

SQL语句:SELECT vend_name, prod_name, prod_price FROM products, vendors WHERE vendors.vend_id = products.vend_id ORDER BY vend_name, prod_name;

笛卡尔积:由没有连接条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

(2) 内连接

基于两个表之间的相等测试,即等值连接,连接条件使用ON子句,而非WHERE子句。

示例1:查询表中供应商名称、商品名称和商品价格

SQL语句:SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;

示例2:返回订购产品TNT2的客户列表

SQL语句:SELECT cust_name,cust_contact FROM customers,orders,orderitems WHERE customer.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num AND prod_id='TNT2';

(3) 自连接

自连接通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句

SQL允许给表名起别名,主要原因如下:

  • 缩短SQL语句;
  • 允许在单条SELECT语句中多次使用相同的表

示例:查询产品信息

SQL语句:SELECT p1.prod_id, p1.prod_name FROM products AS p1, products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR';

(4) 外连接

许多连接将一个表中的行与另一个表中的行相关联,但有时候会需要包含没有关联行的那些行,此时,需要考虑外连接。比如下面的情况,对每个客户下了多少订单进行计数,包括那些至今尚未下订单的客户;列出所有产品以及订购数量,包括没有人订购的产品。但是,与内连接关联两个表中的行不同的是,外连接还包括没有关联行的行,其中LEFT OUTER JOIN关联OUTER JOIN左边的表,即选择左表customers中所有行

示例:检索所有客户,包括那些没有订单的客户

SQL语句:SELECT customers.cust_id, orders.order_id FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;

(5) 带聚集函数的连接

示例:检索所有客户及每个客户所下的订单数

SQL语句:SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_id) FROM customers INNER JOIN orders ON customers.cust_id = orders.order_id GROUP BY customers.cust_id;

SQL语句:SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_id) AS num_ord FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.order_id GROUP BY customers.cust_id;

猜你喜欢

转载自www.cnblogs.com/wzw0625/p/12616152.html
今日推荐