zoukankan      html  css  js  c++  java
  • where子查询

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

                    输出如下:

                    

                    

     

     

  • 相关阅读:
    正则表达式基础知识
    成功的基本法则
    Java实现简单的格式化信函生成器
    C实现哈希表
    C实现求解给定文本中以指定字符开头和结尾的子串数量的三种算法
    Java实现求解二项式系数及代码重构
    Java 异常处理学习总结
    C实现大整数幂求模问题的两种算法
    linux 学习前言
    提高编程能力的10种方法
  • 原文地址:https://www.cnblogs.com/jym-sunshine/p/5165867.html
Copyright © 2011-2022 走看看