您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > PHP >

SQL判断空值、nvl处理与JOIN的使用

来源:振中的技术记事本 责任编辑:栏目编辑 发表时间:2013-07-02 04:23 点击:

LIKE子句会影响查询性能,所以在明确知道字符个数时,应该使用'_',而不使用'%'。
判断空值/非空值
SELECT select_list FROM table_list/view_list WHERE column IS [NOT] NULL

如果查询出来的字段是空值,然后又想给个默认值给它,可以用nvl(value,0),就给个0给value了。可以在select后使用(用途:赋默认值,数据整齐,可以令到数据不用在读出后再循环赋值),也可以在order by 后使用(用途方便排序,不会出现空值排最头情况)。

 

NVL是关于数值的,NULL情况不行

 

 

SQL ISNULL(), NVL(), IFNULL() and COALESCE() 函数这些在我们常用到sql语句中会常常用到的下面我们就来看看实例教程吧.

P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23
3 Gorgonzola 15.67 9 20


假设“ UnitsOnOrder ”一栏是可选的,可能包含空值。

我们有以下的SELECT语句:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
在上面的例子中,如果任何“ UnitsOnOrder ”价值观是空,其结果是无效的。 微软的ISNULL ( )函数是用来指定我们要如何处理空值。 该NVL ( ) , IFNULL ( )和联合( )函数还可以用来实现同样的结果。 在这种情况下,我们要空值为零。 下面,如果“ UnitsOnOrder ”为NULL它不会损害计算,因为ISNULL ( )返回一个零值,如果为NULL : SQL Server / MS AccessSELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

Oracle
Oracle没有ISNULL ( )函数。但是,我们可以使用NVL ( )函数来实现相同的结果SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products

mysql

MySQL的确实有一个ISNULL ( )函数。然而,它的作品有点不同,微软的ISNULL ( )函数。 MySQL中我们可以使用IFNULL ( )函数,就像这样: SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products

 


下面说到 JOIN的使用,JOIN的类型

=================JOIN的使用====================

来自:http://blog.sina.com.cn/u/4a48be9101000620

利用SELECT语句来检索的时候只能从一个表中进行。如果你想从两个表或者更多的表中进行检索,该怎么办呢?好在我们可以使用SQL和关系数据库系统的一个很有用的特性,即"Join"。"Join"就是使得关系数据库系统相关的东东。"Join"允许你从两个表或者更多的表连接数据进行数据检索,而只需要利用一个SELECT语句。如果在FROM关键字之后有多个表的话,"Join"可以在SQL SELECT语句中识别它们。
SELECT "list-of-columns"

FROM table1,table2

WHERE "search-condition(s)"

"Join"

通过示范当你只处理一个表的时候会发生什么事情可以使得"Join"的解释更简单,所以这里我没有使用"Join"。这个单一的数据库有事也被称为"flat table"(平表)。现在你有一个表的数据库用来检索所有顾客的信息以及他们从你的商店买了什么,下面就是这个表的所有列:

 


  每次一个新行被插入到表中,所有的列都将被更新,这样就导致了不必要的”多余数据”。比如,每次Jenny买东西,下面的行都将被插入到表中:

 

  为了避免”多余数据”,一个最好的方法:让数据库有两个表:其中一个用来对顾客保持跟踪;另外一个用来对他们买什么东西保持跟踪。即有"Customer_info" 表和"Purchases" 表:

  "Customer_info" 表为:

 


customer_number


firstname


lastname


address


city


state


zip

 

  "Purchases" 表为:


customer_number


date


item


price

 


  现在开始,不管顾客什么时候进行重复的购物,只有第二个表"Purchases" 需要更新。这样我们就减少了多余的数据,也就是说我们规格化了这个数据库。

  你仔细点就会发现两个表中还是有一个

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • PHP测试
      • 十天学会php之第六天
      • 几种显示数据的方法的比较
      • 使用xmlhttp为网站增加域名查询功能
      • PHP+MYSQL+Javascript数据库查询结果的动态显示
      • 查找数组中指定键名的值
      • 用redis实现跨服务器session
      • 用新浪微博接口发送图片微博失败的原因
      • smarty局部缓存技术[源码分析]
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1