AND和OR同时使用需注意优先级

我们都知道,无论是Mysql还是Oracle,AND和OR都是有优先级之分的,而且AND的优先级高于OR,同时使用两者的时候,一定要注意括号的使用,为什么这么说呢?先看sql脚本:

CREATE TABLE ccb_test (name VARCHAR(80) DEFAULT NULL,city_tree VARCHAR(50) DEFAULT '0',city_age VARCHAR(50) DEFAULT '0',city_bie VARCHAR(50) DEFAULT '0',datasource VARCHAR(90) DEFAULT '0',city_date VARCHAR(90) DEFAULT NULL
);INSERT INTO ccb_test VALUES ('昆明', '杜鹃', '18', '春城','PV', '2019-07-09');
INSERT INTO ccb_test VALUES ('大理', '苍雪', '15', '洱海','PV', '2019-07-09');
INSERT INTO ccb_test VALUES ('丽江', '玉龙', '14', '古城','PV', '2019-07-09');
INSERT INTO ccb_test VALUES ('玉溪', '水果', '12', '澄江','PV', '2019-07-09');INSERT INTO ccb_test VALUES ('昆明', '杜鹃', '11', '春城','KM', '2019-07-11');
INSERT INTO ccb_test VALUES ('大理', '之牙', '22', '洱海','KM', '2019-07-11');
INSERT INTO ccb_test VALUES ('丽江', '雪山', '33', '古城','KM', '2019-07-11');
INSERT INTO ccb_test VALUES ('玉溪', '之乡', '44', '澄江','KM', '2019-07-11');

假如我们现在要查昆明和大理日期是2019-07-09的PV相关数据,sql如下:

SELECT * FROM ccb_test WHERE datasource='PV' AND city_date='2019-07-09' 
AND name LIKE '%昆明%' OR name LIKE '%大理%' 

其实这条语句执行效果完全等同于下面两条语句,先执行AND在执行OR

1、SELECT * FROM ccb_test WHERE datasource='PV' AND city_date='2019-07-09' 
AND name LIKE '%昆明%' 2、SELECT * FROM ccb_test WHERE  name LIKE '%大理%' 

这个时候你肯定也想到了优先级,使用AND并列时,如果考虑OR条件,需要把OR相关区域用括号括起来,比如:

SELECT * FROM ccb_test WHERE datasource='PV' AND city_date='2019-07-09' 
AND (name LIKE '%昆明%' OR name LIKE '%大理%')