您的位置:首页 > 数据库

SQL语句之WHERE查询子句

2013-07-07 18:57 351 查看

限定查询(WHERE子句)

之前的查询是将一张表的全部记录查询出来,那么现在如果希望可以根据指定的条件查询的话,则必须指定限定查询。

格式:

[SELECT] [{DISTINCT}] [* |具体的列别名FROM表名称]
[{WHERE 条件(s)}]

例:查询出工资大5000的雇员的信息。

数学计算中,工资大于5000:sal > 5000

l SELECT * FROM emp WHERE sal > 4000 ;

输出如下:



例:查询每月可以得到奖金的雇员信息

奖金是comm字段,只要字段中存在内容,则表示内容不为空(null),如果存在内容,则会显示具体的值。

l 不为空的表示:字段 IS NOT NULL

l SELECT * FROM emp WHERE comm IS NOT NULL ;

输出如下:



例:查询没有奖金的雇员

没有奖金则comm字段的内容肯定是NULL,

l 肯定是空的表示:IS NULL

l SELECT * FROM emp WHERE comm IS NULL ;

输出如下:



例:要求查询出基本工资大于1500,同时可以领取奖金的雇员信息。

l 此时应该是两个条件,而且两个条件必须同时满足

l 既然要求两个条件全部满足,则必须使用AND操作符进行条件的连接。

l SELECT * FROM emp WHERE sal > 1500 AND comm IS NOT NULL ;

输出如下:



例:要求查询出基本工资大于1500,或者可以领取奖金的雇员信息。

l 如果要表现出或者的概念是由OR 进行连接,表示两个条件有一个满足就输出信息。

l SELECT * FROM emp WHERE sal > 3000 OR comm IS NOT NULL ;

输出如下:



之前使用NOT可以取反,把真的条件变为假,把假的变为真的。

例:要求查询出基本工资不大于1500或者不可以领取奖金的雇员信息。

l 此时相当于是对(基本工资大于1500并且可以领取奖金的雇员)整体的条件取反,我们可以用()来表示一组整体。

l SELECT * FROM emp WHERE NOT (sal > 1500 AND comm IS NOT NULL) ;

l 上面的取反后的意思就是基本工资小于等于1500或者不可以领取奖金的雇员信息。所以,也可以用下面的语句查询,输出都是一样的

l SELECT * FROM emp WHERE sal <= 1500 OR comm IS NULL ;

输出如下:(第一条语句)



输出如下:(第二条语句)



例:查询基本工资大于1500并且小于3000的全部雇员的信息。

l SELECT * FROM emp WHERE sal > 1500 AND sal < 3000 ;

输出如下:



在SQL语法中,提供了一个专门的指定范围的查询的过滤语句,BETWEEN … AND…

语句格式:字段 BETWEEN最小值 AND
最大值 ;

例:使用BETWEEN …AND …完成(基本工资大于等于1500并且小于等于3000)的查询。

l SELECT * FROM emp WHERE BETWEEN 1500 AND 3000 ;

输出如下:



实际上BETWEEN … AND … 操作等价:sal >= 1500 AND sal <= 3000 ;包含了等于的功能。

例:要求查询出在1981年雇佣的全部雇员信息。

l 从1981年1月1日 ~ 1981年12月31日之间的雇员

l 日期加入的时候要加入“‘“。

l SELECT * FROM emp WHERE hiredate BETWEEN ‘1-1月 -81’ AND ’31-12月 -81’ ;

输出如下:



结论:BETWEEN … AND … 查询除了可以支持数字之外,也可以支持日期的查询

l 随着深入的学习会发现,日期实际上也是以数字的形式表示出来的。

例:查询出姓名是SMITH的雇员信息。

l 此时告诉了要查询的姓名,条件:ename = ‘smith’ ;

l SELECT * FROM emp WHERE ename = ‘smith’ ;

输出如下:



执行以上的查询语句之后,并不会返回查询结果,再次查询数据库表的信息,发现smith是采用大写的形式表示出来的,在ORACLE中是对大小写敏感的,所以在查询的时候必须以大写的形式进行条件的编写,语句修改如下:

l SELECT * FROM emp WHERE ename = ‘SMITH’ ;

输出如下:



例:要求查询出雇员编号是7369、7499、7521的雇员的具体信息

l 如果此时按照之前的做法,则设置条件要使用OR连接

l SELECT * FROM emp WHERE empno = 7369 OR empno = 7499 OR empno = 7521;

输出如下:



我们发现这样也是可以的,但是,如果让我们查询几十条呢?实际上,此时是指定了查询的范围,既然有范围了,那么,在SQL语句中就可以使用IN操作符完成。

l 语法格式:

字段 IN (值1,值2, ………,
值n) ;

l 如果现在要求查询的内容不在此范围之中,则可以使用NOT IN,语法如下

字段 NOT IN (值1,值2,
………, 值n) ;

例:使用以上的格式完成(雇员编号是7369、7499、7521)的雇员信息查询

l SELECT * FROM emp WHERE empno IN (7369, 7499, 7521) ;

输出如下:



例:要求查询出雇员编号不是7369、7499、7521的雇员的具体信息。

l SELECT * FROM emp WHERE empno NOT IN (7369, 7499, 7521) ;

输出如下:



另外,需要说明的是,使用IN操作符不光可以用在数字上,也可以用在字符串的信息上。

例:要求查询出雇员姓名是SMITH、ALLEN、KING的雇员的信息。

l SELECT * FROM emp WHERE ename IN (‘SMITH’, ‘ALLEN’, ‘KING’) ;

输出如下:



提示:如果在指定的查询范围中指了额外的内容,则不影响程序的运行。

例:要求查询出雇员姓名是SMITH、ALLEN、KING、jdkjdk$#的雇员的信息。

l SELECT * FROM emp WHERE ename IN (‘SMITH’, ‘ALLEN’, ‘KING’, ‘jdkjdk$#’);

输出如下:



在一般的日常见到的站点中经常发现有模糊查找功能,即:输入一个指定的关键字,把符合的内容全部查询出来,在SQL中使用LIKE语句完成。

在使用LIKE语句的时候要注意通配符的使用,在LIKE语句中主要使用以下两种通配符

l “%”:可以匹配任意长度的内容;

l “_”:可以匹配一个长度的内容;

例:查询出所有雇员姓名中第二个字母是“M”的雇员信息。

l SELECT * FROM emp WHERE ename LIKE ‘_M%’ ;

输出如下:



例:要求查询雇员姓名中包含字母M的雇员信息。

l 此时,表示可以任意的位置上出现字母M

l SELECT * FORM emp WHERE ename LIKE ‘%M%’ ;

输出如下:



但是,要提醒大家的是:“如果在使用LIKE的时候没有指定查询的关键字,则表示查询全部“。

使用LIKE 还可以方便的进行日期的查找功能。

例:要求查询出在1981年雇佣的雇员信息。

l SELECT * FROM emp WHERE hiredate LIKE ‘%81%’ ;

输出如下:



在操作条件中还可以使用:>、>=、=、<=等计算符。

不等于符号:在SQL中如果要想使用不等于符号,可以有两种形式:“<>”、“!=”

例:要求查询编号不为7369的雇员的信息

l 使用“<>”完成

l SELECT * FROM emp WHERE empno <> 7369 ;

输出如下:



l 使用“!=”完成

l SELECT * FROM emp WHERE empno != 7369 ;

输出如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: