sql基础
DDL
CREATE TABLE
ALTER TABLE TABLE_NAME ADD DEMO_NAME VARCHAR2(20 CHAR);
COMMENT ON COLUMN TABLE_NAME.DEAM_NAME IS '名称';
DROP TABLE
DROP INDEX
TRUNCATE TABLE TABLE_NAME
索引
create index 索引名 on 表名(字段名1,字段名2,......,字段名n);
create unique index 索引名 on 表名(字段名1,字段名2,......,字段名n);
drop index 索引名;
alter table 表名 drop constraint 主键名;
alter index 索引名 rename to 新索引名;
alter index 索引名 rebuild;
alter index 索引名 coalesce;
DML
INSERT INTO TABLE_NAME() VALUES();
UPDATE TABLE_NAME SET DEMO_NAME = '01' WHERE DEMO_ID = '1';
DELETE TABLE_NAME WHERE ID = '1';
DQL
SELECT * FROM TABLE_NAME ;
(一)单表查询
1、简单的条件查询
WHERE
LIKE '%GE%'
AND
OR
BETWEEN A AND B
IN()
EXISTS()
IS NOT NULL <>
2、去重查询
SELECT DISTINCT DEMO_NAME FROM A_DEMO
SELECT DEMO_NAME FROM TABLE_NAME GROUP BY DEMO_NAME HAVING COUNT(DEMAE_NAME)>1;
3、排序查询
SELECT * FROM TABLE_NAME ORDER BY DEMO_NO ASC;
SELECT * FROM TABLE_NAME ORDER BY DEMO_NO DESC;
4、基于伪列的查询
ROWID
ROWNUM
SELECT * FROM (SELECT ROWNUM R ,T.* FROM TABLE_NAME T WHERE ROWNUM <10) WHERE R >5;
5、聚合统计
SUM()
AVG()
MAX()
MIN()
count()
GROUP BY
GROUP BY HAVING
(二)连接查询
1、内连接查询
SELECT * FROM B_DEMO B ,A_DEMO A WHERE B.A_DEMO_NO = A.DEMO_NO;
2、左外连接
SELECT B.*,A.DMEO_NAME FROM B_DEMO B LEFT JOIN A_DEMO A ON B.A_DEMO_NO = A.DEMO_NO;
3、右外连接
SELECT B.*,A.DMEO_NAME FROM B_DEMO B RIGHT JOIN A_DEMO A ON B.A_DEMO_NO = A.DEMO_NO;
(三)子查询
SELECT (SELECT * FROM TABLE_NAME1 ) FROM TABLE_NAME;
SELECT * FROM (SELECT * FROM TABLE_NAME1);
SELECT * FROM TABLE_NAME WHERE DEMO_NO IN (SELECT DEMO_NO FROM TABLE_NAME1);
(四)分页查询
SELECT * FROM (SELECT ROWNUM R ,T.* FROM TABLE_NAME T WHERE ROWNUM <10) WHERE R >5;
SELECT * FROM (
SELECT ROWNUM R ,T.* FROM (
SELECT * FORM TABLE_NAME ORDER BY DEMO_NAME DESC) T
WHERE ROWNUM <30)
WHERE R > 5;
(五)单行函数
1、字符函数
SELECT LENGTH('STRING') FROM DUAL;
SUBSTR()
CONCAT()
2、数值函数
SELECT ROUND(100.243) FROM DUAL;
SELECT TRUNC(100.123,2) FROM DUAL
SELECT MOD(123,3) FROM DUAL;
3、日期函数
SELECT ADD_MONTHS(SYSDATE,2) FROM DUAL;
SELECT TRUNC(SYSDATE,'YYYY') FROM DUAL;
SELECT TRUNC(SYSDATE,'MM') FROM DUAL;
4、转换函数
TO_CHAR(TO_DATE(V_DATE_DATE,'YYYYMMDD'),'YYYY/MM/DD')
5、其他函数
SELECT NVL(NULL,0) FROM DUAL;
SELECT NVL2(B_NAME,B_NAME,'空值') FROM table_name;
SELECT DECODE(B_NO ,1,'1号',2,'2号',3,'3号') FROM TABLE_NAME;
SELECT DEMO_NAME , (CASE EDATE
WHEN '99991231' THEN '有效'
ELSE '过期'
END) 有效标志 FROM A_DEMO;
六、行列转换
行转列CASE WHEN
列转行UNION ALL
七、分析函数(子查询也可以实现)
SELECT ROW_NUMBER() OVER(PARTITION BY DEMO_NAME ORDER BY SDATE DESC) A ,T.* FROM A_DEMO T;
SELECT DENSE_RANK() OVER(PARTITION BY DEMO_NAME ORDER BY SDATE DESC) A ,T.* FROM A_DEMO T;
八、集合运算
SELECT * FROM B_DMEO WHERE B_NO >=3
UNION
SELECT * FROM B_DEMO WHERE B_NO <=5
SELECT * FROM B_DEMO WHERE B_NO >=2;
INTERSECT
SELECT * FROM B_DEMO WHERE B_NO <=5;
SELECT * FROM B_DEMO WHERE B_NO >=2;
MINUS
SELECT * FROM B_DEMO WHERE B_NO <=5;