where子句和having子句主要是用来筛选符合条件的元组,其后紧跟的即为条件表达式。
0.and, or条件的连接
用法和一般编程语言一样,主要用于条件的拼接。and两边都为真,则结果为真。or两边只要一个为真,则结果为真。
如果,where子句需要3个或者更多的条件,且同时使用了and和or操作符,那么应该用圆括号来明确意图,以便数据库或者日后自己或他人能够理解代码,增强可读性。如:
select emp_id
from employee
where end_date is null and (title='Teller' or start_date<'2007-01-01');
1.not条件的否定
not即为非运算,它使条件取反。
2.相等条件
形式为‘column=expression',例如:
- title = 'Teller'
- fed_id = '111-111'
- ...
这些条件被成为相等条件,因为它们将一个表达式等于另一个表达式。
select pt.name product_type, p.name product
from product p inner join product_type pt
on p.product_type_cd = pt.product_type_cd
where pt.name = 'Customer Accounts';
选出name为Customer Accounts的产品。
3.不等条件
这个是用来判断两个表达式不相等的。操作符为'<>'或'!='。例如,选取name不为Customer Accounts的产品:
select pt.name product_type, p.name product
from product p inner join product_type pt
on p.product_type_cd = pt.product_type_cd
where pt.name <> 'Customer Accounts';
4.范围条件
常见的能够表示范围的有:<, >, <=, >=, between...and...。重点说明的是between...and...,所选条件包括符合两个端点的元组(范围上下限闭合),并且一定要确定好上下界,下限在between后面,上限在and后面,错误的使用将造成问题,这是因为between...and...在数据库执行时被转化为<=和>=两个操作条件。如:
正确使用:
而错误的使用:
这里数据库实际执行的是一下语句:
select emp_id, fname, lname, start_date
from employee
where start_date >= '2007-01-01' and start_date <= '2005-01-01';
因为不存在某个日期大于2007-01-01,却又小于2005-01-01,所以结果当然是空值。
对于数字或者日期的范围,结果能够很轻易的看出来,但是对于一般字符串的范围,结果就不那么容易了,必需知道所使用字符集中个字符的字典顺序。
5.成员条件
对于一个条件:where product_cd = 'CHK' or product_cd='SAV' or product_cd='CD' or product_cd='MM';显然这样书写非常麻烦,这里仅仅包含了4个条件,但当条件有几十个的话,这样的书写非常令人乏味。这时可以使用in操作符。上面的可以写成:
select account_id, product_cd, cust_id, avail_balance
from account
where product_cd in ('CHK', 'SAV', 'CD', 'MM');
产生的效果,和第一种是相同的,但简便了许多。
6.匹配条件
通常情况下,经常使用通配符去进行匹配操作。对于SQL提供的一些内置函数虽然可以完成任务,但灵活性相对差一些。通配符如下:
- _:匹配一个字符
- %:匹配任意个字符(包括0个字符)
select lname
from employee
where lname like '_a%e%';
这段代码的目的是从employee表中,选取lname中第一个字符为任意,第二个必须为a和e可以出现在后面任意位置的lname。
还有一种是通过正则表达式,以后学习。感觉路好长啊。。。。
原文:http://www.cnblogs.com/pipinet/archive/2017/04/09/6683431.html