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进程执行于通过网络连接的 ...
随机推荐
- 每日PA -2019年1月帖-每天更新
开篇 "每日PA"有什么亮点?
- kerberos环境下flume写hbase
直接看官网 http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#hbasesinks a1.channels = c1 ...
- python面试终极准备
简述Python的深浅拷贝? 将列表内的元素,根据位数合并成字典 lst = [1,2,4,8,16,32,64,128,256,512,1024,32769,65536,4294967296] # ...
- c++ 套路多
1. 浅拷贝带来的多次析构问题 参见:https://www.cnblogs.com/33debug/p/6657730.html 解决方案,深拷贝.强烈建议自定义拷贝构造函数为深拷贝,否则可能会给自 ...
- [代码]解析nodejs的require,吃豆人的故事
最近在项目中需要对nodejs的require关键字做解析,并且替换require里的路径.一开始我希望nodejs既然作为脚本语言,内核提供一个官方的parser库应该是一个稳定可靠又灵活的渠道,然 ...
- IDEA编译器的常用快捷键
今天想简单分享一下IDEA编译器的常用快捷键 1. -----------自动代码-------- 常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boi ...
- git的安装(和远程仓库建立连接)
安装完git 1.配置用户名和邮箱 $ git config --global user.name "My Name" $ git config --global user.em ...
- Jetson TX1安装pyTorch
https://www.ncnynl.com/archives/201705/1629.html https://blog.csdn.net/qq_36302589/article/details/8 ...
- [2019.03.22] Linux 学习心得(1)
本文关键词:shell 判断.grep正则表达式使用和贪婪匹配理解 1. if [ $a -le $b ], 一开始自学的时候我以为 [ ... ] 就是普通的,语法规定的结构,结果其实人家是&quo ...
- 使用systemback制作Ubuntu自定义系统镜像和系统备份(抄)
使用systemback制作Ubuntu自定义系统镜像和系统备份 2017年06月23日 16:17:51 BWBOT 阅读数:10714 原链接:https://community.bwbot. ...