SQL条件查询 where
条件查询 where
语法:select 数据 from 数据源 where 进行过滤条件
select * from emp;
select ename,sal,comm,job from emp; 当需要查询的字段不多的时候 建议写出字段名 方便后期操作。
select * from emp where 1=1 and 条件1 and 条件2 and ...; 建议构面跟 where 1=1 方便以后添加条件
where 后条件符:!=取反
= 等于
<>不等于 <20> 不等于20 的
>= 大于等于
<=小于等于
条件与条件之间的连接符
1). and 与,且
条件1 and 条件2 既满足条件1 也要满足 条件2
1和2 的交集
**例:**工资在1000~2000之间的员工所有信息
条件 :
员工信息表;工资1000~2000; 员工所有信息
select * from emp where sal>=1000 and sal<=2000;
2). or 或
条件1 or 条件2 满足条件1 或者 条件2
1和2 并集 【and 交集】
**例:**工资小于1000 或者 大于2000 的所有员工信息。 两个条件集的合并
条件:
员工信息表;工资小于1000 工资大于2000
select * from emp where sal>2000 or sal<1000;
3). not 条件取反
not 语法:
例: 1.部门编号不是20的
select * from emp where not deptno=20;
2.没有奖金的所有员工信息
【 null 的判断
1. null没有赋值
2.不能用= 或者 != 判断
3. null 用 is 连接】
select * from emp where not comm is null;
select * from emp where comm is not null;
【注意:不能用中式英语 老外不承认 】
select * from emp where comm not is null; --错误:中式英语, 奖金不是空
4). between(值1)and(值2) 区间
**例:**工资在1000~2000的所有员工信息
select * from emp where sal between 1000 and 2000;
查询语句的执行流程
from–> where–>select
**1.**先从from后表格中拿出数据一条条的
用where 判定
再输出到查询结果select
**2.**where 后面不能使用字段名
例: 查询年薪大于15000的员工信息
分析条件 :员工信息表; 员工年薪; 大于15000:
【查询所得 员工年薪 的结果集
把结果集当做数据源头
,先运算再过滤】
select ename,empno,job,mgr,sal,comm,(sal+nvl(comm,0))*12 年薪 from emp;
select ename, empno, job, mgr, sal, comm, 年薪from (select ename,empno,job, mgr, sal,comm, (sal + nvl(comm, 0)) * 12 年薪 from emp)where 年薪 > 1500;
some(值列表) all()any()
**1.**some(值1,值2,值3) 3 个值得并集
例:
select * from emp sal>some(1250,5000,3000); 最后显示为大于1250 的所有员工信息
**2. ** any( 值1,值2,值3) 满足任何一个就行 三个值的并集
select * from emp sal>any(1250,5000,3000); 最后显示为大于1250 的所有员工信息
3. all(值1,值2,值3) 满足任何一个 三个值并集
select * from emp sal>all(1250,5000,3000); 最后显示为大于1250 的所有员工信息
集合操作
Union、Union All、Intersect、Minus
Union 并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
Union All 全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;
Intersect 交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus 差集(减去重复) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序
例
select * from emp where deptno>10;
intersect --(union|union all|intersect|minus)
select * from emp where sal>1000;
排序 order by (可以给多个)
语法:select 数据 from 数据源 where 行过滤条件 order by(有排序需求写) 字段名 desc(降序)|asc(默认升序);
【执行流程:from–>where–>select–>order by】
例 所有员工信息,工资按降序排列 工资一样的按奖金的降序排名
select * from emp where 1=1 order by sal desc,comm desc;
所有的员工信息,奖金按降序排名,没有奖金的放在前面
select * from emp where 1=1 order by comm desc nulls first; --null放在前面
select * from emp where 1=1 order by comm desc nulls last; --null放在后面
子查询: 查询语句 嵌套 查询语句
例:查询KING同部门员工信息
分析条件
- 查询KING所在的部门
select deptno from emp where name='KING';
- 查询KING所在部门的员工所有信息 嵌套
select * from emp where deptno=(select deptno from emp where name='KING');
查询年薪大于15000的员工的所有信息
条件分析-- 查询所有员工的年薪 和所有信息
select empno,ename,job,sal,comm,(sal+nvl(comm,0))*12 年薪 from emp;
**【以上作为一个新的结果集,数据源】**
查询年薪大于15000 的员工所有信息
select empno, ename, job, sal, comm, 年薪from (select empno, ename, job, sal, comm, (sal + nvl(comm, 0)) * 12 年薪from emp)where 年薪 > 15000;
in 的便用
例: 查询 10 .20 部门的员工信息
- or.或
select * from emp where deptno=10 or deptno=20;
and 和
select * from emp where deptno=10 and deptno=20;
条件符号,
select * from emp where deptno<=20;
- 集合操作 【上面有详细集合,此处用了一个】
select * from emp where deptno=20
union
select * from emp where deptno=10;
in ( 值1,值2 ,值3) 条件等于in里的值
select * from emp where deptno in(10,20);
【注意:= 与 in 的区别
= 只可以等于一个值
in 可以是多个值 或者一个值】
like 模糊匹配
like: 模糊匹配 效率低 where like ’ ’ 单引号
配合 : --> % _ 百分号 下划线使用
%: --> 任意个数任意字符 使用
_ : --> 一个任意字符
= :精确匹配
例: 1.查询名字里有A的
select * from emp where ename like '%A%';
2. 查询名字里 A开头的
select * from emp where ename like 'A%';
3.查询名字里第二个字母为A的
select * from emp where ename like '_A%';
4.查询名字里倒数第二个字母为A的
select * from emp where ename like '%A_';
函数
函数分为系统内置函数 自定义函数
根据函数的返回值分为:1.单行函数,一条记录返回一个结果
2.多行函数 ,多行函数 组函数 聚合函数 (重点) :多条记录 返回一个结果 (重点)
单行函数:
日期
sysdate/current_date 以date类型返回当前的日期
add_months(d,x) 返回加上x月后的日期d的值
LAST_DAY(d) 返回的所在月份的最后一天
months_between(date1,date2) 返回date1和date2之间月的数目
next_day(sysdate,星期一) 下一个即将要到来的星期一的日期
查看今年日日期 sysdate
select sysdate from dual;select current_date from dual;
日期可以进行 加减 ± sysdate+90
select sysdate+90 from dual;--注意2月天数不确定,三个月后日期于今天不同
月份的加减 ± 解决2月份的不确定天数
转正日期 add_months( hiredate(开始计算的日期),+3(需要增加的月数))
select add_months( hiredate,+3) 转正 from emp;
某个月最后一天 last_day( 时间)
select last_day(sysdate) from dual;
两个日期之间有多少月 months_between(date1,date2)
【注意:算法date1-date2=所得值 避免负数】
select months_between(sysdate,hiredate) 入职月份 from emp;
select months_between(sysdate,hiredate)/12 入职年份 from emp;
即将要过得星期几 next_day(日期,‘星期几’ )
【注意:星期三,汉语三; 老外不承认周几 或者礼拜几】
select next_day(sysdate,'星期三') 下周三 from dual;
to_char to_date
to_char(日期对象,‘格式模板’) : 日期转为字符串
to_date(‘字符串’,‘格式模板’) : 字符串转为日期**
【字符串,模板样式 都需要单引号】
select to_date('1997-07-07 08:30:30','yyyy-mm-dd hh:mi:ss' ) 日期 from dual;/*
字符串的小时为24时 转化格式hh需要添加24 24小时制
以上无效的数字 日期转字符串 必须表格自己的日期
*/
select to_char('1997-07-07 13:30:30','yyyy-mm-dd hh:mi:ss' ) 日期 from dual;
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss' ) 日期 from dual;--年 月 日 需要用双引号"原封不动"保留 24必须在hh后
select to_char(sysdate,'yyyy"年"-mm"月"-dd"日" hh24"时":mi"分":ss"秒"' ) 日期 from dual;
select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24"时":mi"分":ss"秒"' ) 日期 from dual;
select to_char(sysdate,'yyyymmdd hh24miss' ) 日期 from dual;
--输出为19970707 133030
select to_char(sysdate,'yyyymmddhh24miss' ) 日期 from dual;
--输出为19970707133030
判断函数
nvl( 值1,值2) 判定null : 当值1 为null的时候输出值2;
当值1 不是null的时候,直接输出值1 ,不考虑值2;
decode(可变的值,定值case1,case1的结果,定值case2,case2 的结果, 默认结果)
可变的值与case进行判断:是否相等 【注意不能做多值或区间判断】
case与case的结果为一对 当可变的值等于定值case1 则输出case1 的结果
当可变的值等于定值case2 则输出case2 的结果
**例:**将部门编号 改为汉字编号
select deptno,ename,empno,decode(deptno,10,'十',20,'二十',30,'三十','四十') 部门编号汉化 from emp;
decode= 【 case when then else end】 中间没有逗号,用空格分开
(case 可变的值
when当可变值为什么时 then 则输出什么
when当可变值为什么时 then 则输出什么
else什么都不是则输出这个值
end结束)
select deptno,(case deptno when 10 then '十' when 20 then '二十' when 30 then '三十' else '四十' end) 汉化 from emp;
例:
将部门编号汉化 并且 10部门的工资十倍 20部门的100倍 30部门的1000倍 其他部门不变
select ename,deptno,decode(deptno, 10, sal * 10, 20, sal * 100, 30, sal * 1000, sal * 1) 工资翻倍,(case deptnowhen 10 then'十'when 20 then'二十'when 30 then'三十'else'四十'end) 汉化from emp;
多行函数
多行函数| 组合函数| 聚合函数
count(求个数) sum(求和) avg(求平均) max(求最大) min(求最小)
语法:select count( 字段名 ) from emp
ename
comm 【null不参与运算】
* 【代表一条数据的所有字段】
select count(deptno) from emp;
select count(distinct deptno) from emp;
【注意:select 后面一旦出现组函数只能与其他组函数 或分组字段(group by ) 一起使用
三十’
else
‘四十’
end) 汉化
from emp;
## 多行函数多行函数| 组合函数| 聚合函数**count(求个数) sum(求和) avg(求平均) max(求最大) min(求最小)**语法:select count( 字段名 ) from emp ename comm 【null不参与运算】 * 【代表一条数据的所有字段】```sql
select count(deptno) from emp;
select count(distinct deptno) from emp;
【注意:select 后面一旦出现组函数只能与其他组函数 或分组字段(group by ) 一起使用
where 后面不能出现组函数】
SQL条件查询 where相关推荐
- 关于时间的SQL条件查询
文章目录 一. 问题背景 二. 解决 一. 问题背景 在navicat书写sql语句时,有时候遇到关于时间字段的条件查询,比如where create_time >= "2021-02 ...
- SQL条件查询,分组查询,排序查询,分页查询
DQL查询操作(条件查询,分组查询,排序查询,分页查询) 文章目录 DQL查询操作(条件查询,分组查询,排序查询,分页查询) 一.查询语法 二.基础查询 三.条件查询 四.排序查询 五.分组查询 六. ...
- sql 条件查询以及模糊查询
-- 条件查询 where子句后跟条件 -- SELECT * FROM 表名 WHERE 条件; /* 1.between..and 在一个范围之间 2.in 集合 3.li ...
- 006.Sql条件查询
条件查询的语法就是: SELECT * FROM <表名> WHERE <条件表达式>
- Sql条件查询的逻辑判断顺序
数据库表如下 查询 name 是zs且 age 是10 或 age是20的,如果使用一下sql查询,查询出来的结果是不正常的. SELECT * from student WHERE name = ' ...
- 使用SQLyog的sql条件查询
1. 等值判断(=) #查询符合条件的数据 SELECT employee_id,first_name,salary FROM t_employees WHERE salary = 10000; 2. ...
- SQL条件查询/动态SQL
1.if标签 语法 <if test="boolean判断结果">sql代码 </if> 示例: 为什么需要添加 id=-1(任意不成立条件或者是绝对成立条 ...
- SQL Sever 条件查询
在实际开发中,数据库是我们必不可少的工具,学习好如何使用数据库能让我们的开发事半功倍,今天我分享一下SQL条件查询的一些知识. 首先我们必需了解一个子句:SQL Sever WHERE 子句.这个子句 ...
- Mysql查询数据之基本和多条件查询
(1)基本查询 SQL基本查询语法:SELECT * FROM <表名>; SELECT查询的结果是一个二维表. MySQL [test]> select * from studen ...
最新文章
- Ubuntu常用工具
- 链表反转2(Reverse Linked List II)
- 数据挖掘与python实践中国慕课答案_中国大学MOOC(慕课)_数据挖掘与python实践_慕课答案...
- 文献记录(part43)--Multivariate time series clustering based on complex network
- 搜索引擎基础概念(1)—— 倒排索引
- 边缘计算精华问答 | 火爆的边缘计算为何兴起?
- vue和java bean_Java:JavaBean和BeanUtils
- 快乐大本营中测试声音年龄的软件_海天味极鲜酱油极限挑战宝藏行 终极试炼,极限成员们勇登珠峰大本营...
- win7 桌面背景保存位置,告诉你源文件删除后如何找回
- 单点登录原理及实现方式
- 合成孔径 saft matlab,合成孔径聚焦超声成像研究
- spline本地运行的方法
- Spark优化——推测执行机制
- IP协议详解【IP报文头部结构、IP分片、IP路由、IP转发】
- 4274. 【NOIP2015模拟10.28B组】终章-剑之魂
- 使用 Transformer 序列到序列的钢琴转录
- com.android.dazhihui,大智慧
- 掌握这10条精进原则,成为一名更好的软件开发者
- 电脑开机只显示计算机界面,笔记本电脑进不了桌面?开机只显示BIOS界面?
- 腾讯开放平台-QQ互联认证-未提交审核