sql里面null值的处理,count()函数的使用注意事项

 
1.mysql中int(1) 和 int(11) 的区别
(1) int(m) 长度M与你存放的数值型的数的大小无关.
(2)create table  demo ( id int UNSIGNED );
  说明:默认是有正负号的
          UNSIGNED表示无符号的
 
测试的sql
MariaDB [db10]> insert into demo select 4294967295 ;
Query OK, 1 row affected (0.138 sec)
Records: 1  Duplicates: 0  Warnings: 0
 
MariaDB [db10]> insert into demo select 4294967294;
Query OK, 1 row affected (0.132 sec)
Records: 1  Duplicates: 0  Warnings: 0
 
MariaDB [db10]> select * from demo;
+------------+
| id         |
+------------+
| 4294967295 |
| 4294967294 |
+------------+
2 rows in set (0.000 sec)
 
MariaDB [db10]> insert into demo select 4294967296;
ERROR 1264 (22003): Out of range value for column 'id' at row 1
(3) unsigned zerofill 修饰int类型的使用
create table demo(id int(2) unsigned zerofill);
Query OK, 0 rows affected (0.275 sec)
 
MariaDB [db10]> insert into demo select 1;
Query OK, 1 row affected (0.033 sec)
Records: 1  Duplicates: 0  Warnings: 0
 
MariaDB [db10]> select * from demo;
+------+
| id   |
+------+
|    01 |
+------+
1 row in set (0.000 sec)
 
MariaDB [db10]> insert into
    -> demo
    -> select 1000000;
Query OK, 1 row affected (0.123 sec)
Records: 1  Duplicates: 0  Warnings: 0
 
MariaDB [db10]> select * from demo;
+---------+
| id      |
+---------+
|       01 |
| 1000000 |
+---------+
2 rows in set (0.000 sec)
 
2.oracle的nvl函数和mysql的ifnull函数一样
(1) 回顾mysql的ifnull函数
出现这个函数的原因
因为在mysql中null和任何数据值相加都是0
create table demo(n1 int , n2 int);
insert into demo select 1, 1;
insert into demo select 1, 1;
insert into demo select 1, null;
insert into demo select 1, null;
select n1+n2 from demo;
+-------+
| n1+n2 |
+-------+
|     2 |
|     2 |
 NULL |
|  NUL L |
+-------+
4 rows in set (0.000 sec)
 
select n1+ifnull(n2,0) from demo;
+-----------------+
| n1+ifnull(n2,0) |
+-----------------+
|               2 |
|               2 |
|                1 |
|               1 |
+-----------------+
4 rows in set (0.000 sec)
(2)oracle的nvl函数
desc demotest;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
N1                                                 NUMBER(38)
N2                                                 NUMBER(38)
 
SQL> insert into demotest select 1,1;
insert into demotest select 1,1
                              *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
 
 
SQL> insert into demotest select 1,1 from dual;
 
1 row created.
 
SQL> insert into demotest select 1,1 from dual;
 
1 row created.
 
SQL> insert into demotest select 1,null from dual;
 
1 row created.
 
SQL> insert into demotest select 1,null from dual;
 
1 row created.
 
SQL> select * from demotest;
 
        N1         N2
---------- ----------
         1          1
         1          1
         1
         1
 
SQL> select n1+n2 from demotest;
 
     N1+N2
----------
         2
         2
 
 
 
SQL> select n1+(nvl(n2,0)) from demotest;
 
N1+(NVL(N2,0))
--------------
             2
             2
             1
             1
 
SQL>
 
3.count(1)和conut(*)和count(主键)和count(普通列名)
的使用
 
假如表没有主键(Primary key), 那么count(1)比count(*)快,
如果有主键的话,那主键作为count的条件时候count(主键)最快
如果你的表只有一个字段的话那count(*)就是最快的。
 
count(column)是返回非空的记录数
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值