空值与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
join on是什么连接 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这⼀条,所以只显⽰⼀条。不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有⾏都显⽰出来。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论