多表查询


多表查询
使用单个select语句从多个表格中取出相关的查询结果,多表连接通常是有相互关系的父子表。
所以,多表查询分为: 交叉连接、内连接、外连接、子查询

  1. 交叉连接

笛卡尔乘积,能产生多少行。新表格左右两边的字段由下面命令行中表格先后顺序决定。
SELECT * FROM customers,orders;
图1
SELECT * FROM orders,customers;
图2
上面命令不适用关键字,是隐式语法。
下面使用关键字,是显示语法。效果一样。
select * from customers CROSS JOIN orders;
select * from orders CROSS JOIN customers;

  1. 内连接
    交叉连接的结果是错误的。本应该通过id找数据行,但乘积使得多个错误行产生。
    内连接是在交叉连接里面选出正确的结果。
    隐式语法
    select * from customers,orders where customers.id=orders.customer_id;
    图5
    显示语法
    select * from customers c INNER JOIN orders o ON c.id=o.customer_id;
    图3

select * from orders,customers where customers.id=orders.customer_id;
图4

  1. 外链接
    如下图,王五没有订单,在内连接中不会显示。
    如果在外连接中把customers作为基表,则新表就有王五。
    外连接分为 左外连接 和 右外连接。

左外,以关键字左边为基表。
SELECT * FROM customers AS c LEFT JOIN orders as o ON c.id=o.customer_id;
图6
右外,以关键字右边表格为基表。
SELECT * FROM orders o RIGHT JOIN customers c ON c.id=o.customer_id;
图7

  1. 子查询
    进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就会用到子查询。
    为了给主查询(外部查询) 提供数据而首先执行的查询(内部查询)被叫做子查询。
    子查询分为嵌套子查询和相关子查询。

嵌套子查询:
内部查询的执行独立于外部查询,内部查询仅执行一次,执行完毕后将结果作为外部查询的条件使用。
嵌套子查询中的子查询语句可以拿出来单独运行。
所以可以先单独写出内外查询的语句,然后拼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值