--SQL结构查询语言
1 数据库定义语言(DDL)用于建立、删除和修改数据库对象
CREATE
ALTER
DROP
TRUNCATE
2 数据库操纵语言(DML)用于改变数据库表中的数据
INSERT
UPDATE
DELETE
3 事务控制语言(TCL)用来维护数据一致性的语言
COMMIT
ROLLBACK
SAVEPOINT
4 数据查询语言(DQL)用来查询索要查询的数据
SELECT
5 数据库控制语言(DCL)Data Control Language 用于执行权限的授予和收回操作
GRANT 授予,用于给用户和角色授予权限
REVOKE 用于收回用户或角色已有的权限
CREATE USER 创建用户
--------------------------------------------------------------------------
--创建表
CREATE TABLE TABLE_NAME(
id NUMBER(4) NOT NULL,
name VARCHAR2(40),
gender VARCHAR2(1) DEFAULT 'm'
);
--查看表结构
DESC table_name;
--修改表名称
RENAME old_name TO new_name;
--增加列
ALTER TABLE TABLE_NAME ADD( hiredate DATE DEFAULT sysdate );
--删除列
ALTER TABLE TABLE_NAME DROP (ID);
--修改列
ALTER TABLE TABLE_NAME MODIFY( ); --DML
--插入记录
INSERT INTO TABLE_NAME (column1,column2 ) VALUES(value1,value2 );
--更新表中的记录
UPDATE TABLE_NAME SET column1 = value1,column2 = value2 WHERE condition;
--删除记录
DELETE FROM TABLE_NAME WHERE condition;
TRUNCATE TABLE TABLE_NAME; --删除全表记录,变成空表;针对数据删除,立即生效,无法回退, --字符串操作
CHAR 浪费空间,节省时间
VARCHAR2 浪费时间,节省空间
LONG varchar2加长版,存储变长字符串,最多可达2GB;每个表只能有一个;不能作为主键;不能建立索引;不能出现在查询条件中...
CLOB 存储定长或变长字符串,最多可达4GB
一般建议用 CLOB 替代 LONG 类型;
--连接字符串 CONCAT() ||
SELEcT CONCAT('Hello','World!') FROM dual;
SELECT 'Hello' || 'World' from dual;
--LENGTH(CHAR)
SELECT NAME,LEGTH(NAME) FROM TABLE_NAME; UPPER 将字符串转换成大写
LOWER 将字符串转换成小写
INITCAP 将字符串转换成每个单词首字母大写,其余小写
select LOWER('HELLO WORLD') FROM DUAL; --截去子串
TRIM(c2 from c1) 从c1的前后截去c2
LTRIM(C1,C2) 从c1的左边截去c2
RTRIM(c1,c2)从c1的右边截去c2
如果没有c2就截去空壳 LPAD(CHAR1,N CHAR2) 左补位函数
RPAD(CHAR1,N,CHAR2) 右补位函数 SUBSTR(CHAR,START,END) 截取从start到end的字符串;start为负数则从尾部开始;如果没end则到尾部
INSTR(CHAR1,CHAR2[n[,m]]) 返回子串char2在char1中的位置;从n位开始搜索,没指定则从1开始;m指定子串m次出现,不指定则取值1 NUMBER(P,S)
ROUND(n[,m]) 用于四舍五入,m指定小数后第m位
TRUNC(n[,m]) 用于截取
MOD(m,n) 返回m除以n的余数
CEIL(n) 向上取整
FLOOR(n)向下取整 --日期类型
DATE
TIMESTAMP
SELECT sysdate from dual;
SELECT to_char(systimestamp,'YYYY-MM-dd HH24:mm:ss.ff DY DAY') from dual ;
--返回指日期的当月最后一天
SELECT LAST_DAY(sysDATE) FROM dual;
--指定日期加上i个月后的日期
SELECT ADD_MONTHS(sysdate,20*12) from dual;
--计算两个日期间之间有多少个月MONTHS_BETWEEN
SELECT MONTHS_BETWEEN('2019-12-25',sysdate) from dual;
--NEXT_DAY 返回日期数据的下一个周几,周日为1
SELECT NEXT_DAY(sysdate , 1) from dual; --LEAST、GREATEST 返回最小或最大值,比较的必须是同一类型
SELECT LEAST(34,555,7999,2,3344) from dual;
SELECT GREATEST(34,555,7999,2,3344) from dual;
--EXTRACT 从参数中提取date指定的年月日等
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; --数据库中任何数据类型都可以取null值
--null查询用 IS NULL
--NOT NULL非空约束 desc employees
select * from employees;
--NVL() 若第一参数为null,则取值第二参数
SELECT employee_id,first_name,salary,salary + NVL(commission_pct,10) as "sal" from employees;
--NVL2() 若第一参数为null,则取值第三参数;否则第一参数非null取值第二参数
SELECT employee_id,first_name,salary,salary + NVL2(commission_pct,10,14) as "sal2" from employees; --此处省略见 Oracle Day03(SQL) --子查询
子查询就是一个SQL语句(通常是SQL)中嵌套一个查询语句,嵌套的这个语句就是子查询语句
梓槎村也可以用于DML和DDL语句 --分页查询
ROWNUM --分支函数
--DECODE, 最后一个为default当前面都不满足则执行default;
SELECT NAME ,SAL(
DECODE(job,
'MANAGER',SAL*1.2,
'ANALYST',SAL*1.1,
'SALESMAN',SAL*1.5,
SAL)
) FROM TABLE_NAME
--CASE
SELECT NAME ,SAL(
CASE job WHEN 'MANAGER' THEN SAL*1.2
WHEN 'ANALYST' THEN SAL*1.1
WHEN 'SALESMAN' THEN SAL*1.5
ELSE SAL END bonus
)FROM TABLE_NAME; --排序函数
ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2 ) 排名连续且唯一,根据col1分组,在分组里根据col2排序
RANK() OVER ( PARTITION BY col1 ORDER BY col2) 排名可以相同有重复值,会产生不连续
DENSE_RANK() OVER(PARTITION BY col1 ORDER BY col2) 相同数据返回相同排名,且排名连续 --集合操作
UNION 并集,每个元素只有一个
UNION ALL 并集,有重复元素
INTERSECT 交集,获取两个结果集的交集
MINUS 差集 --高级分组函数
-- ROLLUP , CUBE , GROUPING SETS 运算符是 GROUP BY 子句的扩展,
GROUP BY ROLLUP(A,B,C) --按照阶梯状进行分组 n 个参数 ,则会有 n+1 次分组
GROUP BY CUBE (A,B,C) --按照n个参数,则会有 2^n 次分组
GROUP BY GROUPING SETS((A),(B)) --可以指定分组 --视图 分为:简单视图 和 复杂视图 ;select基于多个表叫做 连接视图
目的:1简化复杂查询,查询复用;2 限制数据访问
-- 简单视图:基于单表建立的,不包含任何函数运算和分组、表达式或分组函数,即简单取出基表记录不做任何改变
-- 对简单视图做的 insert、update、 delete 等操作就是就基表的操作
WITH CHECK OPTION 给视图添加约束,只能做视图可见的 insert、update、 delete 等操作
WITH READ ONLY 保证视图对应的基表数据不会被非法修改 -- 复杂函数:基于单表,但包含单行函数、表达式、分组函数或GROUP BY子句等
视图也叫做虚拟表,是一组数据的逻辑表示;
视图对应一条 SELECT 语句,结果集被赋予一个名字 ,即叫做视图;
视图本身不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也会随之改变;
CREATE VIEW v_TableName_ViewName AS SELECT SAL FROM TABLE_NAME;
DROP VIEW VIEW_NAME;
视图的可以向表一样查询结构等; --和视图相关的数据字典
-- USER_OBJECTS 查询所有视图名称
SELECT object_name FROM USER_OBJECTS
WHERE object_type = 'VIEW'; -- USER_VIEWS 查询指定视图
SELECT text FROM USER_VIEWS
WHERE view_name = 'v_EMP_10'; -- USER_UPDATE_COLUMNS
SELECT column_name,insertable,updatable,deletable
FROM user_updatable_columns
WHERE table_name = 'V_emp_10'; --序列 SEQUENCE 是一种用来生成唯一数字值的数据库对象
CREATE SEQUENCE sequence_name
[START WITH i] [INCREMENT BY j]
[MAXVALUE m] [NOMAXVALUE]
[MINVALUE n] [NOMINVALUE]
[CYCLE | NOCYCLE ] [ CACHE p | NOCACHE]
sequence_name 是序列名,序列的第一个值是 i ,步进 j ;如果j是正数,表示递增,如果是负数,表示递减;
序列可生成的最大值是m,最小值是n;
如果没有任何可选参数,序列的第一个值是1,步进是1;
CYCLE 表示在递增至最大值或递减至最小值之后是否继续生成序列号,默认值是NOCYCLE;
CACHE 用来指定先预定取P个数据在缓存中,以提高序列值得生成效率,默认值是20; CREATE SEQUENCE sequence_name
start with 100
increment by 10 NEXTVAL 获取序列的下个值,不能回退
CURRVAL 获取序列的当前值,必须限制性一个nextval才能用currval SELECT sequence_name.nextval FROM DUAL;
SELECT sequence_name.currval FROM DUAL; --s删除序列
DROP SEQUENCE sequence_name --索引
索引是一种允许直接访问数据表中某一数据行的树形结构,为了提高查询效率而引入,是独立于表的对象,
可以存放在表不同的表空间(TABLESPACE)中;
索引记录中存有 索引关键字 和 指向表中数据的指针;
小数据量不需要索引;
限制表上索引的数目,索引并不是越多越好
删除很少使用、不合理的索引;
不要在经常做DML操作的表上建立索引; 索引是数据库自行维护和使用,
--创建索引
CREATE INDEX index_name ON table(column1[,column2...])
--删除索引
DROP INDEX index_name;
--修改索引
ALTER INDEX index_name REBUILD; --约束:全称是约束条件,也称作完整性约束条件;
约束是在数据表上强制执行的一些数据消炎规则,当执行DML操作时必须遵循这些规则,若果不符合无法执行;
约束条件可以保证表中数据的完整性,保证数据间的商业逻辑;
非空约束 NOT NULL 简称 NN ,确保字段不为空值
--创建时添加约束
CREATE TABLE emp (
id number(6) NOT NULL,
hiredate DATE CONSTRAINT emp_hirdate_nn NOT NULL
);
--修改时添加约束
ALTER TABLE emp MODIFY (id NUMBER(6) NOT NULL); 唯一性约束 Unique 简称 UK,确保字段不出现重复值,null可以重复,同样可以创建和修改表是添加;
ALTER TABLE emp ADD CONSTRAINT emp Unique(name); 主键约束 Primary Key 简称 PK, NOT NULL 加上 Unique ;用法同上 外键约束 Foreign Key 简称 FK 检查约束 Check 简称 CK,用来强制在字段上的每个值都要满足Check中定义的条件
ALTER TABLE emp ADD CONSTRAINT emp_salary_check CHECK(salary >2000);

Oracle DB 总结(SQL)的更多相关文章

  1. Oracle DB Day01(SQL)

    --时间为什么不是现在呢? --设置时区和显示时间 ALTER DATABASE SET TIME_ZONE='+08:00' select to_char(current_timestamp at ...

  2. Oracle DB Day03(SQL)

    --day03 --创建一个包含下面信息的表,并添加一些记录待用 --EMPLOYEE_ID NOT NULL NUMBER(6) --FIRST_NAME VARCHAR2(20) --LAST_N ...

  3. Oracle DB Day02(SQL)

    --数据库下表一般都是从1开始,例如字符串等 SELECT *FROM employees --字符串连接CONCAT() ,CONCAT(CONCAT(EMPLOYEE_ID,','),SALARY ...

  4. 在silverlight中通过WCF连接ORACLE DB数据库(转)

    转自 http://hi.baidu.com/qianlihanse/item/458aa7c8d93d4e0cac092ff4 这不是我的原创,我也是上网学习的~ How to get data f ...

  5. Oracle DB 存储增强

    • 设置Automatic Storage Management (ASM)  快速镜像 再同步 • 使用ASM 首选镜像读取 • 了解可伸缩性和性能增强 • 设置ASM 磁盘组属性 • 使用SYSA ...

  6. Oracle DB 使用调度程序自动执行任务

    • 使用调度程序来简化管理任务 • 创建作业.程序和调度 • 监视作业执行 • 使用基于时间或基于事件的调度来执行调度程序作业 • 描述窗口.窗口组.作业类和使用者组的用途 • 使用电子邮件通知 • ...

  7. Oracle DB 管理数据库的空间

    • 描述4 KB 扇区磁盘的概念及使用 • 使用可移动表空间 • 描述可移动表空间的概念 数据库存储 数据库存储 数据库包括物理结构和逻辑结构.由于物理结构和逻辑结构是分开的,因此管理数据的物 理存储 ...

  8. Oracle DB 备份和恢复的概念

    • 确定Oracle DB 中可能发生的故障类型 • 说明优化实例恢复的方法 • 说明检查点.重做日志文件和归档日志文件的重要性 • 配置快速恢复区 • 配置ARCHIVELOG模式   部分工作内容 ...

  9. 用户与 Oracle DB 交互具体过程

    与 Oracle DB 交互 以下的演示样例从最主要的层面描写叙述 Oracle DB 操作.该演示样例说明了一种 Oracle DB 配置,在该配置中,用户和关联server进程执行于通过网络连接的 ...

  10. Test oracle db iops

    Today, i need to test one database's iops and do something for oracle db's io test. How to test the ...

随机推荐

  1. 如何将外部数据库 导入到系统的SQL中

    打开数据库sql管理  在数据库中新建查询  如何输入: exec sp_attach_db @dbname='YourDataBaseName', @filename1='mdf文件路径', @fi ...

  2. go打造以太坊合约测试框架

    传送门: 柏链项目学院 1 以太坊智能合约编译 以太坊智能合约编写使用solidity语言,一般情况下我们会在remix环境下进行编译测试,在线环境相对比较稳定.如果不想用在线环境,那我们就需要自己动 ...

  3. Lua rawget rawset newindex 函数定义和例子

    在绝大多数情况下,我们都不会用到rawget和rawset. 本文的运行环境:lua 5.3 for windows rawset 赋值操作 rawset是在设置值的过程,进行处理,比如:当某个值改变 ...

  4. python3 list列表随机选取一个元素、随机选择一个user-agent

    爬虫时适当更换user-agent可以稍微规避一下代理被封的风险... from random import sample ua = [ 'Mozilla/4.0 (compatible; MSIE ...

  5. 如何自己制作CHM电子书?

    软件介绍: EasyCHM 非常适合个人和单位制作高压缩比的有目录.索引,同时具有全文检索及高亮显示搜索结果的网页集锦.CHM格式的帮助文件.专业的产品说明书.公司介绍.文章集锦.CHM电子书等等. ...

  6. ctrl+shift+r / ctrl+f5 强制(不使用缓存)刷新google chrome网页

    我改了csdn图片后, 一直看到的是旧图片, n天之后, 还是旧图片.猜测应该是用了缓存(且缓存更新逻辑失败, 定是csdn的bug), 用ctrl+shift+r, 或者ctrl+f5, 强制刷新页 ...

  7. php类注释生成接口文档

    参考地址:https://github.com/itxq/api-doc-php

  8. zabbix目录

    1.Linux实战教学笔记49:Zabbix监控平台3.2.4(一)搭建部署与概述 2.Linux实战教学笔记50:Zabbix监控平台3.2.4(二)深入理解zabbix 3.Linux实战教学笔记 ...

  9. Visual Studio 2019 正式版 更新内容

    大早上更新了Visual Studio 2019, 试用一下 一.界面改变 1.项目创建界面 首先启动界面改变就不说了,创建项目的界面做了较大改变,感觉在向vs for mac 靠拢 ,而后者感觉像x ...

  10. C#字符串和ASCII码的转换

    //字符转ASCII码: public static int Asc(string character) { if (character.Length == 1) { System.Text.ASCI ...