主键约束
唯一约束
非空约束
外键约束
检查约束

*************select ---表示查询
select 查询信息 from 查询来源

例如:
---查询部门信息:
select * from dept
---查询员工信息:
select * from emp
---查询所有部门的部门编号及部门名称
select deptno , dname from dept
---查询所有员工的名称,工资,所在的部门编号
select ename , sal , deptno from emp

*******去重   distinct
查询存在员工的部门编号
select deptno from emp;
select distinct deptno from emp;

查询所有的员工名称,员工所在的部门编号
select  distinct ename , deptno from emp

******给列取别名
查询员工姓名,工资。给员工姓名enmae取别名为“姓名”,sal取别名为“工资”
select ename , sal from emp   ----没有别名
select  ename 姓名 , sal 工资 from emp;        ----添加别名-----------方式1
select enmae as 姓名 , sal as 工资 from emp;  -----添加别名可以用as---方式2

******排序 order by  升序:asc       降序:desc
查询所有员工的名字及薪水,根据薪水从高到低排序
select ename , sal from emp order by sal desc
****多字段排序
查询所有的员工姓名,工资,所在的部门编号,按照部门编号升序排序,同一部门的员工,按照工资的降序排序
select ename , sal , deptno from emp order by deptno asc , sal desc;

*****伪列跟虚表
伪列:查询不存在的列,当需要的结果不能直接吃表中得到,通过需要计算来展示则可以用伪列+表达式实现
查询员工姓名,月工资,年薪(月薪*12)-----注:年薪列表不存在
select ename , sal , sal*12 as 年薪 from emp

****null**空的处理     
nvl():专门处理空函数    nvl(exp1,res)
查询员工姓名,工资,提成(comm),月收入    月收入=工资+提出(有的的员工提成为空)
select ename ,sal, comm, sal+nvl(comm,0)  月收入 from emp    --nvl(comm,0):当comm不为空,正常给数值:sal+comm,如果comm为空,就给数值0:sal+0

---排序,有空     nulls first   nulls last
--查询员工的信息,并且按照提成进行升序排序
select * from emp order by  comm asc nulls last

***字符串拼接 || 
查询员工姓名,并把员工姓名后面加个字符a,单独输出一列
select ename , ename||'a'  别名 from emp

****虚表:dual
计算999*666的值
select 999*666 from dual

***条件查询--where
select 查询内容 from 数据来源 where 行记录条件

****条件运算
=    >    <    >=     不等于:<=    <>,!=,^=    between and    in(若干个定值之间取值)

查询10部门的员工信息
select * from emp where deptno=10;
查询名称‘SMITH’的员工信息
select * from emp where ename='SMITH'      -----因为SMITH尾字符串,所以需要引起来
查询非10部门的员工姓名和所属编号
select ename , deptno from emp where deptno!=10;
select ename , deptno from emp where deptno<>10;
select ename , deptno from emp where deptno^=10;
查询所有的工资在2000以上的员工信息
select * from emp where sal>2000
查询工资在2000~4000的员工信息
select * from emp where sal between 2000 and 4000    ----工资包含2000,4000
查询在10部门或者在20部门的员工信息
select * from emp where deptno in(10,20)

*****and   or    not
查询工资大于1500 并且在20部门的员工信息
select * from emp where sal>1500 and deptno=20
查询工资在1500到3000之间的员工信息 [1500,3000]---闭区间
select * from emp where sal between 1500 and 3000 或者 select * from emp where sal>=1500 and sal<=3000
----or
查询出20部门的员工,以及工资大于1500的员工信息
select * from emp where sal>1500 or deptno=20;
----not  取反
查询不在20部门的员工信息     not  !=  <>  ^=

查询不在20部门,而且工资不大于1500的员工信息
select * from emp where deptno!=20 or  sal<=1500

*****null运算nvl()   in null   in not null   not...is null
查询所有的可能获得奖金的员工信息 :查询出奖金不为空的员工信息
select * from emp where comm is not null
select * from emp where not comm in not
查询所有的不可能获得奖金的员工信息:奖金为空的员工信息
select * from emp where comm is null

****nvl(x1,x2)  当某个字段为空时,给出一个特定的值,否则,该值就为他自己
查询获取到奖金的员工信息,查询奖金大于0的员工信息
select * from emp where comm>0;
查询所有的没有奖金的员工信息(comm<=0)
解析:---当某个人的奖金为null,我们就给他的奖金值设为0
select * from emp where  nvl(comm,0)<=0

***模糊查询  like     %:任意的字符  _:一个字符
查询名称为"SMITH" 员工的信息   
select * from emp where ename='SMITH'
查询名称当中包含有‘张’的信息
select * from emp where enmae like '%张%'
查询JOB字段包含有‘A’的员工信息
select * from emp where JOB like '%A%'

查询名称以‘A‘开头的员工信息
select * from emp where ename like 'A%'
查询名称当中第二个字母为’A‘的员工信息
select * from emp where ename like '_A%'
查询名称当中倒数第二个字母为’I‘的员工信息
select * from emp where ename like '%I_'

特殊查询
查询员工名称当中包含%的员工的信息
select * from emp where enmae like '%a%%' escape('a')
查询员工名称当中包含‘a%’的员工信息
select * from emp where ename like '%aaa%%' escape('a')  
查询员工名称当中包含‘%’ ‘_'的员工信息
select * from emp where ename like '%a%%a_%' escap('a')

--向emp表中插入一条记录   insert into......values
insert  into emp(empno, enmae, job, deptno) values(111,'a%bdc','aaa',20)

where 子句
查询所有的部门信息
select * from dept
查询所有的员工信息
select * from emp

查询销售部(SALES)的员工信息
select * from emp where deptno = ( select deptno from dept where dname = 'SALESA')
查询 工资等级在2的员工信息
select * from emp where sal  between  (select losal from slagrade where grade=2)  and (select hisal from salgrade where grade=2)

**************函数**************************
concat(x,y)  拼接函数:连接字符串x和y
instr(x,str,n)   在x中查找str,可以指定从start开始,也可以指定从第n次开始
length(x)  返回x的长度
lower(x):x转换为小写
upper(x):x转换为大写
Itrim(x,trim_str)  把x左边截去trim_str字符串,缺省截去空格
rtrim(x,trim_str)  把x右边截去trim_str字符串,缺省截去空格
replace(x,old,new)   在x中查找old,并替换为new
substr(s,start,length)  返回x的字符串,从start处开始,截取length个字符,缺省length,默认到结尾

***************-----------**************************

concat(x,y)  拼接函数:连接字符串x和y
查询所有员工的姓名和工种
select enmae,job from emp
将员工的姓名和工种一起显示
方法一:select ename||job namejob from emp
---concat(x,y)  拼接函数:连接字符串x和y
方法二:  select concat(ename,job)  namejob from emp

instr(x,str,n)   在x中查找str,可以指定从start开始,也可以指定从第n次开始
找子串
假设有一个字符串‘helloword’ ,请找出‘e’
select instr('helloword','e')  from dual;     dual---虚表
假设有一个字符串‘helloword’ ,请找出‘i’
select instr('helloword','i',1,2)  from dual;   从第一个位置开始找,找第二次出现i的位置 
查看所有员工的姓名当中是否包含‘A’ ,如果包含,则显示出现的位置
select ename, instr('ename','A') from emp

length(x)  返回x的长度
显示‘hello’的字符长度
select length('hello') from dual
查询每个员工的名称  由几个字符组成
select ename,length(ename) from emp;
查看10部门的员工的姓名的长度   并且按照员工姓名字符长度来进行升序排序
select ename,deptno, length(ename) from emp where deptno=10 order by length(ename) asc;

lower(x):x转换为小写
upper(x):x转换为大写

查询20部门员工的姓名和工资以及所属的部门编号,并且将姓名全部转换为小写
select  ename,sal,deptno,lower(ename)  lowerName from emp  where  deptno=20;

Itrim(x,trim_str)  把x左边截去trim_str字符串,缺省截去空格
rtrim(x,trim_str)  把x右边截去trim_str字符串,缺省截去空格

例子:  ‘  abc  abc  ’
去除字符串左边的空格
select Itrim(' abc  abc  ')  from dual;
去除右边的空格
select rtrim(' abc  abc  ')  from dual;
select rtrim(' abc  abc  ') ||'a'  from dual;为了确定右边的空格去掉了,加一个字符a
去除字符串两边的空格
select rtrim(ltrim(' abc  abc  ')) from dual;
select concat(rtrim(ltrim(' abc  abc  ')),'a') from dual;

例子:  字符串‘aaa123456bbb’
去除左边字符串aaa与右边字符串bbb,结果输出‘123456’
select rtrim(Itrim('aaa123456bbb','aaa'),'bbb') from dual;

replace(x,old,new)   在x中查找old,并替换为new
substr(s,start,length)  返回x的字符串,从start处开始,截取length个字符,缺省length,默认到结尾

例子:字符串‘a123b456c789’
将字符串‘a123b456c789’中'a'替换为'_'
select replace(‘a123b456c789’,'a','_')  from dual;

例子:字符串'abc'
select substr('abc',2)  from dual;   从第二个位置开始截取,输出结果为'bc'
select substr('abc',2,1)  from dual;   从第二个位置开始截取,截取一个字符串,输出结果为'b'

显示出所有员工的名称中的第一个字符
select ename, substr(ename,1,1) from emp;
显示出所有员工的名称中的第三四个字符
select ename, substr(ename,3,2) from emp;
显示出所有员工的名称中的最后一个字符
select ename, substr(ename,length(ename),1) from emp;

***********日期函数***************
sysdate   当前系统时间
current_date  返回当前系统日期
add_months(d1,ni)   返回在日期d1基础上再加n1个月后新的日期
last_day(d1)       返回日期d1所在月份最后一天的日期
months_between(d1,d2)  返回日期d1到d2之间的月数
next_day(d1[,c1])    返回日期d1在下周,星期几(参数c1)的日期

***************************************
--获取当前日期
select sysdate from dual;
select current_date from dual;
--获取当前系统后一天的时间
select sysdate+1 from dual;
--查询所有的员工的转正日期    三个月的试用期
select empno,ename, hiredate ,add_months(hiredate,3) 转正日期  from emp;
--查看当前月份的最后一天
select  last_day(sysdate) from dual;
--查看每个员工入职月的最后一天
select last_day(hiredate) 最后一天 , hiredate from emp;

--查询每个员工 工作到现在为止 ,一共上了几个月的班
select sysdate, hiredate , months_between(sysdate,hiredate) from emp;
--获取当前时间点的下一个星期几是什么时候
select next_day(sysdate,'星期一') from dual;

******转换函数******
to_char(x,c)  将日期或数据x按照c的格式转换为char数据类型
to_date(x,c)  将字符串x按照c的格式转换为日期
to_number(x)  将字符串x转化为数字类型

***************************************
to_char(x,c) :
将员工的入职日期(hiredate)转换为'月-日-年'的格式
select hiredate, to_char(hiredate,'mm/dd/yyyy')  from emp;
将今天日期(sysdate)转换为'月/日/年'的格式
select to_char(sysdate,'mm/dd/yyyy') from dual;

将今天日期(sysdate)转换为中文年月日的格式-----用双引号引起来!!
select to_char(sysdate,'mm"月"dd"日"yyyy"年"') from dual;

to_date(x,c)
例子:'1990/01/01'
select to_date('1990/01/01','yyyy/mm/dd') from dual;

to_number(x,c)
例子:'11'  ----16进制的
把16进制的11,转换为10进制的
select to_number('11','xx')  from dual;

*********组函数************
avg()    平均值
sum()    求和
min()    最小值
max()    最大值
count()  统计
注意:null不参与运算
**********************

统计本公司的人数
select count(empno)  from emp;  ---根据员工编号(empno)统计
求出所有员工中工资最高的金额
seletc max(sal) from emp;

统计10部门员工的人数
select count(empno) from emp where deptno=10;
求20部门员工的工资总和
select sum(sal) from emp where deptno=20;
统计公司有几个部门(deptno)
select count(deptno) from dept;

例子:统计与去重相结合
统计有几个部门里面有员工-----有的部门有好多个员工,所以需要去重
select count(distinct,deptno)  from emp;

统计记录数  *
select count(*) from emp;
求出所有员工的平均奖金---有的员工没有奖金
select sum(comm)/count(*) from emp;

统计时,为空时也给一个值,可以用nvl
select count(nvl(comm,0)) from emp;

***********group by  分组函数**************
select ... from ...group by...
求出每个部门的平均工资
select deptno, avg(sal) from emp group by deptno;
求出每个工种(job)对应的平均工资
select job, avg(sal) from emp group by job;
求出有员工的每个部门的人数
select  deptno, count(*) from emp group by deptno;

having:过滤组信息
查看平均工资大于2000的部门的部门编号和和平均工资
select deptno, avg(sal) from emp group by deptno having avg(sal) >2000;

查看部门里边员工数大于3个人的部门编号和人数
select  count(*) from emp group by deptno  having count(*)>3;

先筛选行,在筛选组
where  筛选行。只能出现行信息
having 筛选组。只能出现组信息

--查询部门编号和部门的员工数量
--只统计工资大于2000的员工
--并且是工资大于2000的员工数量在2及其以上的部门
select deptno, count(*) from emp where sal>2000  group by deptno having  count(*)>=2;

*****分页**********
rownum:是对每一个结果集中的每一条记录的编号,从1开始

---进行分页,每一页显示5条记录,查询第一页的数据
select ename, sal, deptno, rownum from emp where rownum<=5;

--查询第2页的数据  6~10条----注意:每一个结果集都有自己的rownum,不能直接去rownum,需要取别名
1)---查询所有员工的信息,并且加上伪列rownum
select ename, sal, deptno, rownum from emp;
2)--将查询出来的结果集作为临时的数据来源,此时,刚才临时的那个结果集rownum 为普通字段
select * from (select ename, sal, deptno, rownum rw from emp) where rw>5 and rw<=10;

---查询第2页的数据
select ename, sal, deptno, rw, rownum from (select ename, sal, deptno, rownum rw  from emp) where rw>5 and rw<=10;

--查询员工的信息,姓名,工资,部门编号,按照工资降序排序,实现分页
--每一页显示3条记录  查询第一页的数据
select ename, sal, deptno, r1, r2 from
(select ename, sal, deptno, r1, rownum r2 
from (select ename, sal, deptno, rownum r1 from emp order by sal desc))
where r2<=3;

创建一张表copy,并且将dept表里面的内容拷贝到copy表中
create table copy as select * from dept;
select deptno, dname, loc, rowid from copy;   rowid是唯一的

insert into copy select * from dept;  将dept表里面的内容复制到dopy表,并查看dept表
commit;     将内容上传

将所有相同的记录只保留一份
-1.将数据分组,按照重复信息进行分组
-2.在每一组中,选取一条记录进行保存,找到特性(标识)
-3.删除时,找那些不再保留范围内的数据

select min(rowid) from copy group by deptno, dname, loc;选取最小的rowid进行保留

select * from copy from  not in 
(select min(rowid) from copy group by deptno, dname, loc);  找到不是最小值的数据

delete from copy where rowid not in 
(select min(rowid) from copy group by deptno, dname, loc);   删除最少值

commit;  上传数据

select * from copy;  查找只保留一份的数据

oracle数据库语句相关推荐

  1. Oracle数据库语句总结

    简介说明 四大传统主流数据库: Oracle MySQL SqlServer DB2 非关系型数据库: Redis MongoDB 主流数据库是关系型数据库:表与表之间是存在关联关系的 当我们说安装数 ...

  2. oracle查询并更新数据库,oracle数据库查询和更新

    package sqltest; import java.sql.*; import parameter.BaseCanShu; public class PublicDbOracle { stati ...

  3. 使用oracle 游标修改数据,修改oracle数据库游标

    SQL游标原理和使用方法 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/chinahuyong/article/details/3552248 SQL ...

  4. oracle like 使用,Oracle数据库like和not like使用

    使用Zabbix监控Oracle数据库 Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarm ...

  5. oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...

    本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...

  6. oracle数据库----SQL语句的实践(应用实例)

    oracle数据库----SQL语句的实践(应用实例) 创建表工资表salary,包括员工号emp_id,员工名emp_name,员工月基本工资monthsal,员工月总发工资totalsal. cr ...

  7. Oracle 数据库常用操作语句大全

    原文:Oracle 数据库常用操作语句大全 一.Oracle数据库操作 1.创建数据库      create database databasename 2.删除数据库      drop data ...

  8. Oracle数据库查看表空间sql语句、查看Oracle数据库表空间剩余 、修改表空间、库备份

    一  Oracle数据库查看表空间sql语句 1.oracle查看表空间当前用户 SQL>  select  username,default_tablespace  from user_use ...

  9. Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法

    Python 连接 Oracle 数据库 第一章:连接 oracle 数据与环境配置 ① 连接 oracle 数据库效果演示 ② oci 下载 ③ oci 配置 ④ 环境变量配置 ⑤ 检测是否有 or ...

最新文章

  1. sge resnet
  2. day 29 socketsetserver 模块
  3. C++ Primer Plus章节编程练习(第五章)
  4. 手机端实现6位短信验证码input输入框效果(样式及代码方法)
  5. SourceTree windows版本免注册免登陆使用方法
  6. jsp地址栏传中文显示乱码解决方法
  7. Linux nohup命令详解
  8. 身份证前六位地址验证
  9. cefsharp修改html,C#使用 CefSharp采集网页源代码
  10. canvas实现简单画板
  11. 软件开发工程师工作总结(转)
  12. 解决第三方dll出现:找不到指定模块(非路径错误)
  13. ai新视觉:一键解决模糊图片高清精准修复
  14. opengl android 纹理贴图 代码,Android 使用opengl es的纹理贴图白屏问题请教。
  15. 企业ERP管理系统使用说明
  16. CIDR 计算网络地址、子网掩码、广播地址
  17. 如何解决不确定性环境下的复杂工程系统动力学基本问题?
  18. 工欲善其事,必利其器
  19. python批量替换网站静态文件内的域名
  20. opencv 解决ippicv下载慢的问题: ippicv_2019_lnx_intel64_general_20180723

热门文章

  1. java吃水果小游戏中水果,蔬菜等的重画
  2. android ip查看工具,安卓手机查看IP地址的两种方法
  3. 快速获取excel工作簿中所有工作表的名称
  4. Java 小项目 01 简单记账软件
  5. [Android开源]一个非常简单易用用来花式展示二维码样式生成的库QRCodeStyle
  6. 深入探索透视投影变换(续)
  7. 银河麒麟操作系统V10 安装KVM
  8. 未来10年计算机专业会不会淘汰,未来10年不会“被淘汰”的4个专业,发展潜力较大,就业前景可观...
  9. Chrome浏览器访问站点浏览器提示不安全解决方案
  10. [Client]前端代码规范 及 最佳实践