• sql语句之where子句


    现在的登录都是把信息存在数据库,然后把输入的与数据库内容进行匹配,一样就登录成功,否则不成功。验证码是为了防止暴力破解,因为计算机能够自动匹配密码,但是不能识别图片上的字母,只有人能识别,所以匹配的速度会减慢。还有的会记录登录IP,如果IP频繁变化就会进行提示。还有银行会限制输入次数。

    作用

    限制表中的数据返回  符合where后面的条件的数据就会被选中,不符合where条件的语句会被过滤掉

    两个极限条件

    /*这是永真条件*/   (数据库里可以有注释,这里是多行注释)
    where  1 = 1 ; (用一个等号判断相不相等,因为这里是不存在赋值的,没有“= =”)
    - -  这是永假条件(数据库里可以有注释,这里是单行注释,注释符和注释之间要有空格)
    where  1 = 2 ;
    

     

    演示:列出每个员工的id 和salary   要求显示符合salary等于1400的员工

    select id, salary from s_emp where salary=1400

    字符串条件的表达

    演示:要求显示first_name 是Carmen的员工,列出id  first_name salary 

    select id, first_name, salary from s_emp where first_name='Carmen'

    注意:一定要加’ ‘代表这是字符串值

    常见的运算符

    = 等于   != 不等于    >大于   < 小于    <= 小于等于   ................

     sql提供的运算符

    表达一个闭区间[a , b] 

    where  字段  between a  and  b ;  (字段在闭区间a到b内)

    a  b的顺序不能错

    演示:写程序查询,把s_emp表中id  first_name salary  显示;要求salary在[1450,2500 ] 中。

    select id, first_name, salary from s_emp where salary between 1450 and 2500

          注意:不可以把2500和1450调换位置,编译不会有错,但逻辑有错)

    where  字段  in(值1,值2,值3)

    这个字段的值等于其中的一个值(只要有一个等于就返回), 交换值的顺序可能有影响,也可能没有影响。若值的概率都一样就没有影响(就按一个规律写(比如从小到大),这样不容易遗漏)。若不一样,则把概率高的值放在前面(人为的),这样查询效率高(因为每个数据都要挨个和给的值比较,只要有一个一样就返回)

    演示:写一个查询,把s_emp表中部门标号是31或者32或者50 部门的员工id first_name  dept_id显示出来

    select idm first_name, dept_id from s_emp where dept_id in(31, 32, 50)

     

    模糊查询  like(像)+ 通配符

    数据库里:

      • “%”为通配符,代表0 - n个任意字符
      •  “-”代表一个任意字符

    e.g.  李四 李斯  李思  李世民 (查找出姓李的)

    Where  name  like  ‘李%’;

    e.g.  李小龙 小龙女  龙猫  (查找出所有带龙的)

    Where  name  like  ‘%龙%;
    (找出中间带龙的)where  name like  ‘_龙%’;

    演示:查询s_emp表中first_name,找出所有带a(小写a)的

    select first_name from s_emp where first_name like '%a%'

     

    数据库中有一张表user_tables(数据字典,存的都是大写)存了所有表的信息。例如s_emp  s_dept 等

    desc user

    演示:从user_tables中找出所有以‘S_’开头的表名

    注意:要对‘_’进行转义处理,用‘\_’表示下划线,再加escape  ‘ ’  代表是‘’ 后面的内容进行转义处理

    select table_name from user_tables where table_name like 'S\_%'

    NULL值的判断

    where  字段  is NULL ;

    演示:把s_emp表中提成是10的员工的id  first_name commission_pct显示出来

    select id, first_name, commission_pct from s_emp where commission_pct=10

      

    演示:把s_emp表中提成不是10的员工的id first_name  commission_pct显示出来。

    select id, first_name, commission_pct from s_emp where commission_pct!=10

    按理来说,一共有25人,不为10的人应该是20个的,但是这里只有3个。这是因为,基本的判定对空值是无效的,必须引入is  NULL对控制进行判定所以要:

    select id, first_name, commission_pct from s_emp where commoission_pct is NULL

          当然也可以结合nvl,但是用is NULL是标准用法。

    条件连接符号

    • and  逻辑与
    • or   逻辑或
    • not  

    演示:(1)写程序查询,把s_emp表中id  first_name salary  显示;要求salary在[1450,2500 ] 中。(between 。。。and。。。)

    select id, first_name ,salary from s_emp where salary>=1450 and salary<=2500

    用这个更加具有通用性,可以是开区间。

    (2)写一个查询,把s_emp表中部门标号是31或者32或者50 部门的员工id first_name  dept_id显示出来(5.6.2里的in(。。,。。,。。))

    select id, first_name, dept_id from s_emp where dept_id-31 or dept_id-32 or dept_id=50

    这里三个都是等价的,不存在顺序问题。

    • >  的对立面是  <=
    •  <  的对立面是  >=
    •  =  的对立面是  !=   ^=   < >  (都是不等于)
    •  between a  and  b  的对立面是  not between  a  and  b
    •  in  的对立面是  not  in
    •  like  的对立面是  not like
    •  is  null  的对立面是  is not  null(只有最后一个不用注意空值,上面的都要注意空值)

     演示:找出manager_id不是空的员工,列出id  first_name manager_id

    select id, first_name, manager_id from s_emp where manager_id is not null

    条件优先的问题  要优先的部分加括号

    演示:(1)显示员工salar  dept_id;

        要求工资大于1000且部门标号为41的员工,或者部门标号为42的员工  

    select salary, dept_id from s_emp where salary>1000 and dept_id=41 or dept_id=42

    (2)显示员工salar  dept_id;

           要求部门标号为41的员工,或者为42的员工里工资大于1000的

    select salary, dept_id from s_emp where salary>1000 and (dept_id=41 or dept_id=42)

     

  • 相关阅读:
    2016/10/18 数据库设计三大范式
    2016/10/13 Oracle COALESCE()
    2016/10/13 oracle中的round()
    2016/10/10 数据、数据元素和数据项
    2016/09/29 Maven简介
    2016/09/29 瀑布模型开发和敏捷开发
    python2和python3中的类
    使用JQuery完成页面定时弹出广告
    JQuery入门+js库文件分享
    使用JavaScript完成控制下拉列表左右选择
  • 原文地址:https://www.cnblogs.com/cjaaron/p/9205351.html
Copyright © 2020-2023  润新知