目录
1、SQL语句命令组成
DDL | 数据定义语言 | create 创建 | alter 修改 | drop 删除 | truncate 清除数据 | 针对对象结构的操作 |
DML | 数据操纵语言 | insert 插入数据 | delete 删除数据 | update 更新数据 | (一般后边需要加commit) | |
DQL | 数据查询语言 | select……from…… | where……group by…… | having…… | order by…… (ASC/DESC) | |
TCL | 事物控制语句 | commit 提交 | rollback 撤回 | |||
DCL | 数据控制语言 | grant 搜全 | revoke 撤销授权 |
2、--建表
-
数据类型
1、number 数据类型
number(10) 最长为10位的整数
number(10,2) 最长时10位,其中整数占8位,小数占2位
2、char 固定长度字符类型
char(10)字符长度为10位,不够则空格补齐
3、varchar2 可变字符长度
varchar2(10)字符长度最长为10位,不够不补空格
4、date 日期
date'2020-08-11'
to_date('2020-08-11','YYYY-MM-DD')
-
直接建表法
CREATE TABLE STU (
SNAME VARCHAR2(20),
SGENDER CHAR(3),
SBIRTHDAY DATE,
SAGE NUMBER(2)
);
-
间接建表法
CREATE TABLE STU_COPY AS SELECT * FROM STU WHERE 1=2;--只复制表结构
CREATE TABLE EMP_COPY AS SELECT * FROM EMP; --复制结构和数据内容
SELECT * FROM STU;
SELECT * FROM EMP_COPY
SELECT * FROM EMP_ETL
3、--修改表结构
SELECT * FROM STU;
-
修改字段名字
ALTER TABLE STU RENAME COLUMN SGENDER TO SSEX;
-
修改表名字
ALTER TABLE STUU RENAME TO STU;
-
修改字段数据类型
ALTER TABLE STU MODIFY SGENDER VARCHAR2(10);
-
增加字段
ALTER TABLE STU ADD STU_PHONE NUMBER(11);
-
删除字段
ALTER TABLE STU DROP COLUMN STU_PHONE;
4、--注释
SELECT * FROM STU ;
COMMENT ON TABLE STU IS '学生表';
COMMENT ON COLUMN STU.SNAME IS '学生姓名';
5、数据操纵
-
insert
1、直接插入
INSERT INTO STU(SNAME,SGENDER,SBIRTHDAY,SAGE) VALUES('LILY','M',DATE'1995-10-05',25);
COMMIT;
2、间接插入
SELECT * FROM EMP;
INSERT INTO STU(SNAME,SGENDER,SBIRTHDAY,SAGE) SELECT ENAME,'F',HIREDATE,TRUNC((SYSDATE-HIREDATE)/365) FROM EMP;
COMMIT;
-
insert all
SELECT * FROM EMP;
CREATE TABLE EMP_1 AS SELECT * FROM EMP WHERE 1=2;
CREATE TABLE EMP_2 AS SELECT * FROM EMP WHERE 1=2;
SELECT * FROM EMP_1;
SELECT * FROM EMP_2;
TRUNCATE TABLE EMP_1;
TRUNCATE TABLE EMP_2;
INSERT ALL
INTO EMP_1
INTO EMP_2
SELECT * FROM EMP;
COMMIT;
--部门10的数据插入到EMP_1中,把所有的数据都插入到EMP_2中
INSERT ALL
WHEN DEPTNO=10 THEN
INTO EMP_1
WHEN DEPTNO<40 THEN
INTO EMP_2
SELECT * FROM EMP;
COMMIT;
--部门10的数据插入到EMP_1中,把部门20,30数据都插入到EMP_2中
INSERT FIRST
WHEN DEPTNO=10 THEN
INTO EMP_1
WHEN DEPTNO<40 THEN
INTO EMP_2
SELECT * FROM EMP;
COMMIT;
-
更新数据
SELECT * FROM STU FOR UPDATE;
--更新数据
UPDATE
UPDATE STU SET SGENDER='F' WHERE SNAME='LILY'
COMMIT;
SELECT * FROM EMP_2;
UPDATE EMP_2 SET SAL=0;
COMMIT;
UPDATE EMP_2 SET SAL=(SELECT SAL FROM EMP WHERE EMP.EMPNO=EMP_2.EMPNO);
COMMIT;
UPDATE EMP_2 SET SAL=0,COMM=0;
COMMIT;
UPDATE EMP_2 SET(SAL,COMM)=(SELECT SAL,COMM FROM EMP WHERE EMP.EMPNO=EMP_2.EMPNO);
COMMIT;
-
删除数据
--删除数据
DELETE FROM STU WHERE SNAME='LILY';
COMMIT;
DELETE FROM EMP_2 WHERE DEPTNO=20;
COMMIT;
------------
DROP
TRUNCATE
DELETE
SELECT * FROM SCORE;
6、表的约束
1.PRIMARY KEY :主键约束(非空,唯一)
2.FOREIGN KEY :外键约束 (受另一张表的主键的约束)
3.CHECK :检查约束--要么约束的值或者是空值
4.UNIQUE :唯一约束--不重复,可以有多行空值
5.NOT NULL :非空约束
1.建表的给定约束(系统给定约束名字)
CREATE TABLE STU(
STU_NUM NUMBER(6) PRIMARY KEY,
CLASS_NUM NUMBER(4) REFERENCES DEPT(DEPTNO),
SCORE_NUM NUMBER(3) NOT NULL,
SGENDER CHAR(3) CHECK(SGENDER='F'OR SGENDER='M'),
TEL_NUM NUMBER(11) UNIQUE
);
SELECT * FROM STU;
INSERT INTO STU VALUES(1001,40,60,'F',13913913912);
COMMIT;
INSERT INTO STU VALUES(1002,40,60,'F',13913913913);
COMMIT;
INSERT INTO STU VALUES(1003,40,60,'',13913913916);
COMMIT;
DROP TABLE STU;
--2
CREATE TABLE STU(
STU_NUM NUMBER(6),
CLASS_NUM NUMBER(4),
SCORE_NUM NUMBER(3),
SGENDER CHAR(3),
TEL_NUM NUMBER(11),
CONSTRAINT PK_STU PRIMARY KEY(STU_NUM),
CONSTRAINT FK_STU FOREIGN KEY(CLASS_NUM) REFERENCES DEPT(DEPTNO),
CONSTRAINT CK_STU CHECK(SGENDER='F'OR SGENDER='M')
);
--3.
CREATE TABLE STU(
STU_NUM NUMBER(6) ,
CLASS_NUM NUMBER(4),
SCORE_NUM NUMBER(3) ,
SGENDER CHAR(3) ,
TEL_NUM NUMBER(11)
);
SELECT * FROM STU;
ALTER TABLE STU ADD CONSTRAINT PK_STU PRIMARY KEY(STU_NUM);
ALTER TABLE STU ADD CONSTRAINT FK_SUT FOREIGN KEY (CLASS_NUM) REFERENCES DEPT(DEPTNO);
ALTER TABLE STU ADD CONSTRAINT UN_STU UNIQUE(TEL_NUM);
--删除约束
ALTER TABLE STU DROP CONSTRAINT UN_STU;
--修改约束
ALTER TABLE STU MODIFY TEL_NUM NOT NULL;
----------------------------------