您的当前位置:首页正文

空值与NULL的区别

2024-08-30 来源:星星旅游
空值与NULL的区别 附:左连接+右连接+内连接

空值与NULL的区别

  我们先来理解mysql中空值与NULL的区别是什么吧

  ⼀些刚刚接触MySQL的孩⼦,经常会错误的认为NULL与空字符串’ ’是相同的。这看似是⼀件不重要的事情,但是在MySQL中,这两者是完全不同的。NULL是指没有值,⽽”则表⽰值是存在的,只不过是个空值。。

  这就相当于⼚⼦给职⼯分房⼦,⼀共只有⼀套,⽼张和⽼李都想要,可是经理告诉⽼张,下次有您的房⼦,可是⽼李压根就没⼈搭理他。所以⽼张的房⼦ 是“空”的,因为这是空⽩⽀票,不过毕竟经理张⼝了,⽽⽼李的房⼦就是NULL的,因为根本就没有⼈考虑过他。

  ⼀些根本不懂空值和NULL有什么区别,误导初学者。

  所谓的NULL就是什么都没有,连都没有,在字符串中是结束符,但是在物理内存是占空间的,等于⼀个字节,⽽NULL就是连这⼀个字节都没有。 在数据库⾥是严格区分的,任何数跟NULL进⾏运算都是NULL, 判断值是否等于NULL,不能简单⽤=,⽽要⽤IS关键字, Mysql3.23.0或以后⽀持⽤ <=> ⽤来⽐较两个NULL值是否相等, 即 select * from table where id <=>NULL.

  为什么会出现NULL?这是来源于数据库的左右连接,不是凭空想出来的(下⾯有脑补环节)。⽐如:  A(ID, Name), B(ID, Address)  1, Name1 1, Shanghai  2, Name2 3, Beijing  当A左连接B则得到:  1, Name1, Shanghai  2, Name2, NULL  当A右连接B则得到:  1, Name1, Shanghai  3, NULL, Beijing

  数据库的字段ID设为NOT NULL, 仅仅说明该字段不能为NULL, 也就是说只有在  INSERT INTO table(ID) VALUES(NULL);  这种情况下数据库会报错,⽽  INSERT INTO table(ID) VALUES( ‘ ‘);

  这不能说明是NULL, 数据库系统会根据ID设的缺省值填充,或者如果是⾃增字段就⾃动加⼀  等缺省操作。  例  值为NULL

  delete from 表名 where 字段名=NULL  值为\"\"空值

  delete from 表名 where 字段名=''  总结

  判断NULL⽤is null 或者 is not null。 sql语句⾥可以⽤ifnull函数来处理

  判断空字符串‘’,要⽤ ='' 或者 <>''。sql语句⾥可以⽤if(col,col,0)处理,即:当col为true时(⾮null,及⾮'')显⽰,否则打印0

脑补环节:

⼀般所说的左连接,外连接是指左外连接,右外连接。做个简单的测试你看吧。先说左外连接和右外连接:SQL>select * from t1;

ID NAME---------- -------------------- 1 aaa 2 bbb

SQL>select * from t2; ID AGE---------- ---------- 1 20 3 30左外连接:

SQL>select * from t1 left join t2 on t1.id=t2.id;

ID NAME ID AGE---------- -------------------- ---------- ---------- 1 aaa 1 20 2 bbb右外连接:

SQL>select * from t1 right join t2 on t1.id=t2.id;

ID NAME ID AGE---------- -------------------- ---------- ---------- 1 aaa 1 20 3 30

从上⾯的显⽰你可以看出:左外连接是以左边的表为基准。通俗的讲,先将左边的表全部显⽰出来,然后右边的表id与左边表id相同的记录就“拼接”上去,⽐如说id为1的记录。如果没有匹配的id,⽐如说t1中id为2的t2中就没有。那边就以null显⽰。右外连接过程正好相反。再看内连接:

SQL>select * from t1 inner join t2 on t1.id=t2.id;

ID NAME ID AGE---------- -------------------- ---------- ---------- 1 aaa 1 20

看到没有? 只有⼀条记录。内连接就是只取出符合过滤条件的记录 也就是t1.id=t2.id 那么符合t1.id=t2.id的记录只有id=1这⼀条,所以只显⽰⼀条。 不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有⾏都显⽰出来。

因篇幅问题不能全部显示,请点此查看更多更全内容