where子查询

简介: 限定查询(WHERE子句)      之前的查询是将一张表的全部记录查询出来,那么现在如果希望可以根据指定的条件查询的话,则必须指定限定查询。      格式:           [SELECT] [{DISTINCT}] [* |具体的列别名FROM表名称] [{WHERE 条件(s)}]           例:查询出工资大5000的雇员的信息。

限定查询(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’ ;

                 输出如下:

                 

 

           例:要求查询出雇员编号是736974997521的雇员的具体信息

                 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) ;

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

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

                 输出如下:

                 

 

           例:要求查询出雇员编号不是736974997521的雇员的具体信息。

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

                 输出如下:

                 

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

                

           例:要求查询出雇员姓名是SMITHALLENKING的雇员的信息。

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

                 输出如下:

                 

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

 

           例:要求查询出雇员姓名是SMITHALLENKINGjdkjdk$#的雇员的信息。

                 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 ;

                输出如下:

                

                

 

 

若转载请注明出处!若有疑问,请回复交流!
目录
相关文章
|
2月前
(头哥)多表查询与子查询
(头哥)多表查询与子查询
44 0
|
2月前
|
SQL
深入了解关联查询和子查询
深入了解关联查询和子查询
23 0
|
3月前
聚合函数、子查询
聚合函数、子查询
40 0
|
5月前
|
SQL 关系型数据库 MySQL
第9章_子查询
第9章_子查询
45 0
|
10月前
|
SQL 索引
相关子查询
相关子查询
167 0
|
10月前
|
SQL 关系型数据库 MySQL
第09章_子查询
第09章_子查询
70 0
|
10月前
|
SQL
联合查询和子查询
联合查询和子查询
|
数据库 Python
子查询
子查询
128 0
|
SQL Oracle 关系型数据库
SQL 连接查询、子查询、union
SQL 连接查询、子查询、union
222 0
SQL 连接查询、子查询、union
|
数据库管理
子查询(2)
如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为 关联子查询 。相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。
子查询(2)