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)
sql语句之where子句的更多相关文章
- SQL语句之on子句过滤和where子句过滤区别
1.测试数据: SQL> select * from dept; DEPTNO DNAME LOC ------ -------------- ------------- ...
- sql语句之from子句
如何从表中查询一个字端的数据 select 字段名 from 表名: 演示:从s_emp表中把月薪查询出来 select salary from s_emp ; (分号代表结束) 如何从表中查询 ...
- 数据库性能调优——sql语句优化(转载及整理) —— 篇1
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实 ...
- 数据库性能优化之SQL语句优化
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等是体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
- SQL优化的四个方面,缓存,表结构,索引,SQL语句
一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...
- 数据库 SQL语句优化
温馨提示:本篇内容均来自网上,本人只做了稍微处理,未进行细致研究,仅当做以后不备之需,如若你喜欢可尽情转走. 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图 ...
- 优化的四个方面,缓存,表结构,索引,SQL语句
一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...
- 数据库性能优化之SQL语句优化(上)
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的 ...
- [转]数据库性能优化之SQL语句优化1
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
随机推荐
- Quartz是一个任务调度
这段时间做一个案子,用到每天定时处理事件,之前的解决思路是通过一个定时器轮询时间段,这样不能精准的在某个时间戳上执行动作.由于没有用过Quartz是一个任务调度,一直使用这个办法,今天通过同事提点,从 ...
- 输入URL地址到最终页面渲染完成,发生了什么事
1. 域名DNS解析 - 浏览器DNS缓存 - 系统DNS缓存 - 路由器DNS缓存 - 网络运营商DNS缓存 - 递归搜索...... 2. TCP连接: TCP三次握手 - 第一次握手,由浏览器发 ...
- 教你通过Node.js漏洞完成渗透测试
本篇文章较为详细的讲述了通过node.js的已知漏洞来完成渗透测试的过程,介绍了node.js存在的漏洞可以在多种工具下的不同利用方式.因为我认为会对论坛部分web安全新手有所帮助,所以整理到论坛中. ...
- centos7----pstree
centos 默认没有pstree 安装 yum -y install psmisc
- js 标准二维数组变一维数组的方法
问题:[[0, 1], [2, 3], [4, 5]] -> [0, 1, 2, 3, 4, 5]? 方法一 利用es5的arr.reduce(callback[, initialValue]) ...
- Shell - 简明Shell入门06 - 循环语句(Loop)
示例脚本及注释 #!/bin/bash # for循环 for filename in t1 t2 t3 do touch $filename.txt echo "Create new fi ...
- iOS-xcconfig环境变量那些事(配置环境的配置)
前言 在配置宏定义参数时,会发现一个问题,在需要临时修改或者测试一些数据时,修改宏,如果不修改,就多写一个,注释掉原来的,然后测试后,再换回来,当然了,如果一两个宏,可以这样,但是,如果每次改的比较多 ...
- gensim与numpy array 互转
目的 将gensim输出的格式转化为numpy array格式,支持作为scikit-learn,tensorflow的输入 实施 使用nltk库的停用词和网上收集的资料整合成一份新的停用词表,用来过 ...
- Scala之隐式转换implicit详解
假设我们有一个表示文本的行数的类LineNumber: class LineNumber ( val num : Int ) 我们可以用这个类来表示一本书中每一页的行数: val lineNumOfP ...
- win10 关闭屏幕自动亮度
每次切换到vsCode,再切换回桌面,屏幕总是忽暗忽亮,这谁设计的,脑残至极! 百度了好久,终于找到解决办法: 控制面板→英特尔®核芯显卡→电源→使用电池→显示器节能技术→禁用→应用 如果你按上述步骤 ...