11. LIKE运算符
LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。
LIKE运算符通常使用如下通配符:
“%”:匹配0个或多个字符。 “_”:只能匹配一个字符。
SQL语句示例如下:
mysql> SELECT NULL LIKE 'abc', 'abc' LIKE NULL; +-----------------+-----------------+ | NULL LIKE 'abc' | 'abc' LIKE NULL | +-----------------+-----------------+ | NULL | NULL | +-----------------+-----------------+ 1 row in set (0.00 sec)
SELECT first_name FROM employees WHERE first_name LIKE 'S%';
SELECT last_name FROM employees WHERE last_name LIKE '_o%';
ESCAPE
回避特殊符号的:使用转义符。例如:将[%]转为[%]、[]转为[],然后再加上[ESCAPE‘$’]即可。
SELECT job_id FROM jobs WHERE job_id LIKE ‘IT\_%‘;
如果使用\表示转义,要省略ESCAPE。如果不是\,则要加上ESCAPE。
SELECT job_id FROM jobs WHERE job_id LIKE ‘IT$_%‘ escape ‘$‘;
#like 模糊查询 查询 相似值 #%% 代表不确定个数的字符 代表前后有若干个值可能是0 ,1,或者其他 #查询name中包含 a的值 SELECT department_id,last_name,salary FROM employees WHERE last_name LIKE '%a%'; #查询name中 a 开头的值 SELECT department_id,last_name,salary FROM employees WHERE last_name LIKE 'a%'; #查询name中 a 结尾的值 SELECT department_id,last_name,salary FROM employees WHERE last_name LIKE '%a'; #查询包含a e的值 #写法1 SELECT department_id,last_name,salary FROM employees WHERE last_name LIKE '%a%' AND last_name LIKE '%e%'; #写法2 SELECT department_id,last_name,salary FROM employees WHERE last_name LIKE '%a%e%' or last_name LIKE '%e%a%'; #查询第二个字符是a的值 #_ 代表不确定的字符 SELECT department_id,last_name,salary FROM employees WHERE last_name LIKE '_a%'
12. REGEXP运算符
REGEXP运算符用来匹配字符串,语法格式为: expr REGEXP 匹配条件 。如果expr满足匹配条件,返回
(1)‘^’匹配以该字符后面的字符开头的字符串。
(2)‘$’匹配以该字符前面的字符结尾的字符串。
(3)‘.’匹配任何一个单字符。
(4)“[…]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”或“b”或 “c”。为了命名字符的范围,使用一 个‘-’。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字 。
(5)‘’匹配零个或多个在它前面的字符。例如,“x”匹配任何数量的‘x’字符,“[0-9]”匹配任何数量的数字, 而“”匹配任何数量的任何字符。
SQL语句示例如下:
mysql> SELECT 'shkstart' REGEXP '^s', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk'; +------------------------+------------------------+-------------------------+ | 'shkstart' REGEXP '^s' | 'shkstart' REGEXP 't$' | 'shkstart' REGEXP 'hk' | +------------------------+------------------------+-------------------------+ | 1 | 1 | 1 | +------------------------+------------------------+-------------------------+ 1 row in set (0.01 sec)
mysql> SELECT 'atguigu' REGEXP 'gu.gu', 'atguigu' REGEXP '[ab]'; +--------------------------+-------------------------+ | 'atguigu' REGEXP 'gu.gu' | 'atguigu' REGEXP '[ab]' | +--------------------------+-------------------------+ | 1 | 1 | +--------------------------+-------------------------+ 1 row in set (0.00 sec)
#REGEXP RLIKE 正则表达式 #查询 是不是以为y开头,是不是以为O结尾,是不是包含 wen SELECT 'yanwenchao' REGEXP '^y','yanwenchao' REGEXP 'o$', 'yanwenchao' REGEXP 'wen' FROM DUAL; #... 3个点代表中间是3个任意值 前后对应即可 #【af】 其中有任意一个字母就算通过 或者都有 SELECT 'yanwenchao' REGEXP 'yan...ch','yanwenchao' REGEXP '[af]' FROM DUAL;
1是true 2是false
3. 逻辑运算符
逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或者NULL。MySQL中支持4种逻辑运算符如下:
1.逻辑非运算符
逻辑非(NOT或!)运算符表示当给定的值为0时返回1;当给定的值为非0值时返回0;当给定的值为NULL时,返回NULL。
mysql> SELECT NOT 1, NOT 0, NOT(1+1), NOT !1, NOT NULL; +-------+-------+----------+--------+----------+ | NOT 1 | NOT 0 | NOT(1+1) | NOT !1 | NOT NULL | +-------+-------+----------+--------+----------+ | 0 | 1 | 0 | 1 | NULL | +-------+-------+----------+--------+----------+ 1 row in set, 1 warning (0.00 sec)
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
2.逻辑与运算符
逻辑与(AND或&&)运算符是当给定的所有值均为非0值,并且都不为NULL时,返回1;当给定的一个值或者多个值为0时则返回0;否则返回NULL。
mysql> SELECT 1 AND -1, 0 AND 1, 0 AND NULL, 1 AND NULL; +----------+---------+------------+------------+ | 1 AND -1 | 0 AND 1 | 0 AND NULL | 1 AND NULL | +----------+---------+------------+------------+ | 1 | 0 | 0 | NULL | +----------+---------+------------+------------+ 1 row in set (0.00 sec)
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >=10000 AND job_id LIKE '%MAN%';
3.1逻辑或运算符
逻辑或(OR或||)运算符是当给定的值都不为NULL,并且任何一个值为非0值时,则返回1,否则返回0;当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为NULL时,返回NULL。
mysql> SELECT 1 OR -1, 1 OR 0, 1 OR NULL, 0 || NULL, NULL || NULL; +---------+--------+-----------+-----------+--------------+ | 1 OR -1 | 1 OR 0 | 1 OR NULL | 0 || NULL | NULL || NULL | +---------+--------+-----------+-----------+--------------+ | 1 | 1 | 1 | NULL | NULL | +---------+--------+-----------+-----------+--------------+ 1 row in set, 2 warnings (0.00 sec)
#查询基本薪资不在9000-12000之间的员工编号和基本薪资 SELECT employee_id,salary FROM employees WHERE NOT (salary >= 9000 AND salary <= 12000); SELECT employee_id,salary FROM employees WHERE salary <9000 OR salary > 12000; SELECT employee_id,salary FROM employees WHERE salary NOT BETWEEN 9000 AND 12000;
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 10000 OR job_id LIKE '%MAN%';
注意: OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先 对AND两边的操作数进行操作,再与OR中的操作数结合。
4.逻辑异或运算符
逻辑异或(XOR)运算符是当给定的值中任意一个值为NULL时,则返回NULL;如果两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。
| 1 XOR -1 | 1 XOR 0 | 0 XOR 0 | 1 XOR NULL | 1 XOR 1 XOR 1 | 0 XOR 0 XOR 0 | +----------+---------+---------+------------+---------------+---------------+ | 0 | 1 | 0 | NULL | 1 | 0 | +----------+---------+---------+------------+---------------+---------------+ 1 row in set (0.00 sec)
select last_name,department_id,salary from employees where department_id in (10,20) XOR salary > 8000;
整理代码:
#or:或者 满足一个即可 and 并 且 两者都要满足 SELECT department_id,last_name,salary FROM employees WHERE department_id =10 OR salary>6000; #not 非空 SELECT department_id,last_name,salary FROM employees #WHERE department_id =10 OR salary>6000; #HERE commission_pct is NULL;#空的 WHERE commission_pct is not NULL;#非空的 # WHERE Not commission_pct <=> NULL;#非空的 #XOR 异或 理解:2个条件满足一个另一个肯定不满足的 #查询出来的肯定是满足其中一个 不满足另一个的数据 SELECT department_id,last_name,salary FROM employees WHERE department_id =10 XOR salary>6000;