条件查询 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同部门员工信息

分析条件

  1. 查询KING所在的部门
select deptno from emp where name='KING';
  1. 查询KING所在部门的员工所有信息 嵌套
select * from emp where deptno=(select deptno from emp where name='KING');
  1. 查询年薪大于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 部门的员工信息

  1. 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;
  1. 集合操作 【上面有详细集合,此处用了一个】
select * from emp where deptno=20
union
select * from emp where deptno=10;
  1. 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相关推荐

  1. 关于时间的SQL条件查询

    文章目录 一. 问题背景 二. 解决 一. 问题背景 在navicat书写sql语句时,有时候遇到关于时间字段的条件查询,比如where create_time >= "2021-02 ...

  2. SQL条件查询,分组查询,排序查询,分页查询

    DQL查询操作(条件查询,分组查询,排序查询,分页查询) 文章目录 DQL查询操作(条件查询,分组查询,排序查询,分页查询) 一.查询语法 二.基础查询 三.条件查询 四.排序查询 五.分组查询 六. ...

  3. sql 条件查询以及模糊查询

    -- 条件查询 where子句后跟条件 -- SELECT * FROM 表名 WHERE 条件; /* 1.between..and  在一个范围之间 2.in            集合 3.li ...

  4. 006.Sql条件查询

    条件查询的语法就是: SELECT * FROM <表名> WHERE <条件表达式>

  5. Sql条件查询的逻辑判断顺序

    数据库表如下 查询 name 是zs且 age 是10 或 age是20的,如果使用一下sql查询,查询出来的结果是不正常的. SELECT * from student WHERE name = ' ...

  6. 使用SQLyog的sql条件查询

    1. 等值判断(=) #查询符合条件的数据 SELECT employee_id,first_name,salary FROM t_employees WHERE salary = 10000; 2. ...

  7. SQL条件查询/动态SQL

    1.if标签 语法 <if test="boolean判断结果">sql代码 </if> 示例: 为什么需要添加 id=-1(任意不成立条件或者是绝对成立条 ...

  8. SQL Sever 条件查询

    在实际开发中,数据库是我们必不可少的工具,学习好如何使用数据库能让我们的开发事半功倍,今天我分享一下SQL条件查询的一些知识. 首先我们必需了解一个子句:SQL Sever WHERE 子句.这个子句 ...

  9. Mysql查询数据之基本和多条件查询

    (1)基本查询 SQL基本查询语法:SELECT * FROM <表名>; SELECT查询的结果是一个二维表. MySQL [test]> select * from studen ...

最新文章

  1. Ubuntu常用工具
  2. 链表反转2(Reverse Linked List II)
  3. 数据挖掘与python实践中国慕课答案_中国大学MOOC(慕课)_数据挖掘与python实践_慕课答案...
  4. 文献记录(part43)--Multivariate time series clustering based on complex network
  5. 搜索引擎基础概念(1)—— 倒排索引
  6. 边缘计算精华问答 | 火爆的边缘计算为何兴起?
  7. vue和java bean_Java:JavaBean和BeanUtils
  8. 快乐大本营中测试声音年龄的软件_海天味极鲜酱油极限挑战宝藏行 终极试炼,极限成员们勇登珠峰大本营...
  9. win7 桌面背景保存位置,告诉你源文件删除后如何找回
  10. 单点登录原理及实现方式
  11. 合成孔径 saft matlab,合成孔径聚焦超声成像研究
  12. spline本地运行的方法
  13. Spark优化——推测执行机制
  14. IP协议详解【IP报文头部结构、IP分片、IP路由、IP转发】
  15. 4274. 【NOIP2015模拟10.28B组】终章-剑之魂
  16. 使用 Transformer 序列到序列的钢琴转录
  17. com.android.dazhihui,大智慧
  18. 掌握这10条精进原则,成为一名更好的软件开发者
  19. 电脑开机只显示计算机界面,笔记本电脑进不了桌面?开机只显示BIOS界面?
  20. 腾讯开放平台-QQ互联认证-未提交审核

热门文章

  1. 软件-进阶-产品-突破自我
  2. 锦天科技被盛大收购了
  3. 软件研发中敏捷开发和迭代开发的异同
  4. 软件工程第一次作业 - 针对“天天向上”团队的采访
  5. JavaScript基础-02
  6. android latinime分析,Android AOSP输入法(LatinIME)大写判断分析
  7. Python爬虫实战视频教程-李宁-专题视频课程
  8. 北京python培训 脱产
  9. AdaBoost算法概述
  10. java计算机毕业设计广西科技大学第一附属医院陪护椅管理MyBatis+系统+LW文档+源码+调试部署