mysql查询语句select-(null,not null,is null和is not null)

1 一些概念
    1.1 null与not null

    null 和 not null是mysql的字段属性,或称为数据类型的属性,不属于任何类型。null值也不等同于空值,空值是不占用存储空间的,null占用存储空间,如对myisam表占用1bit额外存储空间。
    1.2 is null与 is not null
    is null和 is not null是mysql的运算符。查询某字段为空时用is null,而不能使用"=null",因为mysql中的null不等于任何其他值,也不等于另外一个null,优化器会把"=null"的查询过滤掉而不返回任何数据;查询某字段为非空时使用is not null。
    1.3 ifnull():语法如下:
    IFNULL(expr1,expr2)
    如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
2 创建测试表及数据

    2.1 创建测试

[sql]  view plain  copy
  1. CREATE   TABLE PLAYERS  
  2.         (PLAYERNO       INTEGER      NOT NULL,  
  3.          NAME           CHAR(15)     NOT NULL,  
  4.          INITIALS       CHAR(3)      NOT NULL,  
  5.          BIRTH_DATE     DATE                 ,  
  6.          SEX            CHAR(1)      NOT NULL,  
  7.          JOINED         SMALLINT     NOT NULL,  
  8.          STREET         VARCHAR(30)  NOT NULL,  
  9.          HOUSENO        CHAR(4)              ,  
  10.          POSTCODE       CHAR(6)              ,  
  11.          TOWN           VARCHAR(30)  NOT NULL,  
  12.          PHONENO        CHAR(13)             ,  
  13.          LEAGUENO       CHAR(4)              ,  
  14.          PRIMARY KEY    (PLAYERNO));  
    2.2 插入测试数据

[sql]  view plain  copy
  1. INSERT INTO PLAYERS VALUES (2, 'Everett''R''1948-09-01''M', 1975, 'Stoney Road''43''3575NH''Stratford''070-237893''2411');  
  2. INSERT INTO PLAYERS VALUES (6, 'Parmenter''R''1964-06-25''M', 1977, 'Haseltine Lane''80''1234KK''Stratford''070-476537''8467');  
  3. INSERT INTO PLAYERS VALUES (7, 'Wise''GWS''1963-05-11''M', 1981, 'Edgecombe Way''39''9758VB''Stratford''070-347689'NULL);  
  4. INSERT INTO PLAYERS VALUES (8, 'Newcastle''B''1962-07-08''F', 1980, 'Station Road','4''6584WO''Inglewood''070-458458''2983');  
  5. INSERT INTO PLAYERS VALUES (27, 'Collins''DD''1964-12-28''F', 1983, 'Long Drive','804''8457DK''Eltham''079-234857''2513');  
  6. INSERT INTO PLAYERS VALUES (28, 'Collins''C''1963-06-22''F', 1983, 'Old Main Road','10''1294QK''Midhurst''010-659599'NULL);  
  7. INSERT INTO PLAYERS VALUES (39, 'Bishop''D''1956-10-29''M', 1980, 'Eaton Square','78''9629CD''Stratford''070-393435'NULL);  
  8. INSERT INTO PLAYERS VALUES (44, 'Baker''E''1963-01-09''M', 1980, 'Lewis Street','23''4444LJ''Inglewood''070-368753''1124');  
  9. INSERT INTO PLAYERS VALUES (57, 'Brown''M''1971-08-17''M', 1985, 'Edgecombe Way','16''4377CB''Stratford''070-473458''6409');  
  10. INSERT INTO PLAYERS VALUES (83, 'Hope''PK''1956-11-11''M', 1982, 'Magdalene Road','16A''1812UP''Stratford''070-353548''1608');  
  11. INSERT INTO PLAYERS VALUES (95, 'Miller''P''1963-05-14''M', 1972, 'High Street','33A''5746OP''Douglas''070-867564'NULL);  
  12. INSERT INTO PLAYERS VALUES (100, 'Parmenter''P''1963-02-28''M', 1979, 'Haseltine Lane','80''6494SG''Stratford''070-494593''6524');  
  13. INSERT INTO PLAYERS VALUES (104, 'Moorman''D''1970-05-10''F', 1984, 'Stout Street','65''9437AO''Eltham''079-987571''7060');  
  14. INSERT INTO PLAYERS VALUES (112, 'Bailey''IP''1963-10-01''F', 1984, 'Vixen Road','8''6392LK''Plymouth''010-548745''1319');  

3 实例分析

    3.1 实例1

    获取拥有一个联盟会员号码的每个球员的号码和联盟会员的号码。

[sql]  view plain  copy
  1. select playerno, leagueno  
  2. from players  
  3. where leagueno is not null;  

    注意:is null不能用=号代替。


    3.2 实例2

    如果要获得非联盟成员的所有球员的信息,只需将is not null改为is null 即可

[sql]  view plain  copy
  1. select playerno, leagueno  
  2. from players  
  3. where leagueno is null;  

    3.3 实例3 isfull()函数1

[sql]  view plain  copy
  1. mysql> SELECT IFNULL(1,'test');    
  2. +------------------+  
  3. | IFNULL(1,'test') |  
  4. +------------------+  
  5. | 1                |  
  6. +------------------+  
    由于 expr1 是 1,不为 NULL,所以函数返回1.
[sql]  view plain  copy
  1. mysql> SELECT IFNULL(1/0,'test');  
  2. +--------------------+  
  3. | IFNULL(1/0,'test') |  
  4. +--------------------+  
  5. | test               |  
  6. +--------------------+  
    由于 expr1 是NULL,所以函数返回test.

4 一些注意事项

    4.1 排序时MySQL将null作为最小值处理。

    4.2 not null字段不能插入null,但可以插入空值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值