数据库——Oracle(5)
1 唯一约束:
1)修改表的时候设置唯一约束
alter table 表名
add constraint 约束名
unique(列名1,列名2,列名3...)
create table worker8(
id number(4),
name varchar2(50),
password varchar2(50),
age number(3)
)
alter table worker8
add constraint uq_name_pwd_w8
unique(name,password)
案例:创建一张book2表,id number(4),bname varchar2(50),author varchar2(50),pub varchar2(50),numinput number(10) 修改book2表的时候,设置主键约束pk_id_bname_b2修饰 id和bname,设计唯一约束uq_author_pub_b2修饰author和pub
create table book2(
id number(4),
bname varchar2(50),
author varchar2(50),
pub varchar2(50),
numinput number(10)
)
alter table book2
add constraint pk_id_bname_b2
primary key(id,bname)
alter table book2
add constraint uq_author_pub_b2
unique(author,pub)
2) 删除唯一约束:
alter table 表名 drop constraint 约束名
案例:删除worker7中唯一约束UQ_NAME_W7
alter table worker7 drop constraint UQ_NAME_W7
案例:删除worker8中唯一约束UQ_NAME_PWD_W8
alter table worker8 drop constraint uq_name_pwd_w8
3) 主键约束和唯一约束有什么区别?
a)一张表中只能定义一个主键约束,但可以定义多个唯一约束。
b)对于指定为主键所修饰的一个列或者多个列的组合值,其中任何一个列都不能出现空值,而对于唯一约束修饰的列,该列的列值可以为空。
2 having子句:对分组以后的数据再次进行过滤,经常跟聚合函数结合使用。
1)格式:
select 列名/聚合函数
from 表名
where 条件 :对整张表的数据进行过滤
group by 列名
having 子句 :对分组以后的数据再次进行过滤
order by 列名/别名/聚合函数 asc/desc
2)执行的顺序:首先执行where条件,对表中所有的数据进行过滤,然后执行group by,根据某一个列把过滤后数据分成几组,对每一个组的数据使用聚合函数,之后使用having子句对分组以后的数据再次进行过滤,最后执行order by进行排序。
3)having子句经常跟聚合函数结合使用。
案例:查询emp表中,每个部门的平均工资高于2000的部门的编号,部门人数,平均工资
select deptno,count(*),avg(sal)
from emp
group by deptno
having avg(sal) > 2000
案例:查询emp表中员工的姓名中不是以'K'开头的信息,每个部门最低工资高于1000的部门编号,工资总和,平均工资以及最低工资,最后根据平均工资进行升序排列
select deptno,sum(sal),avg(sal),min(sal)
from emp
where ename not like 'K%'
group by deptno
having min(sal)>1000
order by avg(sal) asc
案例:查询emp表中部门编号是10,30号部门的员工,每个职业的最高工资低于5000的职业名称,人数,平均工资,最高工资最后根据人数进行升序排列,如果人数一致,根据最高工资进行降序排列。
select job,count(*),avg(sal),max(sal)
from emp
where deptno in(10,30)
group by job
having max(sal)<5000
order by count(*) asc,max(sal) desc
3 检查约束:用于限定某列的列值必须要满足某一个特定的条件,避免用户输入非法数据。
1)创建表的时候设置检查约束:
create table customer3(
cid number(4) primary key,
cname varchar2(50) unique,
sex char(3) check(sex in('男','女')),
age number(3),
email varchar2(50)
)
insert into customer3
values(1,'戚继光','男',33,'guang@126.com')
insert into customer3
values(2,'李清照','女',24,'zhao@163.com')
--反例
insert into customer3
values(3,'东方不败','中',32,'bai@126.com')
2)修改表的时候设置检查约束
alter table 表名
add constraint 约束名 check(约束条件)
案例:设置customer3表中age列上检查约束,要求age必须在1~120之间
alter table customer3
add constraint chk_age_cus3
check(age between 1 and 120)
insert into customer3
values(4,'苏东坡','男',42,'po@126.com')
insert into customer3
values(5,'张三丰','男',120,'feng@163.com')
insert into customer3
values(6,'张君宝','男',160,'jun@163.com')
案例:修改customer3表的时候,要求email列要包含@
alter table customer3
add constraint chk_email_cus3
check(email like '%@%')
--反例:
insert into customer3
values(7,'任我行','男',35,'xing126.com')
3)删除检查约束:
alter table 表名 drop constraint 约束名
案例:删除customer3中age和email列上的检查约束
alter table customer3 drop constraint chk_age_cus3
alter table customer3 drop constraint chk_email_cus3
4 常见日期处理函数:date
1) 常用的日期格式:
yyyy-mm-dd : 年月日
y: 年份 m:月份 d:几号
eg: 1999-12-15
yyyy-mm-dd hh24:mi:ss 年月日 时分秒
h: 小时 mi:分钟 s:秒
eg: 2001-11-15 16:17:19
2) Oracle默认的日期格式:
dd-Mon月-yy
eg: 2010-12-16 16-12月-10
3) sysdate: 当前的系统时间
select sysdate from dual
sysdate:以天为单位
案例:查询昨天,今天,明天
select sysdate-1,sysdate,sysdate+1 from dual
4) to_char(日期数据,'日期格式'):把日期类型数据(date)按照我们指定的格式转换为char类型字符进行显示。
案例:查询当前的系统时间,按照yyyy-mm-dd格式显示
select sysdate,to_char(sysdate,'yyyy-mm-dd') from dual
案例:查询当前的系统时间,按照yyyy-mm-dd hh24:mi:ss格式来显示
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
from dual
案例:查询emp表中员工的编号,姓名,职位,入职时间,要求入职时间使用yyyy-mm-dd hh24:mi:ss格式显示
select empno,ename,job,hiredate,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss')
from emp
5) 使用to_char()函数获得日期的某一个部分
select sysdate,to_char(sysdate,'mm') from dual
案例:查询emp表中12月份入职的员工的编号,姓名,职位,入职时间
select empno,ename,job,hiredate from emp
where to_char(hiredate,'mm') = '12'
6) to_date函数:把满足日期格式char类型数据转换为对应格式date类型的数据,经常用于插入操作。
to_date('日期字符串','日期格式')
create table worker9(
id number(4) primary key,
name varchar2(50),
hiredate date
)
insert into worker9
values(1,'李世民',
to_date('2012-12-21 12:19:21',
'yyyy-mm-dd hh24:mi:ss'))
select id,name,hiredate,
to_char(hiredate,'yyyy-mm-dd hh24:mi:ss')
from worker9
往worker9中插入3条数据
id name hiredate
2 刘备 2001-11-12 21:22:22
3 关羽 2012-12-10 10:15:21
4 张飞 2018-10-16 13:16:29
insert into worker9
values(2,'刘备',to_date('2001-11-12 21:22:22',
'YYYY-MM-DD HH24:MI:SS'))
insert into worker9
values(3,'关羽',to_date('2012-12-10 10:15:21',
'yyyy-mm-dd hh24:mi:ss'))
insert into worker9
values(4,'张飞',to_date('2018-10-16 13:16:29',
'yyyy-mm-dd hh24:mi:ss'))
7) 使用默认的日期格式插入date
insert into worker9
values(5,'曹操','12-12月-12')
缺点:不能插入时分秒
往worker9中插入2条数据
id name hiredate
6 夏侯惇 2016-10-15
7 典韦 2017-11-11
insert into worker9
values(6,'夏侯惇','15-10月-16')
insert into worker9
values(7,'典韦','11-11月-17')
8)months_between(d1,d2):求出日期d1和d2之间间隔了多少个月
案例:查询emp表中员工的姓名,职位,工资,入职时间以及工作了多少个月
select ename,job,sal,hiredate,
months_between(sysdate,hiredate)
from emp
9)add_months(d1,数字):在日期d1之后数字个月
select sysdate,add_months(sysdate,8) from dual
5 嵌套查询(子查询):在一条查询语句内部又包含了一条查询语句
案例:查询emp表中工资高于平均工资的员工的编号,姓名,职位,工资
1)求出emp表中平均工资
select avg(sal) from emp --2077
2)高于平均工资的员工信息
select empno,ename,job,sal from emp
where sal > (
select avg(sal) from emp
)
案例:查询emp表中工资高于30号部门最高工资的所有员工的编号,姓名,职位,工资,以及入职时间
1)查询30号部门最高工资
select max(sal) from emp
where deptno = 30
2)高于30号部门最高工资的员工信息
select empno,ename,job,sal,hiredate
from emp
where sal > (
select max(sal) from emp where deptno = 30
)
案例:查询KING所在部门的编号,名称,地址
分析:
KING ---》deptno ---》dept
1)查询KING所在部门的编号
select deptno from emp
where ename = 'KING'
2)根据编号查询该部门下的信息
select * from dept
where deptno = (
select deptno from emp
where ename = 'KING'
)
案例:查询部门名称是ACCOUNTING下,所有员工的信息
1)查询ACCOUNTING部门的编号
select deptno from dept
where dname = 'ACCOUNTING'
2)根据部门编号查询该部门下员工的信息
select * from emp
where deptno = (
select deptno from dept
where dname = 'ACCOUNTING'
)
案例:查询跟JONES在同一个部门下的所有员工的信息
1)根据JONES查询该员工所在部门的编号
select deptno from emp
where ename = 'JONES'
2)根据部门编号查询该部门下所有员工的信息
select * from emp
where deptno = (
select deptno from emp
where ename = 'JONES'
)
案例:查询跟JONES在同一个部门下的所有员工的信息,不包含JONES
select * from emp
where deptno = (
select deptno from emp
where ename = 'JONES'
) and ename <> 'JONES'
数据库——Oracle(5)的更多相关文章
- Oracle实例和Oracle数据库(Oracle体系结构)
--========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...
- 【转载】Oracle实例和Oracle数据库(Oracle体系结构)
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:Leshami 原文地址:http://blog.csdn.net/ ...
- Oracle 数据库(oracle Database)Select 多表关联查询方式
Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...
- spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置
spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...
- 各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包----转
在开发基于数据库的应用系统时,需要在项目中进行数据源的配置来为数据 库的操作取得数据库连接.配置不同数据库的数据源的方法大体上都是相同的,不同的只是不同数据库的JDBC驱动类和连接URL以及相应的数据 ...
- JDBC(用Eclipse操作数据库Oracle)的基础操作集合
JDBC: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...
- [数据库]Oracle和mysql中的分页总结
Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...
- Ubuntu16.04下安装数据库oracle客户端
在Ubuntu16.04下安装oracle数据库客户端,使Django项目连接到远程Oracle数据库. 1.下载oracle客户端安装包: 进入官网http://www.oracle.com/tec ...
- 不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句
在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn fro ...
- SpringAccess数据库(oracle)构造
陈科朝:http://blog.csdn.net/u013474104/article/details/44279309 ================ 1.spring 对数据库訪问的支持 当我们 ...
随机推荐
- 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
GPGPU OpenCL/CUDA 高性能编程的10大注意事项 1.展开循环 如果提前知道了循环的次数,可以进行循环展开,这样省去了循环条件的比较次数.但是同时也不能使得kernel代码太大. 循环展 ...
- linux ctrl 快捷键
ctrl+a: 光标跳到行首. ctrl+b: 光标左移一个字母. ctrl+c: 杀死当前进程. ctrl+d: 删除光标后一个字符或exit.logout. ctrl+e: 光标移到行尾. ctr ...
- My life
突然想到的好笑的: 1. 世界上一共有10种人,一种是男人,另一种是女人 2. 吐槽一个网站的域名: 你这网站域名取得,跟色情网站似的 明知这是一场意外,你要不要来,明知这是一场重伤害,你会不会来: ...
- 【Python】【demo实验24】【练习实例】【打印图样】
原题: 打印出如下图案(菱形): * *** ***** ******* ***** *** * 我的源码: #!/usr/bin/python # encoding=utf-8 # -*- codi ...
- Oracle创建表空间、创建用户,给用户分配表空间以及可操作权限
创建表空间一共可分为四个步骤 具体脚本如下: 第1步:创建临时表空间 create temporary tablespace yd_temp tempfile 'D:\oracledata ...
- L1-064 估值一亿的AI核心代码 (20 分)
L1-064 估值一亿的AI核心代码 (20 分) 以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: ...
- k8s遇坑:The connection to the server k8s-api.virtual.local:6443 was refused - did you specify the right host or port?
k8s坑The connection to the server localhost:8080 was refused - did you specify the right host or port ...
- 搞懂Dubbo服务发布与服务注册
一.前言 本文讲服务发布与服务注册,服务提供者本地发布服务,然后向注册中心注册服务,将服务实现类以服务接口的形式提供出去,以便服务消费者从注册中心查阅并调用服务. 本文源码分析基于org.apache ...
- Maven maven-compiler-plugin 编译问题
问题:每次右键项目名-maven->update project 时候,项目jdk版本变了,变回1.5版本或者其他版本 解决方案一:修改maven的配置(解压目录的conf\setting.xm ...
- Eclipse连接数据库报错Local variable passwd defined in an enclosing scope must be final or effectively final
其实原因很简单,就是翻译的结果 匿名内部类和局部内部类只能引用外部的fianl变量 把变量变成fianl就行了 第一次知道啊 记小本本.......