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进程执行于通过网络连接的 ...
随机推荐
- c/c++ 继承与多态 文本查询的小例子(非智能指针版本)
问题:在上一篇继承与多态 文本查询的小例子(智能指针版本)在Query类里使用的是智能指针,只把智能指针换成普通的指针,并不添加拷贝构造方法,会发生什么呢? 执行时,代码崩掉. 分析下面一行代码: Q ...
- oracle知识点总结基础篇1
最近学习了Oracle,对学习内容挑干的进行总结! 1.准备工作:学习Oracle首先就是安装环境.我装的是oracle11g. 2.安装完成之后在dos窗口中,输入 sqlplus 再输入用户名和 ...
- python接口自动化-post请求2
一.headers 1.以禅道登录为例,模拟登陆,这里需添加请求头headers,可以用fiddler抓包 2.将请求头写成字典格式 h = { "Connection": &qu ...
- Java获取Linux和Window系统CPU、内存和磁盘总使用率的情况
这是一个工具类,获取的内容: CPU使用率:得到的是当前CPU的使用情况,这是算出的是两次500毫秒时间差的CPU使用率 内存使用率:[1 - 剩余的物理内存/(总的物理内存+虚拟内存) ] * 1 ...
- Redis进阶之使用Lua脚本开发
1.在Redis中使用Lua 在Redis中执行Lua脚本有两种方法:eval和evalsha. (1)eval eval 脚本内容 key个数 key列表 参数列表 下面例子使用了key列表和参数列 ...
- antd pro 分支
添加图片 这两种都可以 form表单问题 1 @Form.create() 这是绑定表单和组件,必须有,这样就能从this.props 中找到Form了 2 Select 要写initialValue ...
- 分布式存储ceph——(1)部署ceph
前言: 很多朋友想学ceph,但是开始ceph部署就让初学者举步为艰,ceph部署时由于国外源的问题(具体大家应该懂得),下载和安装软件便会卡住,停止不前.即使配置搭建了国内源后,执行ceph-dep ...
- this直接加在函数或者是 “原型”对象的区别
如果加在函数上,可以用函数直接调用,如果是加在原型对象时,那就的创建新对象,才能使用,最重要的是影响继承 直接加在函数上的,不能被新对象继承
- http请求方式和传递数据类型
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则. GET,通过请求URI得到资源 POST,用于添加新的内容 PUT用于修改某个内容 DELETE ...
- Python基础:数据类型-列表与元组(6)
Python中数据结构主要有序列.集合和字典. 1. 通用序列操作 Python内置了多种序列,其中最常用的两种:列表和元组.另一种重要的序列是字符串. 列表和元组的主要不同在于:列表是可以修改的,而 ...