2.安全等号运算符
mysql> SELECT 1 <=> '1', 1 <=> 0, 'a' <=> 'a', (5 + 3) <=> (2 + 6), '' <=> NULL,NULL <=> NULL FROM dual; +-----------+---------+-------------+---------------------+-------------+------------- --+ | 1 <=> '1' | 1 <=> 0 | 'a' <=> 'a' | (5 + 3) <=> (2 + 6) | '' <=> NULL | NULL <=> NULL | +-----------+---------+-------------+---------------------+-------------+------------- --+ | 1 | 0 | 1 | 1 | 0 | 1 | +-----------+---------+-------------+---------------------+-------------+------------- --+ 1 row in set (0.00 sec)
#查询commission_pct等于0.40 SELECT employee_id,commission_pct FROM employees WHERE commission_pct = 0.40; SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> 0.40; #如果把0.40改成 NULL 呢?
可以看到,使用安全等于运算符时,两边的操作数的值都为NULL时,返回的结果为1而不是NULL,其他返回结果与等于运算符相同。
#<=> :安全等于 区别在于 对于NULl的判断也会进行判断了 # 为了null而生 SELECT 1<=>1, 1 <=>2,2<=>'a',0<=>'a' FROM DUAL; #空可以正常得到比较了 加了<=> SELECT 1<=> NULL, NULL<=> NULL FROM DUAL; #可查询表中commission_pct 为空的数据 SELECT last_name,salary ,commission_pct FROM employees #WHERE salary = NULL; #只要null参与判断不会有任何结果 WHERE commission_pct<=>NULL;
3.不等于运算符
不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。 SQL语句示例如下:
可以看到,使用安全等于运算符时,两边的操作数的值都为NULL时,返回的结果为1而不是NULL,其他 返回结果与等于运算符相同。 3.不等于运算符 不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等, 如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL, 或两边都为NULL,则结果为NULL。 SQL语句示例如下:
# <> != 不等于 SELECT 3<>2 ,3!=2,2<>2 ,2!=2 FROM DUAL; #空和任何数据做对比都为空 SELECT '4'<>NULL,''!=NULL,NULL!=NULL FROM DUAL;
此外,还有非符号类型的运算符:
#查询commission_pct 为空 SELECT last_name,salary ,commission_pct FROM employees #WHERE salary = NULL; #只要null参与判断不会有任何结果 WHERE commission_pct IS NULL; #或者 作为关键字 SELECT last_name,salary ,commission_pct FROM employees #WHERE salary = NULL; #只要null参与判断不会有任何结果 WHERE ISNULL(commission_pct);
#查询commission_pct 不 为空 SELECT last_name,salary ,commission_pct FROM employees #WHERE salary = NULL; #只要null参与判断不会有任何结果 WHERE commission_pct IS NOT NULL; #或者 作为关键字 SELECT last_name,salary ,commission_pct FROM employees #WHERE salary = NULL; #只要null参与判断不会有任何结果 WHERE NOT commission_pct <=>NULL;
#LEAST(value1,value2,...) 最小值 GREATEST(value1,value2,...) 最大值 SELECT LEAST('a','c','d','z','v'), GREATEST('a','c','d','z','v') FROM DUAL; SELECT LEAST(first_name,last_name) , LEAST(LENGTH(first_name),LENGTH(last_name)) FROM employees;
#BETWEENt 条件1 AND 条件2 (查询条件1到条件二范围的值 ,包含边界值 例如 条件2是小于 5000 那就包括 5000) #条件1必须为起始条件 条件2位终止条件 注意 不然查不到数据 #查询表employees 中salary的值为6000-8000的包含6000和8000 SELECT employee_id,last_name,salary FROM employees WHERE salary BETWEEN 6600 AND 8000; #或者下面 SELECT employee_id,last_name,salary FROM employees WHERE salary>=6000 && salary<=8000; #错误案例无法查询到数据 SELECT employee_id,last_name,salary FROM employees WHERE salary>=8000 && salary<=6000; #查询不在6000和8000之间的数据 SELECT employee_id,last_name,salary FROM employees WHERE salary NOT BETWEEN 6600 AND 8000; #or 或的意思 AND 和&& 为且的意思 SELECT employee_id,last_name,salary FROM employees WHERE salary<6000 or salary>8000;
#in (集合) not in (集合) #in 多条件值查询 查询 值为 10 20 30 SELECT department_id,last_name,salary FROM employees WHERE department_id =10 OR department_id=20 OR department_id=30 ; SELECT department_id,last_name,salary FROM employees WHERE department_id in(10,20,30); #查询不为 10 20 30 的 not in SELECT department_id,last_name,salary FROM employees WHERE department_id NOT in(10,20,30);