SQL函数知识点
SQL函数知识点
SQL题目(一)
1、查询部门编号为10的员工信息
select*from emp where empno=10;
2、查询年薪大于3万的人员的姓名与部门编号
select ename,sal from emp where sal*12>30000
3、查询佣金为null的人员姓名与工资
select*from emp where comm is null
4 查询工资大于1500 且 and 含有佣金的人员姓名
select*from emp where comm >0 and sal>1500
5 查询工资大于1500 或 or含有佣金的人员姓名
select*from emp where comm >0 or sal>1500
6查询姓名里面含有 S 员工信息 工资、名称
select SAL,ENAME from emp where ename like '%S%'
7求姓名以J开头第二个字符O的员工姓名的与工资
select ENAME, SAL,empno from emp where ename like '%J%'and ename like '_O%'
8、求包含%的雇员姓名
(1)insert into emp(empno,ename) values(9527,'huan%an');
(2)select * from emp where ename like '%\%%' escape '\'
9 使用in查询部门名称为 SALES 和 RESEARCH 的雇员姓名、工资、部门编号
select * from emp where job in('SALES','CLERK')
10 使用exists查询部门名称为SALES和RESEARCH 的雇员姓名、工资、部门编号。
select * from emp where exists(select * from dept where job in('SALES','CLERK'))
select empno,ename,job,sal from emp e where exists(select* from dept d where job in('SALES','CLERK') and e.epstno=d.epstno)
SQL题目(二)
1、查询10号部门中编号最新入职的员工,工龄最长的员工的个人信息。
2、从“software”找到‘f’的位置,用‘*’左右填充到15位,去除其中的‘a’。
3、查询员工的奖金,如果奖金不为NULL显示‘有奖金’,为null则显示无奖金
4、写一个查询显示当前日期,列标题显示为Date。再显示六个月后的日期,下一个星期 日的日期,该月最后一天的日期。
5、查询EMP表按管理者编号升序排列,如果管理者编号为空则把为空的在最前显示
6、求部门平均薪水
7、按部门求出工资大于1300人员的 部门编号、平均工资、最小佣金、最大佣金,并且最大佣金大于100
8、找出每个部门的平均、最小、最大薪水
9、查询出雇员名,雇员所在部门名称, 工资等级。
*/
--1、查询10号部门中最新入职的员工,工龄最长的员工的个人信息。
select e.* from emp e where e.hiredate in (
(select max(e1.hiredate) from emp e1 where e1.deptno = 10),
(select min(e2.hiredate) from emp e2 where e2.deptno = 10));
--2、从“software”找到‘f’的位置,用‘*’左右填充到15位,去除其中的‘a’。
select instr('software','f') from dual;
select lpad('software',15,'*') from dual;
select rpad('software',15,'*') from dual;
select replace('software','a') from dual;
--3、查询员工的奖金,如果奖金不为NULL显示‘有奖金’,为null则显示无奖金
select decode(e.comm,null,'无奖金','有奖金') from emp e;
--4、写一个查询显示当前日期,列标题显示为Date。
--再显示六个月后的日期,下一个星期 日的日期,该月最后一天的日期。
select sysdate "Date", add_months(sysdate,6) 六个月后 ,next_day(sysdate,'星期日') 下个星期日, last_day(sysdate) 该月最后一天 from dual;
--5、查询EMP表按管理者编号升序排列,如果管理者编号为空则把为空的在最前显示 (nulls first)
select * from emp e order by e.mgr asc nulls first;
--6、求部门平均薪水
select e.deptno ,avg(e.sal) from emp e group by e.deptno;
--7、按部门求出工资大于1300人员的 部门编号、平均工资、最小佣金、最大佣金,并且最大佣金大于100
select e.deptno,avg(e.sal),min(e.comm),max(e.comm) from emp e where e.sal>1300 group by e.deptno having max(nvl(e.comm,0))>100;
--8、找出每个部门的平均、最小、最大薪水
select e.deptno,avg(e.sal),min(e.sal),max(e.sal) from emp e group by e.deptno;
--9、查询出雇员名,雇员所在部门名称,工资等级。
select * from emp e ,dept d where e.deptno = d.deptno;
select * from salgrade;
select e.ename,d.dname from emp e, dept d where e.deptno = d.deptno;
select e.ename ,sg.grade from emp e,salgrade sg where e.sal between sg.losal and sg.hisal;
select e.ename, d.dname, sg.grade
from emp e, dept d, salgrade sg
where e.deptno = d.deptno
and e.sal between sg.losal and sg.hisal;
/*
1、查询82年员工
2、查询32年工龄的人员
3、显示员工雇佣期 6 个月后下一个星期一的日期
4、找没有上级的员工,把mgr的字段信息输出为 "boss"
5、为所有人长工资,标准是:10部门长10%;20部门长15%;30部门长20%其他部门长18%
*/
select * from emp;
--1、查询82年员工
select e.ename from emp e where to_char(e.hiredate,'yy') = '82';
--2、查询32年工龄的人员
select e.*,(months_between(sysdate,e.hiredate)/12) from emp e where (months_between(sysdate,e.hiredate)/12) >= 32;
--3、显示员工雇佣期 6 个月后下一个星期一的日期
select next_day(add_months(e.hiredate,6),'星期一') from emp e;
--4、找没有上级的员工,把mgr的字段信息输出为 "boss"
select e.ename,nvl(to_char(e.mgr),'boss') from emp e;
--5、为所有人长工资,标准是:10部门长10%;20部门长15%;30部门长20%,其他部门长18%
select e.ename,e.sal,e.deptno,(case e.deptno when 10 then e.sal*1.1
when 20 then e.sal*1.15
when 30 then e.sal*1.2
else e.sal*1.18 end ) from emp e;
select e.,decode(e.deptno,10,e.sal1.1,20,e.sal1.15,30,e.sal1.2,e.sal*1.18) from emp e;
select * from emp;
需要注意的点
--分组可以按多个列分组
select e.job,e.sal from emp e group by e.job,e.sal;
--group by分组的列可以不出现在select里,检索字段(select后面跟着的字段)必须出现在分组列表里。
--错误的:select e.job,e.detpno from emp e group by e.job;
--正确的:select e.deptno from emp e group by e.deptno,e.sal,e.job;
--如果分组列中具有null值,则null将作为一个分组返回。如果列中有多行null值,他们将分为一组。
select comm from emp e group by e.comm;
--group by 子句必须出现在where子句之后,order by 子句之前。
select e.deptno from emp e where e.sal>800 group by e.deptno having e.deptno=20 order by e.deptno desc
--where过滤行记录 having 过滤组记录
--select 后面只能跟列( group by 出现的列)或组函数
--不能在 WHERE 子句中使用组函数
--错误的:select e.deptno from emp e where avg(e.sal) group by e.deptno;
--求部门下雇员的平均工资>2000 人数
select e.deptno ,count(1),avg(e.sal) from emp e group by e.deptno having avg(e.sal) > 2000;
/*
Sql语句执行过程
1.读取from子句中的基本表、视图的数据,[执行笛卡尔积操作]。
2.选取满足where子句中给出的条件表达式的元组
3.按group子句中指定列的值分组,同时提取满足Having子句中组条件表达式的那些组
4.按select子句中给出的列名或列表达式求值输出
5.Order by子句对输出的目标表进行排序。
Sql语句执行顺序
from - where - group by - having - select - order by
组函数
--1.min() 求一组数据中的最小值
select min(e.sal) from emp e;
--2.max() 求一组数据中的最大值
select max(e.sal) from emp e;
--3.avg() 求一组数据中的平均值
select avg(e.sal) from emp e;
--4.sum() 求一组数据中的和
select sum(e.sal) from emp e;
--5.count() 求一组数据有多少行
select count(1) from emp e;
SQL函数知识点的更多相关文章
- sql注入知识点整理(基础版)
sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...
- Oracle 中的sql函数以及分页
SELECT LPAD(,'*.') "LPAD example" FROM DUAL; 1.分页查询 (1)方法一:使用 between and 来实现分页 select * ...
- SQL函数说明大全
一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- [转]字符型IP地址转换成数字IP的SQL函数
使用SQL函数可以实现许多的功能,下面为您介绍的是字符型IP地址转换成数字IP的SQL函数示例,供您参考,希望对您学习SQL函数能够有所帮助. /**//*--调用示例 sele ...
- 常用的Sql 函数
常用的Sql 函数 1: replace 函数,替换字符. 语法 replace (original-string, search-string, replace-string ) 第一个参数你的字符 ...
- 常用的 SQL 函数
SQL 函数 聚合函数(针对数字列): AVG:求平均分 COINT: 计算个数 MAX: 求最大值 MIN: 求最小值 SUM: 求和 数学函数(): ABS: 绝对值 CEIL ...
- Oracle数据库--SQL函数
Oracle SQL函数 1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii( ...
- 常用的sql函数
常用的sql函数 concat('hello','world') 结果:helloworld 作用:拼接 substr('helloworld',1,5) hello ...
随机推荐
- Redis基础篇(四)持久化:内存快照(RDB)
AOF好处是每次执行只需要记录操作命令,记录量不大.但在故障恢复时,需要逐一执行AOF的操作命令,如果日志很大,恢复就很慢. 今天学习另一种持久化方式:内存快照.内存快照,是Redis某一时刻的状态, ...
- 听说又有兄弟因为用YYYY-MM-dd被锤了...
还记得去年分享过一篇日期格式化使用 YYYY-MM-dd 的潜在问题的文章不? 历史又重演了... 事故现场 我们来写个单元测试,重现一下这个问题. 测试逻辑: 创建两个日期格式化,一个是出问题的YY ...
- 使用JMeter进行压力测试
使用JMeter进行压力测试(基础篇) 1.启动Jmeter 双击图中所示文件出现如下图所示即启动成功 2 新建测试计划 File------>new 2.1右键新建线程组 add-----&g ...
- Ubuntu和UOS+mips64l龙芯处理器安装编译Openssl
1.下载openssl开发包文件,我这里下载的是openssl-1.1.1f.tar.gz:并放在/data/home/dengchaoqun/openssl1.1.1目录下 2.终端切换到当前目录下 ...
- flume伪分布式安装
flume伪分布式安装: 1.导包:apache-flume-1.7.0-bin.tar.gz 2.配置环境变量:/etc/profile export FLUME_HOME=/yang/apache ...
- python之json、pickle模块
一.json模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候, ...
- 我的程序员之路:自学Java篇
序章 时光疾驰,从事IT行业已两年有余. 16年11月开始自学Java,从此开启自学之路,后来实习期自学大数据.python.爬虫等,最终成长为一名平凡的程序员.回首望去,一路上的过往历历在目,有初学 ...
- SQL注入之堆叠注入(堆查询注入)
Stached injection -- 堆叠注入 0x00 堆叠注入的定义 Stacked injection 汉语翻译过来后,称 为堆查询注入,也有称之为堆叠注入.堆叠注入为攻击者提供了很多的 ...
- 【剑指 Offer】10-II.青蛙跳台阶问题
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...
- python作业完成简单的文件操作
题目 请创建以学号命名的目录,在该目录中创建名称为file1.txt的文件,并将自己的个人信息(序号.姓名以及班级)等写入该文件:然后并读取文件中的内容到屏幕上:接着重新命名该文件为file2.txt ...