我们在使用SELECT (column_1,column_2,...,column_n) FROM <表名> 或者 SELECT * FROM <表名>的时候可以查询到表的一个或者多个甚至是全部列的数据。
但是呢,在一些情况下,我们并不希望获得所有数据,而是根据条件筛选选择性地留下指定条件的数据,例如,查询工资在5000元以上的员工数据。在一张表有数百万条数据的情况下,查询出所有的数据不仅仅要浪费时间,还要耗费内存。
SELECT语句可以通过WHERE条件来设定查询条件,查询结果是满足查询条件的数据。例如,要指定条件“工资在5000元或以上的员工”,写成WHERE条件就是SELECT * FROM employees WHERE salary >= 5000;。
其中,WHERE关键字后面的salary >= 5000就是条件。salary是列名,该列存储了员工的工资,因此,salary >= 5000就筛选出了指定条件的数据:
按条件查询employees:
SELECT * FROM employees WHERE salary >= 5000;
由此可见,条件查询的基本语法就是:
SELECT * FROM <表名> WHERE <条件表达式>
条件表达式可以用<条件1> AND <条件2>表达满足条件1并且满足条件2。
例如,符合条件“工资在5000元或以上”,并且还符合条件“JOB_ID为SA_MAN”,把这两个条件写出来:
条件1:根据salary列的数据判断:salary >= 5000;
条件2:根据JOB_ID列的数据判断:JOB_ID = 'SA_MAN',注意JOB_ID列存储的是字符串,需要用单引号括起来。
就可以写出WHERE条件:salary >= 5000 AND JOB_ID = 'SA_MAN':
按AND条件查询employees:
SELECT * FROM employees
WHERE salary >= 5000 AND JOB_ID = 'SA_MAN';
第二种条件是<条件1> OR <条件2>,表示满足条件1或者满足条件2。例如,把上述AND查询的两个条件改为OR,查询结果就是“工资在5000元或以上”或者“男生”,满足任意之一的条件即选出该数据:
按OR条件查询employees:
SELECT * FROM employees
WHERE salary >= 5000 OR JOB_ID = 'SA_MAN';
很显然OR条件要比AND条件宽松,返回的符合条件的数据也更多。
第三种条件是NOT <条件>,表示“不符合该条件”的数据。例如,写一个“名字不是King”这个条件,可以先写出“名字是King”:last_name = ‘King’,再加上NOT:last_name = ‘King’:
按NOT条件查询employees:
SELECT * FROM employees WHERE NOT last_name = ‘King’;
上述NOT条件NOT last_name = ‘King’其实等价于last_name <> ‘King’,因此,NOT查询不是很常用。