Oracle DB Day03(SQL)
--day03
--创建一个包含下面信息的表,并添加一些记录待用
--EMPLOYEE_ID NOT NULL NUMBER(6)
--FIRST_NAME VARCHAR2(20)
--LAST_NAME NOT NULL VARCHAR2(25)
--EMAIL NOT NULL VARCHAR2(25)
--PHONE_NUMBER VARCHAR2(20)
--HIRE_DATE NOT NULL DATE
--JOB_ID NOT NULL VARCHAR2(10)
--SALARY NUMBER(8,2)
--COMMISSION_PCT NUMBER(2,2)
--MANAGER_ID NUMBER(6)
--DEPARTMENT_ID NUMBER(4) SELECT * FROM employees;
DESC employees
--AS 可以改变标题样式,相当于使用别名
SELECT employee_id as id,CONCAT(first_name,last_name) as name from employees --WHERE 限制查询条件,数字可以不用单引号,字符串和日期等都需要单引号
--查询条件可以使用若是苏子可以使用四则运算,日期可以叫做加减操作表示加减天数
select *from employees
where salary = 9000;
-- WHERE 条件中可以使用< , > , <= , >= , = , !=,
-- AND且 ,OR或,可有多个条件
--LIKE模糊查询
SELECT *FROM EMPLOYEES
WHERE SALARY<9000;
SELECT *FROM employees
WHERE SALARY !=9000;
SELECT *FROM EMPLOYEES
WHERE SALARY<9000 AND HIRE_DATE<'1997-06-21';
--LIKE模糊查询 %:表示0到多个字符;_:表示单个字符
SELECT *FROM employees
WHERE first_name LIKE 'Al%y%';
--IN ,NOT IN
SELECT *FROM EMPLOYEES
WHERE SALARY IN(9000,8000) ;--相当于或的作用,不表示范围,选出salary为9000和8000的
SELECT *FROM EMPLOYEES
WHERE SALARY NOT IN(9000,8000); --BETWEEN...AND...筛选符合某个取值范围内的数据
SELECT *FROM EMPLOYEES
WHERE SALARY BETWEEN 8000 AND 9000; --IS NULL, IS NOT NULL
SELECT *FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL AND SALARY BETWEEN 8000 AND 9000; SELECT *FROM EMPLOYEES
WHERE COMMISSION_PCT IS NOT NULL AND SALARY BETWEEN 8000 AND 9000; --ANY,ALL
-- >ANY大于最小 , <ANY 小于最大
-- >ALL 大于最大, <ALL 小于最小
SELECT *FROM EMPLOYEES
WHERE SALARY >ANY(3500,4000,4500); SELECT *FROM EMPLOYEES
WHERE SALARY >ALL(3500,4000,9000); --DISTINCT 过滤掉重复值
SELECT DISTINCT SALARY FROM EMPLOYEES --ORDER BY 排序;默认是asc升序; ASC升序; DESC降序
SELECT *FROM EMPLOYEES
WHERE SALARY >ALL(3500,4000,9000)
ORDER BY SALARY DESC;
--多条件排序,若第一列数据形同,再以第二列排序,以此类推,每一列都需要设置排序
SELECT *FROM EMPLOYEES
WHERE SALARY >ALL(3500,4000,9000)
ORDER BY SALARY ASC,first_name ASC; --聚合函数分组函数/多行函数/集合函数 :主要完成一些数据统计等工作,例如算平均值、统计部门人数等
--统计最大值
SELECT MAX(SALARY) max_sal,MIN(salary) min_sal FROM employees
--AVG 用来计算表达式的平均值 ;SUM 用来计算和值
SELECT AVG(SALARY) avg_sal,SUM(SALARY) sum_sal FROM EMPLOYEES;
--统计记录条数
SELECT COUNT(SALARY) TOTAL_NUM FROM EMPLOYEES
WHERE SALARY >8000
--聚合函数忽略NULL值,当某一列包含NULL值时,比较下面两条语句
SELECT AVG(commission_pct) avg_commission_pct FROM employees; --null值会忽略
SELECT AVG(NVL(commission_pct,0)) avg_commission_pct FROM employees; --把null值转换成了0计算 --GROUP BY 把记录划分若干小组
--HAVING 对分组后的数据进一步限制
SELECT salary ,MAX(salary) max_sal FROM employees
GROUP BY salary
HAVING MAX(salary)>8000
ORDER BY salary; --查询语句的执行顺序,可以提高查询效率
--FROM:执行顺序为 从后往前,从右往左,数据量较少的表尽量放在后面;
--WHERE:执行顺序 自下而上,从右往左,最大的过滤条件写在最后面;
--GROUP BY:执行顺序从左往右分组
--HAVING :尽量避免使用,having会在检索后才对结果进行过滤,需要排序等操作,消耗资源;尽量把过滤条件放在WHERE中;
--SELECT: 少用 * ,尽量用字段名称,消耗时间;
--ORDER BY :执行顺序 从左往右,消耗资源 --关联查询 :
--实际应用中根据需要,一般需要查询两个或两个以上的表或视图,这种查询叫做 连接查询;
--连接查询一般建立在存在互相关系的的父子表之间; --笛卡尔积:关联操作的每一个表的每一行都和其他表的每一行组合;
--例如一个表X条数据,另一个表Y条数据,则两个表的查询结果会返回X*Y条数据; --等值连接 --创建连个表待用
CREATE TABLE animal(
name VARCHAR2(20),
leg NUMBER(2)
)
INSERT INTO animal(name,leg)
VALUES('CAT',4);
INSERT INTO animal(name,leg)
VALUES('MONKEY',4);
INSERT INTO animal(name,leg)
VALUES('MEN',2);
ALTER TABLE animal ADD( id NUMBER(2))
INSERT INTO animal(name,leg,id)
VALUES('MEN',2,3);
DELETE FROM animal WHERE NAME = 'MEN' AND ID IS NULL;
UPDATE animal SET ID=1 WHERE NAME = 'CAT'
UPDATE animal SET ID=2 WHERE NAME = 'MONKEY'
SELECT *FROM animal; CREATE TABLE local(
place VARCHAR2(20)
)
INSERT INTO local(place)
VALUES('南京');
INSERT INTO local(place)
VALUES('四川');
INSERT INTO local(place)
VALUES('安徽');
ALTER TABLE local ADD(ID NUMBER(2))
UPDATE local SET ID = 1 WHERE place ='南京';
UPDATE local SET ID = 2 WHERE place ='四川';
SELECT *FROM local; --内连接:返回满足连接条件的数据记录,不满足关联条件的记录都是无法在关联查询中查出来的
--用 join ... on 多张表时条理比较清楚
SELECT animal.name,local.place FROM animal ,local;
--出现笛卡尔集,通常没什么意义,数量大时还容易溢出,大部分需要添加关联条件
--要避免笛卡尔集,n张表就需要n-1个连接条件
SELECT ani.name,loc.place FROM animal ani ,local loc; --给表添加别名可以简化SELECT语句复杂度
SELECT ani.name,loc.place FROM animal ani ,local loc WHERE ani.id=loc.ID;
SELECT ani.name,loc.place FROM animal ani JOIN local loc ON (ani.ID =loc.id);
--左外连接、右外连接一样的效果,那边有+号那边补null
SELECT ani.name,loc.place FROM animal ani JOIN local loc ON ani.ID(+) =loc.id;
SELECT ani.name,loc.place FROM animal ani JOIN local loc ON ani.ID =loc.id(+); --外连接:不仅能返回满足连接条件的记录,还将返回不满足条件的记录;不能两边都有+号
--左外连接join左侧表示驱动表(所有数据都被查出来),那么当表中的某条记录不满足连接条件时来自右侧表中的字段全部填null
SELECT ani.name,loc.place FROM animal ani LEFT OUTER JOIN local loc ON (ani.ID =loc.id);
--右外连接join右侧表示驱动表(所有数据都被查出来),那么当表中的某条记录不满足连接条件时来自左侧表中的字段全部填null
SELECT ani.name,loc.place FROM animal ani RIGHT OUTER JOIN local loc ON (ani.ID =loc.id); --全外连接:除了返回满足连接条件的记录,还会返回不满足条件的所有其他行,是 左外连接和右外连接 查询结果的综合
SELECT ani.name,loc.place FROM animal ani FULL OUTER JOIN local loc ON (ani.ID =loc.id); --自连接是一种特殊的连接查询,数据的来源是一个表,即关联关系来自单表中的多个列;处理同类型数据又存在上下界关系的树状结构
--自连接简单来说就是把一张表当成两张表看待就可以了
--自连接是通过将表用别名虚拟成两个表的方式实现,可以是等值或不等值连接
--例如超市里的商品,只有一个表,可能商品之间有关系,这时候用自连接比较方便
--再如一张员工信息表,里面可以体现员工上下级关系的表就可以用自连接
Oracle DB Day03(SQL)的更多相关文章
- Oracle DB Day01(SQL)
--时间为什么不是现在呢? --设置时区和显示时间 ALTER DATABASE SET TIME_ZONE='+08:00' select to_char(current_timestamp at ...
- Oracle DB Day02(SQL)
--数据库下表一般都是从1开始,例如字符串等 SELECT *FROM employees --字符串连接CONCAT() ,CONCAT(CONCAT(EMPLOYEE_ID,','),SALARY ...
- Oracle DB 总结(SQL)
--SQL结构查询语言 数据库定义语言(DDL)用于建立.删除和修改数据库对象 CREATE ALTER DROP TRUNCATE 数据库操纵语言(DML)用于改变数据库表中的数据 INSERT U ...
- 在silverlight中通过WCF连接ORACLE DB数据库(转)
转自 http://hi.baidu.com/qianlihanse/item/458aa7c8d93d4e0cac092ff4 这不是我的原创,我也是上网学习的~ How to get data f ...
- Oracle DB 存储增强
• 设置Automatic Storage Management (ASM) 快速镜像 再同步 • 使用ASM 首选镜像读取 • 了解可伸缩性和性能增强 • 设置ASM 磁盘组属性 • 使用SYSA ...
- Oracle DB 使用调度程序自动执行任务
• 使用调度程序来简化管理任务 • 创建作业.程序和调度 • 监视作业执行 • 使用基于时间或基于事件的调度来执行调度程序作业 • 描述窗口.窗口组.作业类和使用者组的用途 • 使用电子邮件通知 • ...
- Oracle DB 管理数据库的空间
• 描述4 KB 扇区磁盘的概念及使用 • 使用可移动表空间 • 描述可移动表空间的概念 数据库存储 数据库存储 数据库包括物理结构和逻辑结构.由于物理结构和逻辑结构是分开的,因此管理数据的物 理存储 ...
- Oracle DB 备份和恢复的概念
• 确定Oracle DB 中可能发生的故障类型 • 说明优化实例恢复的方法 • 说明检查点.重做日志文件和归档日志文件的重要性 • 配置快速恢复区 • 配置ARCHIVELOG模式 部分工作内容 ...
- 用户与 Oracle DB 交互具体过程
与 Oracle DB 交互 以下的演示样例从最主要的层面描写叙述 Oracle DB 操作.该演示样例说明了一种 Oracle DB 配置,在该配置中,用户和关联server进程执行于通过网络连接的 ...
随机推荐
- SQL SERVER 临时数据库 tempdb 迁移或增加文件
临时数据库TempDB 虽然是临时库,但对整个数据库系统性能却起到很关键的作用:平时用到的中间数据集会暂时保存到TempDB 中,比如:临时表,排序,临时统计信息,一些中间结果数据,索引重建 等.我们 ...
- 任意N个不同数的逆序对平均值
在学习数据结构的时候看到了以下定理: 但是老师并没有解释,本着钻研的精神决定搞清楚为什么是这个数. 在百度 google一番之后并没有找到,决定自己试着证明. 最开始走了一些弯路,但突然灵光一闪很容易 ...
- serialize()与serializeArray()
1.了解serialize()与serializeArray() serialize()序列化表单元素,用于ajax请求, serializeArray()序列化表单元素,类似于serialize,但 ...
- 浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
- 说说我心中的Linux系统
我不知道在阅读此篇文章的你,是一个什么样的人,或许你只是偶然看到此篇文章的路人,或许是对linux有兴趣但没接触过linux的圈外人,或许是已经入行没多久的菜鸟,或许是喜欢linux却学习不下去预备放 ...
- 使用队列实现栈(2)(Java)
class MyStack { private Queue q1; private Queue q2; public MyStack(int size) { this.q1 = new Queue(s ...
- jmeter学习记录--05--Beanshell2
学习beanshell时有不少的例子.遇到不少问题.在此记录下. 测试实例列表 A1:使用Beanshell请求作为测试请求 一个打包的Jar包,直接对其内的方法进行测试. 第一步:将接口jar包要放 ...
- git常用命令一、git cherry-pick
在自己的分支查看想要合并的节点的commit id : Git log —oneline -3 //查看最新的三个提交 commit id 切换到总分支: Git fetch Git pull G ...
- JS继承以及继承的几种实现方式总结
传统面向对象语言:继承是类与类之间的关系. 而在js中由于es6之前没有类的概念,所以继承是对象与对象之间的关系. 在js中,继承就是指使一个对象有权去访问另一个对象的能力. 比如:比如对象a能够访问 ...
- feign多文件上传
参考地址:https://www.cnblogs.com/standup/p/9090113.html https://www.cnblogs.com/standup/p/9093753.html 1 ...