Oracle的SQL常用的知识(纯干货)
一、SQL (Structured Query Language:) 结构查询语言
1、DML Data Manipulation(n. 操纵;操作;处理;篡改) Language 修改数据
单表查询:DISTINCT(去重),’别名加注释’,
BETWEEN最小值 AND最大值
模糊查询(%多个字符,_单个字符)、<> 和!=不等于符号、
单查询公式:{Select distinct 列 别名 from 表名 where 条件ORDER BY 排序字段 1,和2 ASC升|DESC降}
单行函数:function_name 函数名(column列名|expression表达式,[arg1,arg2,…参数])
0.1字符函数:UPPER(转大写),LOWER(转小写)、initcap()首大写、||连接CONCAT(‘hello ‘,’world’)、substr(‘hello’,1,3)截取、length(‘hello’)长度、replace(‘hello’,’l’,’x’)替换
0.2数值函数:ROUND(789.536,2)四舍五入、TRUNC()截断、MOD取余、
0.3 SYSDATE 当前日期、ROUND((SYSDATE-hiredate)/7)求之前星期数
to_date(‘2018-10-01′,’yyyy-MM-dd’) 、ROUND(sysdate) 取当前不带日期
to_char(fa.last_update_date,’yyyy-mm-dd’)>’2018-10-10′
0.4 转换函数TO_CHAR() 换成字符、TO_NUMBER()换成数字、TO_DATE()换成日期、
TO_CHAR(hiredate,’yyyy-mm-dd’)
0.5 通用函数 四则运算、(sal+NVL(comm,0))*12字段默认给指定数值
IF…ELSEIF…ELSE = DECODE()
SELECT DECODE(1,1,’ 结果是1′,2,’ 结果时2′,3,’ 结果是3′) FROM DUAL ;
多表查询:
1、左连接和右连接(不重要一方加(+))
SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE e.deptno(+)=d.deptno ; (+)在等号左边是右连接,反之左连接。
2、交叉连接 (CROSS JOIN产生笛卡尔积)
SELECT * FROM emp CROSS JOIN dept ;
3、自然连接 (NATURAL JOIN)自动关联字段匹配
SELECT * FROM emp NATURAL JOIN dept ;
4、USING子句、直接关联操作列
SELECT * FROM emp e JOIN dept d USING(deptno) WHERE deptno=30 ;
5、ON子句、用户自己规定连接条件
SELECT * FROM emp e JOIN dept d ON(e.deptno=d.deptno) WHERE deptno=30 ;
组函数:COUNT() MAX() MIN() AVG() SUM(),
使用条件,1、程序中存在GROUP BY,并且指定分组条件。2、单独使用分组函数除了相等条件分组函数使用HAVING条件。
SELECT {DISTINCT} 列 FROM表 {WHERE (s)} {GROUP BY {HAVING 分组条件}} {ORDER BY排序字段 ASC|DESC , 排序字段ACS | DESC ,…}
分组:一列上有重复内容,可以嵌套使用
=ANY 等于IN 比最大值要小、>ALL比最大值大、<ALL比最小值小
事务操作(会出现死锁)
插入:CREATE TABLE myemp AS SELECT * FROM emp ;(创建备份表)
INSERT INTO 表名(字段)values(TO_DATE(‘2009-01-16′,’yyyy-mm-dd’)
更新:UPDATE 表名SET sal=5000 WHERE empno=7899;
删除:DELETE FROM表名 WHERE条件;
DROP TABLE book CASCADE CONSTRAINT ;强制删除
2、DDL Data Definition (n. 定义;[物] 清晰度;解说)Language修改表结构
创建表:CREATE TABLE temp AS (SELECT * FROM emp WHERE 1==2) 创建表结构。1==2不能满足的条件所以只复制了表结构
CREATE TABLE temp(字段名称 字段类型(默认值))
删除表:DROP TABLE person (需要回滚);TRUNCATE TABLE tperson ;(直接截断,不用回滚)
整加表字段:ALTER TABLE person ADD (address VARCHAR(200) DEFAULT ‘ ‘) ;
修改表字段结构:ALTER TABLE MODIFY ( DEFAULT )
RENAME 旧名称TO新名称 ;
约束条件:DROP TABLE person ;
CREATE TABLE person
(
pid VARCHAR2(18)PRIMARY KEY(主键约束) ,
name VARCHAR2(200)NOT NULL(非空约束) ,
age NUMBER(3) ,UNIQUE NOT NULL(唯一约束除主键外)
birthday DATE ,
sex VARCHAR2(2) DEFA CHECK(age BETWEEN 0 AND 150)/CHECK(sex IN (‘男 ‘,’女‘))(检查约束),
CONSTRAINT person_pid_pk PRIMARY KEY(pid) 为pid约束命名
ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE ;在附表里加外键约束。
ALTER TABLE 表名称DROP CONSTRAINT 约束名称;
伪列:SELECT ROWNUM,empno,ename,job,sal,hiredate FROM emp WHERE ROWNUM<=5;
集合:UNION(无重复) UNION ALL(有重复) INTERSECT (俩个相同)MINUS (不同集合)
视图创建:CREATE VIEW 视图名称 AS 子查询 WITH CHECK OPTION(不更新创建条件);
CREATE VIEW 视图名称 AS 子查询 WITH READ ONLY(只读视图操作)
Eg:CREATE VIEW empv20 AS SELECT empno,ename,job,hiredate FROM emp WHERE deptno=20 ;
视图删除:DROP VIEW empv20 ;
视图修改:CREATE OR REPLACE 视图名称AS子查询 ;