| 
                         -- 添加 3 个条件:年龄是20 岁,或者不是20 岁,或者年龄未知 
- -- 添加 3 个条件:年龄是20 岁,或者不是20 岁,或者年龄未知 
 - SELECT * FROM t_student 
 - WHERE age = 20  
 -     OR age <> 20 
 -     OR age IS NULL; 
 
  
CASE 表达式和 NULL。简单 CASE 表达式如下: 
- CASE col_1 
 -     WHEN = 1 THEN 'o' 
 -     WHEN NULL THEN 'x' 
 - END 
 
  
这个 CASE 表达式一定不会返回 ×。这是因为,第二个 WHEN 子句是 col_1 = NULL 的缩写形式。正如我们所知,这个式子的逻辑值永远是  unknown ,而且 CASE 表达式的判断方法与 WHERE 子句一样,只认可逻辑值为 true 的条件。正确的写法是像下面这样使用搜索 CASE  表达式: 
- CASE WHEN col_1 = 1 THEN 'o' 
 -     WHEN col_1 IS NULL THEN 'x' 
 - END 
 
  
NOT IN 和 NOT EXISTS 并非等价 
我们在对 SQL 语句进行性能优化时,经常用到的一个技巧是将 IN 改写成 EXISTS ,这是等价改写,并没有什么问题。但是,将 NOT IN 改写成  NOT EXISTS 时,结果未必一样。 
我们来看个例子,我们有如下两张表:t_student_A 和 t_student_B,分别表示 A 班学生与 B 班学生。 
- DROP TABLE IF EXISTS t_student_A; 
 - CREATE TABLE t_student_A ( 
 -     id INT(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', 
 -     name VARCHAR(50) NOT NULL COMMENT '名称', 
 -     age INT(3) COMMENT '年龄', 
 -     city VARCHAR(50) NOT NULL COMMENT '城市', 
 -     remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '备注', 
 -     primary key(id) 
 - ) COMMENT '学生信息'; 
 -  
 - INSERT INTO t_student_A(name, age, city) 
 - VALUE 
 - ('zhangsan', 25,'深圳市'),('wangwu', 60, '广州市'), 
 - ('bruce', 32, '北京市'),('yzb', NULL, '深圳市'), 
 - ('boss', 43, '深圳市'); 
 -  
 - DROP TABLE IF EXISTS t_student_B; 
 - CREATE TABLE t_student_B ( 
 -     id INT(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', 
 -     name VARCHAR(50) NOT NULL COMMENT '名称', 
 -     age INT(3) COMMENT '年龄', 
 -     city VARCHAR(50) NOT NULL COMMENT '城市', 
 -     remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '备注', 
 -     primary key(id) 
 - ) COMMENT '学生信息'; 
 -  
 - INSERT INTO t_student_B(name, age, city) 
 - VALUE 
 - ('马化腾', 45, '深圳市'),('马三', 25, '深圳市'), 
 - ('马云', 43, '杭州市'),('李彦宏', 41, '深圳市'), 
 - ('年轻人', 25, '深圳市'); 
 -  
 - SELECT * FROM t_student_A; 
 - SELECT * FROM t_student_B; 
 
  
                        (编辑:91站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |