一,知识点
1,SQL语句
SQL语句是结构化查询语句,操作数据库需要向数据库发送SQL语句,数据库会理解SQL语句的定义并执行SQL语句分为
数据定义语言(DDL)
用于建立、修改、删除数据库对象,包括创建语句(CREATE)、修改语句(ALTER)、删除语句(DROP),比如使用 CREATE TABLE 创建表,使用 ALTER TABLE 修改表,使用DROP TABLE删除表等动作。这类语言不需要事务的参与,自动提交。
数据操作语言(DML)
用于改变数据库数据,包括 INSERT、UPDATE、DELETE 三条语句。其中,INSERT 语句用于将数据插入到数据库中,UPDATE语句用于更新数据库中已存在的数据,DELETE 用于删除数据库中已存在的数据。DML语言和事务是相关的,执行完DML操作后必须经过事务控制语句提交后才真正的将改变应用到数据库中。
事务控制语言(TCL)
用来维护数据一致性的语句,包括提交(COMMIT)、回滚(ROLLBACK)、保存点(SAVEPOINT)三条语句,其中 COMMIT 用来确认已经进行的数据库改变, ROLLBACK 语句用来取消已经进行的数据库改变,当执行DML操作后(也就是上面说的增加、修改、删除等动作),可以使用 COMMIT语句来确认这种改变,或者使用 ROLLBACK 取消这种改变。SAVEPOINT
语句用来设置保存点,使当前的事务可以回退到指定的保存点,便于取消部分改变。
数据查询语言(DQL)
SELECT 用来查询所需要的数据。使用最广泛,语法灵活复杂。
数据控制语言(DCL)
用于执行权限的授予和收回操作、创建用户等,包括授予(GRANT)语句,收回(REVOKE)语句,CREATE USER语句,其中 GRANT 用于给用户或角色授予权限, REVOKE用于收回用户或角色已有的权限。DCL语句也不需要事务的参与,是自动提交的。不区分大小写,但应当养成好习惯,通常将关键字与非关键字用大小写区分开。
2,Oracle数据类型
NUMBER
NUMBER是Oracle数据库中的数值类型,存储数值精确度可达到38位,是一种变长类型,长度为0-22个字节,取值范围为:10^(-130)-----10^126(不包括),NUMBER表示数字类型,经常被定义成NUMBER(P,S)形式,其中:,?P表示数字的总位数(1---38),?S表示小 数点后面的位数(-84---127)。
例如在表Emp中的Sal列的定义如下:
Sal NUMBER(6,2)
表示Sal列中的数据,整数位最大为4位,小数位
最大位数是2位,也就是最大取值:9999.99。
CHAR
CHAR表示固定长度的字符类型,经常被定义成CHAR(N)
形式, N表示占用的字节数,N的最大取值是2000。
例如在表Emp中的Ename列的定义如下:
Ename CHAR(20);
表示Ename列中最多可存储20个字节的字符串,并且占用的空间是固定的20个字节。
VARCHAR2
VARCHAR2表示变长的字符类型,定义格式是VARCHAR2(N),
N表示最多可占用的字节数,最大长度是4000字节。
例如在表Emp中的JOB列的定义如下:
JOB VARCHAR2(100);
表示JOB列中最多可存储长度为100个字节的字符串。
根据其中保存的数据长度,占用的空间是变化的,最大占用空间为100个字节。
SELECT SYSDATE FROM dual
3,DDL语句
数据定义语言,用于增删改数据对象
创建表字段的默认值
数据库中所有字段无论是什么类型,默认值都是NULL,可以使用 DEFAULT 为字段单独指定默认值。
CREATE TABLE employee_gln(id NUMBER(4),name VARCHAR2(20),gander CHAR(1),birth DATE,salary NUMBER(6,2),job VARCHAR2(30),deptno NUMBER(2))
--删除表
DROP TABLE employee_glnCREATE TABLE employee_gln(id NUMBER(4),name VARCHAR2(20),
--虽然不区分大小写但是字符串的值时区分大小写的
--可以通过DEFAULT子句给列指定默认值
gender CHAR(1)DEFAULT'M',birth DATE,salar NUMBER(6,2),job VARCHAR2(30),deptno NUMBER(2))
删除表
--DROP TABLE employee_gln
--当一个字段设置为NOT NULL约束后,该字段的值不允许为空
CREATE TABLE employee_liwc(id NUMBER(4),name VARCHAR2(20)NOT NULL,gander CHAR(1)DEFAULT'M',birth DATE,salary NUMBER(6,2),job VARCHAR2(30),deptno NUMBER(2))
DROP TABLE employee_liwc
修改表
修改表名
修改表结构
1修改表名:
RENAME old_name TO new_name
RENAME old_name TO EMPLOYEE
2修改表结构:
添加新字段,只能追加到表的最后面,不能再现有表中插入
为myemp添加字段hiredate;
ALTER TABLE EMPLOYEE_LIWC ADD(hiredate DATE)
删除一个字段
ALTER TABLE EMPLOYEE_LIWC DEOP(hiredate)
修改现有字段
可以修改字段的类型。长度。添加约束或设定默认值
若表中已经存在数据,则不要修改字段类型
长度尽可能只增不减,否则会修改失败
ALTER TABLE EMPLOYEE_LIWC MODIFY( job VARCHAR2(40))
DESC EMPLOYEE_LIWC
4,DML语句
用来增删改表中的数据
DML总是伴随事务TCL
INSERT INTO employee_liwc(id,name,salary,job)VALUES(1,'jack',3000,'CLERK')
SELECT * FROM employee_liwc COMMIT
插入数据时如果不指定字段名,默认全列插入
否则:SQL 错误: ORA-00947: 没有足够的值
DD-MON-YY指定时间
插入日期数据,函数TO_DATE
将字符串按照指定格式转换Date类型
INSERT INTO employee_liwc
SQL 错误: ORA-01400: 无法将 NULL 插入 ("JSD1707"."EMPLOYEE_LIWC"."NAME")
(id,birth)
VALUES(3,
TO_DATE('1992-08-09','YYYY-MM-DD')
)
SELECT * FROM employee_liwc
--不加条件都会改掉
UPDATE语句,修改表数据
UPDATE employee_liwc
SET salary = 5000,deptno = 20
UPDATE employee_liwc SET salary = 5000,deptno = 20 WHERE name = 'jack' and x or y >=z
--满足条件修改
删除
DELETE语句
同上一般添加条件语句
不添加为清空
DELETE FROM employee_liwc WHERE name='mike'
清空表不受事务控制
TRUNCATE TABLE employee_liwc
二,例子
--创建emp表
CREATE TABLE emp_liwc(
empno NUMBER(4,0),
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4,0),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2,0)
)
--插入数据emp_liwc
INSERT INTO emp_liwc VALUES(7369,'SMITH','CLERK',7902,to_date('1980-12-17','YYYY-MM-DD'),800,NULL,20);
INSERT INTO emp_liwc VALUES(7499,'ALLEN','SALESMAN',7698,to_date('1981-2-20','YYYY-MM-DD'),1600,300,30);
INSERT INTO emp_liwc VALUES(7521,'WARD','SALESMAN',7698,to_date('1981-2-22','YYYY-MM-DD'),1250,500,30);
INSERT INTO emp_liwc VALUES(7566,'JONES','MANAGER',7839,to_date('1981-4-2','YYYY-MM-DD'),2975,NULL,20);
INSERT INTO emp_liwc VALUES(7654,'MARTIN','SALESMAN',7698,to_date('1981-9-28','YYYY-MM-DD'),1250,1400,30);
INSERT INTO emp_liwc VALUES(7698,'BLAKE','MANAGER',7839,to_date('1981-5-1','YYYY-MM-DD'),2850,NULL,30);
INSERT INTO emp_liwc VALUES(7782,'CLARK','MANAGER',7839,to_date('1981-6-9','YYYY-MM-DD'),2450,NULL,10);
INSERT INTO emp_liwc VALUES(7788,'SCOTT','ANALYST',7566,to_date('1987-4-19','YYYY-MM-DD'),3000,NULL,20);
INSERT INTO emp_liwc VALUES(7839,'KING','PRESIDENT',NULL,to_date('1981-11-17','YYYY-MM-DD'),5000,NULL,10);
INSERT INTO emp_liwc VALUES(7844,'TURNER','SALESMAN',7698,to_date('1981-9-8','YYYY-MM-DD'),1500,0,30);
INSERT INTO emp_liwc VALUES(7876,'ADAMS','CLERK',7788,to_date('1987-5-23','YYYY-MM-DD'),1100,NULL,20);
INSERT INTO emp_liwc VALUES(7900,'JAMES','CLERK',7698,to_date('1981-12-3','YYYY-MM-DD'),950,NULL,30);
INSERT INTO emp_liwc VALUES(7902,'FORD','ANALYST',7566,to_date('1981-12-3','YYYY-MM-DD'),3000,NULL,20);
INSERT INTO emp_liwc VALUES(7934,'MILLER','CLERK',7782,to_date('1982-1-23','YYYY-MM-DD'),1300,NULL,10);
--创建dept
CREATE TABLE dept_liwc(
deptno NUMBER(2,0),
dname VARCHAR2(14 BYTE),
loc VARCHAR2(13 BYTE)
)
--插入dept
INSERT INTO dept_liwc VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO dept_liwc VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept_liwc VALUES(30,'SALES','CHICAGO');
INSERT INTO dept_liwc VALUES(40,'OPERATIONS','BOSTON');
SELECT * FROM emp_liwc
DROP TABLE emp_liwc