内连接组合两张表,并且基于两张表中的关联关系来连接它们。使用内连接需要指定表中哪些字段组成关联关系,并且需要指定基于什么条件进行连接。内连接的语法如下:


INNER JOIN table_name ON condition

其中table_name 为被关联的表名,condition则为进行连接时的条件。

下面的SQL语句检索所有的客户姓名为MIKE的客户的订单号以及订单价格:


SELECT FNumber,FPrice FROM T_Order INNER JOIN T_Customer ON FCustomerId= T_Customer.FId WHERE T_Customer.FName="TOM"

执行完毕我们就能在输出结果中看到下面的执行结果:


FNumber FPrice K001 100.00 K002 200.00 T003 300.00 T001 300.00

在这个SQL 语句中,首先列出了组成结果集所需要的列名,而后则是在FROM 关键字后指定需要的表,在INNER JOIN关键字后指明要被连接的表,而在ON关键字后则指定了进行连接时所使用的条件。由于T_Customer和T_Order表中都有名称为FId的列,所以在ON关键字后的条件中使用FId字段的时候必须显示的指明这里使用FId字段属于哪个表。比如下面的SQL语句在执行的时候则会报出“列名FId不明确”的错误信息:


SELECT FNumber,FPrice FROM T_Order INNER JOIN T_Customer ON FCustomerId= FId WHERE T_Customer.FName="TOM"

同样如果在SELECT语句后的字段列表中也不能存在有歧义的字段,比如下面的SQL语句执行会出错:


SELECT FId,FNumber,FPrice FROM T_Order INNER JOIN T_Customer ON FCustomerId= T_Customer.FId WHERE T_Customer.FName="TOM"

必须为FId字段显式的指定所属的表,修正后的SQL语句如下:


SELECT T_Order.FId,FNumber,FPrice FROM T_Order INNER JOIN T_Customer ON FCustomerId= T_Customer.FId WHERE T_Customer.FName="TOM"

执行完毕我们就能在输出结果中看到下面的执行结果:


FId FNumber FPrice 1 K001 100.00 2 K002 200.00 3 T003 300.00 6 T001 300.00

为了避免列名歧义并且提高可读性,这里建议使用表连接的时候要显式列所属的表,如下:


SELECT T_Order.FId,T_Order.FNumber,T_Order.FPrice FROM T_Order INNER JOIN T_Customer ON T_Order.FCustomerId= T_Customer.FId WHERE T_Customer.FName="TOM"

指定列所属的表后,我们就可以很轻松的引用同名的字段了,比如下面的SQL语句检索所有的订单以及它们对应的客户的相关信息:


SELECT T_Order.FId,T_Order.FNumber,T_Order.FPrice,T_Customer.FId,T_Customer.FName,T_Customer.FAge FROM T_Order INNER JOIN T_Customer ON T_Order.FCustomerId= T_Customer.FId

在大多数数据库系统中,INNER JOIN中的INNER是可选的,INNER JOIN是默认的连接方式。也就是下面的SQL语句同样可以完成和检索所有的订单以及它们对应的客户的相关信息的功能:


SELECT T_Order.FId,T_Order.FNumber,T_Order.FPrice,T_Customer.FId,T_Customer.FName,T_Customer.FAge FROM T_Order JOIN T_Customer ON T_Order.FCustomerId= T_Customer.FId

执行完毕我们就能在输出结果中看到下面的执行结果:


FId FNumber FPrice FId FName FAge 1 K001 100.00 1 TOM 21 2 K002 200.00 1 TOM 21 3 T003 300.00 1 TOM 21 4 N002 100.00 2 MIKE 24 5 N003 500.00 3 JACK 30 6 T001 300.00 4 TOM 25

为了明确指定字段所属的表,上面的SQL语句中多次出现了T_Order、T_Customer,当字段比较多的时候这样的SQL语句看起来非常繁杂,为此可以使用表别名来简化SQL语句的编写,比如下面的SQL语句就与上面的SQL语句是等价的:


SELECT o.FId,o.FNumber,o.FPrice,c.FId,c.FName,c.FAge FROM T_Order o JOIN T_Customer c ON o.FCustomerId= c.FId

执行完毕我们就能在输出结果中看到下面的执行结果:


FId FNumber FPrice FId FName FAge 1 K001 100.00 1 TOM 21 2 K002 200.00 1 TOM 21 3 T003 300.00 1 TOM 21 4 N002 100.00 2 MIKE 24 5 N003 500.00 3 JACK 30 6 T001 300.00 4 TOM 25

在使用表连接的时候可以不局限于只连接两张表,因为有很多情况下需要联系许多表。

例如,我们需要检索每张订单的订单号、价格、客户姓名、订单类型等信息,由于客户信息和订单类型信息是保存在另外的表中的,因此需要同时连接T_Customer和T_OrderType两张表才能检索到所需要的信息,编写如下SQL语句即可:


INNER JOIN T_OrderType ON T_Order.FTypeId= T_OrderType.FId

执行完毕我们就能在输出结果中看到下面的执行结果:


FNumber FPrice FName FName K001 100.00 TOM MarketOrder K002 200.00 TOM MarketOrder T003 300.00 TOM LimitOrder N002 100.00 MIKE LimitOrder N003 500.00 JACK StopLimit Order T001 300.00 TOM Stop Order

最新文章

  1. [CareerCup] 16.6 Synchronized Method 同步方法
  2. hdu 2844 多重背包coins
  3. dllimport路径问题
  4. Android实例-自定义程序名称、图标、全屏和可旋转方向(XE8+小米2)
  5. Android零点一度的区别——Matrix
  6. Server Tomcat v7.0 Server at localhost failed to start.解决方法
  7. riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期
  8. Shell命令-文件及目录操作之file、md5sum
  9. 使用System.out.printf()输出日志重定向到文件后显示混乱问题
  10. Go 初体验 - 错误与异常处理
  11. C-Lodop打印服务没启动怎么办
  12. jenkins和svn搭建自动代码构建发布
  13. octave基本指令3
  14. PHP ~与各加速工具的性能对比~
  15. jquery 选择对象随心所欲,遍历数组更是易如反掌
  16. html5-垂直定位
  17. _ai_gameobject
  18. scanf() gets() fgets()使用注意事项
  19. Hive的安装配置 & 基础指令
  20. 第十章 dubbo线程模型

热门文章

  1. (原)Unreal渲染模块 源码和实例分析说明
  2. 原始套接字--arp相关
  3. HDU 4472 Count (DP)
  4. JS XMLHttpRequest.upload.addEventListener 传参,回调
  5. 利用MapReduce计算平均数
  6. [poj] 1269 [zoj] 1280 Interesting Lines || 求两直线交点
  7. BZOJ4001 [TJOI2015]概率论 【生成函数】
  8. javascript中在定义函数的几种形式
  9. php 内核变量 引用计数器写时复制
  10. win8.1 安装sql2008 启动报错.net framework 应用程序的组件中发生了异常unable to read the previous list