实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果没有表连接的话,那么我们就需要非常多的操作。比如需要从A表找出限制性的条件来从B表中检索数据。不但需要分多表来操作,而且效率也不高。比如书中的例子:

代码如下:

SELECT FIdFROM T_CustomerWHERE FName='MIKE'

代码如下:

SELECT FNumber,FPriceFROM T_OrderWHERE FCustomerId=2

(1)内连接(INNER JOIN):内连接组合两张表,并且只获取满足两表连接条件的数据。

代码如下:

SELECT o.FId,o.FNumber,o.FPrice,c.FId,c.FName,c .FAgeFROM T_Order o JOIN T_Customer cON o.FCustomerId= c.FId

在使用表连接的时候可以不局限于只连接两张表,因为有很多情况下需要联系许多表。例如,T_Order表同时还需要连接T_Customer和T_OrderType两张表才能检索到所需要的信息,编写如下SQL语句即可:

代码如下:

SELECT o.FId,o.FNumber,o.FPrice,c.FId,c.FName,c .FAgeFROM T_Order o JOIN T_Customer cON o.FCustomerId= c.FIdINNER JOIN T_OrderTypeON T_Order.FTypeId= T_OrderType.FId

下面看看隐式的例子:

代码如下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,T_Order.FId, T_Order.FNumber, T_Order.FPriceFROM T_Customer, T_Order

代码如下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,T_Order.FId, T_Order.FNumber, T_Order.FPriceFROM T_CustomerCROSS JOIN T_Order

I、左外部连接(LEFT OUTER JOIN):前头也说了,将不满足条件的数据以NULL来填充。那么具体是哪些需要以NULL来填充呢,对于左外连接来说的话,连接条件当中,如果出现满足条件的左表的数据在右表中没有相应匹配时,需要把相应的右表字段填充NULL值。也就是说左外部连接的主体是左表,右表来配合。

代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FId

代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FIdWHERE o.FPrice>=150

代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oRIGHT OUTER JOIN T_Customer cON o.FCustomerId=c.FId

III、全外部连接(FULLOUTER JOIN):全外部连接是左外部连接和右外部连接的合集。也就是既包括左外部连接的结果集,也包括右外部连接的结果集。

代码如下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oFULL OUTER JOIN T_Customer cON o.FCustomerId=c.FId
SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oLEFT OUTER JOIN T_Customer cON o.FCustomerId=c.FIdUNIONSELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAgeFROM T_Order oRIGHT OUTER JOIN T_Customer cON o.FCustomerId=c.FId
SELECT v.*,(SELECT a.name FROM admin2 a WHERE a.adminId=v.loadInId) AS aname,(SELECT a.name FROM admin2 a WHERE a.adminId=v.operatorId) AS uname FROM v_goods v where 1=1;SELECT v.*,a.name aname,b.name uname FROM v_goods v,admin2 a,admin2 b WHERE a.adminId=v.loadInId AND b.adminId=v.operatorId ;SELECT v.*,a.name aname,b.name uname FROM v_goods v LEFT JOIN admin2 a ON a.adminId=v.loadInId LEFT JOIN admin2 b ON b.adminId=v.operatorId ;

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Linux下MYSQL 5.7 找回root密码的问题(亲测可用)
  3. MySQL 什么时候使用INNER JOIN 或 LEFT JOIN
  4. 《Android和PHP最佳实践》官方站
  5. android用户界面之按钮(Button)教程实例汇
  6. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  7. Android(安卓)UI开发第十七篇——Android(安卓)Fragment实例(Lis
  8. Android——Activity四种启动模式
  9. Android布局(序章)

随机推荐

  1. 计算机网络面试知识点(3)数据链路层
  2. MyBatis之Mapper XML 文件详解(五)-自动
  3. Spring入门这一篇就够了
  4. Spring【依赖注入】就是这么简单
  5. 面试官:知道ThreadLocal嘛?谈谈你对它的理
  6. Spring【AOP模块】就这么简单
  7. Springboot整合redis(Lettuce版本)
  8. Spring【DAO模块】知识要点
  9. 阿里的OceanBase数据库世界第一,底层原来
  10. Springboot整合Websocket实现后端向前端