Oracle学习——第四讲(增删改查)
Oracle 通用表
/*
emp 表 dept 部门表 salgrade 表
empno 员工编号 deptno 部门编号 grade 工资等级
ename 员工姓名 dname 部门名称 losal 工资范围下限
job 职位 loc 工作地点 hisal 工资范围上限
mgr 经理编号
hiredate 入职日期
sal 薪金
comm 奖金
deptno 部门编号
*/
Oracle实例演练
--组函数嵌套MAX MIN SUM AVG COUNT
--与单行函数不同,组函数只能嵌套两层
SELECT MAX(AVG(sal))
FROM emp
GROUP BY deptno
--显示经理号码和经理姓名,这个经理所管理员工的最低
--工资,没有经理的KING也要显示,不包括最低工资小于
--3000的,按最低工资由高到低排序。
SELECT e.mgr, m.ename, MIN(e.sal)
FROM emp e, emp m
WHERE e.mgr = m.empno(+)
GROUP BY e.mgr, m.ename
having MIN(e.sal) >= 3000
ORDER BY MIN(e.sal) DESC
--查询工资比Jones工资高的员工信息?
--括号里的子查询先执行
SELECT *
FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename = 'JONES')
--或者
SELECT e.ename, e.sal
FROM emp e, emp j
WHERE j.ename = 'JONES' AND e.sal > j.sal
--查询工资最低的员工姓名
SELECT ename
FROM emp
WHERE sal = (SELECT MIN(sal) FROM emp)
--子查询可以嵌套在
--WHERE子句,
--HAViNG子句,
--FROM子句中
--查询部门平均工资高于20部门平均工资的部门信息
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno
Having AVG(sal) > (SELECT AVG(sal) FROM emp WHERE deptno = 20)
--查询哪个部门的员工人数高于各部门平均人数。
SELECT deptno, COUNT(empno)
FROM emp
GROUP BY deptno
HAVING COUNT(empno) >(SELECT AVG(COUNT(empno)) FROM emp GROUP by deptno)
--查询部门人数大于所有部门平均人数的的部门
--编号,部门名称,部门人数
SELECT d.deptno, dname, COUNT(empno)
FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY d.deptno, dname
HAVING COUNT(empno) > (SELECT AVG(COUNT(empno)) FROM emp GROUP BY deptno)
--多行子查询
--IN
--ANY
--ALL
--查询是经理的员工姓名
SELECT *
FROM emp
WHERE empno IN(SELECT mgr FROM emp)
--查询不是经理的员工姓名
--空值不能用于IN语句中
SELECT *
FROM emp
WHERE empno NOT IN(SELECT mgr FROM emp)
SELECT *
FROM emp
WHERE empno NOT IN(SELECT DISTINCT mgr FROM emp)
SELECT *
FROM emp
WHERE empno NOT IN(7839, NULL, 7782, 7689, 7902)
SELECT *
FROM emp
WHERE empno <>7839 AND empno <> NULL....
--正确,去空值
SELECT *
FROM emp
WHERE empno NOT IN(SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL)
--ANY:表示和子查询的任意一行结果进行比较,有一个满足条件即可。
--< ANY:表示小于子查询结果集中的任意一个,即小于最
-- 大值就可以。
--• > ANY:表示大于子查询结果集中的任意一个,即大于最
--小值就可以。
--• = ANY:表示等于子查询结果中的任意一个,即等于谁都
--可以,相当于IN。
--工资比10部门任意一名员工工资高的员工编号,姓名,职位,工资。
SELECT ename, empno, job, sal
FROM emp
WHERE sal > ANY(SELECT sal FROM emp WHERE deptno = 10)
--ALL:表示和子查询的所有行结果进行比较,每一行必须都
--满足条件。
--• < ALL:表示小于子查询结果集中的所有行,即小于最小值。
--• > ALL:表示大于子查询结果集中的所有行,即大于最大值。
--• = ALL :表示等于子查询结果集中的所有行,即等于所有值,通常无意义。
--工资比10部门所有员工工资高的员工编号,姓名,职位,工资。
SELECT empno, ename,job, sal
FROM emp
WHERE sal > ALL (SELECT sal FROM emp WHERE deptno= 10)
--多列子查询(通常用IN完成)
--查询出和1981年入职的任意一个员工的部门和
--职位完全相同员工姓名、部门、职位、入职日
--期,不包括1981年入职员工。
--(deptno, job)--多列子查询
SELECT ename, deptno, job, hiredate
FROM emp
WHERE (deptno, job) IN(SELECT deptno, job FROM emp WHERE to_char(hiredate,'YYYY') = '1981')
AND to_char(hiredate, 'YYYY') <>'1981'
--区分下面(错误XXX)
SELECT ename, deptno, job, hiredate
FROM emp
WHERE deptno IN(SELECT deptno FROM emp WHERE to_char(hiredate,'YYYY') = '1981')
AND job IN(SELECT job FROM emp WHERE to_char(hiredate,'YYYY') = '1981')
AND to_char(hiredate, 'YYYY') <>'1981'
--查询出和1981年入职的任意一个员工的部门或
--职位相同员工姓名、部门、职位、入职日期,不
--包括1981年入职员工
SELECT ename deptno job hiredate
FROM emp
WHERE (deptno IN (SELECT deptno
FROM emp
WHERE to_char(hiredate,'YYYY')='1981')
OR job IN (SELECT job
FROM emp
WHERE to_char(hiredate,'YYYY')='1981'))
AND to_char(hiredate,'YYYY')<>'1981');
--FROM子句中使用子查询
-- 查询比自己部门平均工资高的员工姓名,工资,部门编号,部门平均工资
SELECT ename, sal, e.deptno, avgsal
FROM emp e, (SELECT deptno, AVG(sal) avgsal
FROM emp
GROUP by deptno) f
WHERE e.deptno = f.deptno
AND sal > avgsal
--数据操作与事务控制(增,删,改)
--向表中插入一条数据
INSERT INTO emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (9521, '华1', '1童', 7781, '01-5月-1981',1901, 5, 20)
--列的顺序要求与插入的列的数据顺序一致
INSERT INTO emp
VALUES (9521, '华1', '1童', 7781, '01-5月-1981',1901, 5, 20)
--一次性插入多行数据
--创建一个和emp相同的表emp1
CREATE TABLE emp1
AS
SELECT * FROM emp
--创建一个空表
CREATE TABLE emp2
AS
SELECT * FROM emp where 1 = 0
--向表2中完全插入表1
INSERT INTO emp2
SELECT * FROM emp where deptno = 10
--只插入两列
INSERT INTO emp2(empno, ename)
SELECT empno, ename FROM emp where deptno = 20
--修改数据
--update
--SET:进行修改
--WHERE:条件
UPDATE emp2
SET deptno = 20
where deptno is NULL
--修改工资
UPDATE emp2
SET sal = 500
where deptno= 20
--工资涨500
UPDATE emp2
SET sal = sal + 500
--将部门编号等于20的工资全部清空
UPDATE emp2
SET sal = NULL
UPdate emp2
set sal = sal +(SELECT AVG(sal) FROM emp2)
WHERE deptno = 20
SELECT * fROM emp2
--删除数据
delete FROM emp2
WHERE deptno = 20
--删除工作为clerk
delete FROM emp2
WHERE job = 'CLERK'
---事务处理语言(隐式提交)
--commit:提交(增,删,改:全部生效,即保存)
--ROLLBACK: 撤销 增,删,改操作
--一旦提交commit后,rollback不能生效
--创建表
--create table
CREATE table student(
学号 NUMBER(10),
姓名 VARCHAR2(20), --不超过10个汉字
性别 CHAR(2) DEFAULT '男', --默认值:男
身份证号 char(18),
出生日期 date
)
--向表中插入数据
INSERT INTO student(学号, 姓名) VALUES(9527, '华安')
--利用子查询的方式创建表
CREATE TABLE emp3
AS
SELECT empno, ename FROM emp
CREATE TABLE emp4
AS
SELECT * FROM emp
--创建一个空表
CREATE TABLE emp5
AS
SELECT * FROM emp WHERE 1 = 0
--建两列数据
CREATE TABLE emp6
AS
SELECT ename 姓名, empno 编号 FROM emp
--等同于
Create TABLE emp7(姓名,编号)
AS
SELECT ename 姓名, empno 编号 FROM emp
CREATE TABLE emp9(编号, 平均工资)
AS
SELECT deptno, AVG(sal) FROM emp GROUP BY deptno
SELECT *
FROM emp4
--修改表
--ALTER TABLE
--ADD添加数据
ALTER TABLE emp4 ADD(学号 NUMBER(10), 姓名 VARCHAR2(20))
--modify修改数据
--(修改学号长度)
ALTER TABLE emp4 MODIFY(学号 NUMBER(11))
--(修改学号默认值)
ALTER TABLE emp4 MODIFY(学号 DEFAULT 1234567)
--插入数据(提交)
INSERT INTO emp4(empno) VALUES(9988)
--删除数据
ALTER TABLE emp4 DROP(学号,姓名)
--删除表
DROP TABLE emp4
Oracle学习——第四讲(增删改查)相关推荐
- oracle 赋予dorp,oracle表空间(tablespace)的增删改查(create/drop/rename,move/select)
oracle表空间(tablespace)的增删改查(create/drop/rename,move/select) 2013-03-05 oracle维护中经常会对表空间进行操作,整理了一下tabl ...
- 无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口
无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口 回顾 通过之前一篇文章 无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接 ...
- mysql学习总结-初识+数据管理+增删改查+常用函数+事务理解+数据库设计+JDBC引入
1.初识MySQL 1.1数据库的定义 数据库(DataBase,简称DB),是一个按数据结构来存储和管理数据的计算机软件系统.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制 ...
- SQLite 入门教程(四)增删改查,有讲究
增删改查操作,其中增删改操作被称为数据操作语言 DML,相对来说简单一点. 查操作相对来说复杂一点,涉及到很多子句,所以这篇先讲增删改操作,以例子为主,后面再讲查操作. 一.插入数据 INSERT I ...
- asp.net初学习实现简单的增删改查功能
在学习中发现网页模板可以大大节约重复的页面代码,同时对于WebSite开发的程序在不同的页面直接调用已写好的代码既不方面,只是作为代码量不大的程序进行开发还是比较方便. get和post的区别get是 ...
- (day2-spring和mybatis学习)-->重点增删改查
在how2j上学SSM,整理一下笔记 Spring是一个基于IOC和AOP的结构J2EE系统的框架 (1).IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是 ...
- solidity学习一(数据类型、增删改查合约)
abi-to-sol在线转换 https://gnidan.github.io/abi-to-sol/ 发布合约 https://ropsten.etherscan.io/verifyContract ...
- python学习笔记 day04 列表增删改查
写了一个python文件,想在终端中运行:windows+r(或者cmd)输入python+想要运行的py文件所在的目录 即可. pycharm的安装 参考博客: https://www.jiansh ...
- mybaits四-1:增删改查的实现
定义接口类: package com.atChina.dao;import com.atChina.bean.Employee;public interface EmployeeMapper {pub ...
- oracle学习笔记系列------oracle 基本操作之表的增删改查
--创建一个表 CREATE TABLE employee_souvc(id NUMBER(4),name VARCHAR2(20),gender CHAR(1),birth DATE,salary ...
最新文章
- day02 cssjs 基础
- #define barrier() __asm__ __volatile__(: : :memory) 中的memory是gcc的东西
- 没学过python、但是还是有公司要-想转行,是要入坑Python还是Java?这问题还用问?...
- Servlet架构初解析
- 数据仓库、数据湖、流批一体,终于有大神讲清楚了!
- OSPF的LSA类型~
- html 图片防盗链,【反防盗链】介绍一个对付图片防盗链的方法
- mysql中视图和表的区别及联系_MySQL中Update、select联用操作单表、多表,及视图与临时表的区别...
- sap模块有哪些_SAP那些事-实战篇-21-关于COPA模块的总结
- (python)7-6 sdut-数制转换
- php判断版本号大小,通用javascript代码判断版本号是否在版本范围之间_javascript技巧...
- 自建服务器调试,Mac简单实现服务器搭建(本地)与iOS调试
- codeforce Gym 101102A Coins (01背包变形)
- 【论文】NAACL2019 抽取式摘要之 SUMO
- android listview去掉分割线
- 微波烹调,营养损失多or少?
- import/export win7中电源计划
- jep-java-4.0-trial.jar 下载
- 计算机科学导论实验报告,上海电力学院计算机导论实验报告.docx
- .NET平台机器学习资源汇总,有你想要的么?(转)
热门文章
- 10月18日~23日 产品
- js自定义打印网页内容
- python脚本批量更改图片大小
- Kubernetes K8s 结合国内外文章解决 The kubelet is not running
- 使用Excel校验VIN码(车架号)第九位
- android插件实现打印机,Android USB调用打印机(针式打印机)
- 同济大学计算机科学与技术系,同济大学计算机科学与技术系简介_跨考网
- matlab2013a编译器,如何MATLAB2013a在win8-64位系统上能装mex编译器
- Word修改默认英文字体为Times New Roman
- RAID(独立磁盘冗余阵列)