ORACLE---Unit01: 数据库原理 、 SQL(DDL、DML)

假如想象 提交于 2020-02-26 18:00:35

--SQL语句是不区分大小写的,但是为了增加可读性,可以将关键字全部大写,非关键子全部小写。
SELECT SYSDATE FROM dual;

--SQL语句根据功能有不同分类:
--DDL语句(数据定义语言)
--用于操作数据库对象。数据库对象包括:
--表、视图、索引、序列

--->1.创建表:
CREATE TABLE employee_RR(
 id NUMBER(4),
 name VARCHAR2(20),
 gender CHAR(1),
 birth DATE,
 salary NUMBER(6,2),
 job VARCHAR2(30),
 deptno NUMBER(2)
);

--->2.查看表的结构:(两个地方会用到)
DESC employee_RR

--->3.删除表:
DROP TABLE employee_RR;

---DEFAULT
---设置默认值
---在数据库中,无论字段是什么类型,默认值都是NULL,但是可以在创建表的时候,通过DEFAULT关键字为指定的列单独设置默认值。
---在数据库中,字符串使用单引号表示字面量,这一点与java不一致,需要注意!
---注:不同的数据类型,数字直接就写数字不需要单引号,而字符的自变量就写单引号。
--      和Java中不一样的是,在数据库中,不论单一字符还是多字符的自变量,都是单引号。
---可以通过DEFAULT子句给列指定默认值(null)
---给gender列赋默认值‘M’,如果没有指定性别的员工,默认是男性。
---先将employee表删除,再创建表employee
---注:SQL语句虽然不区分大小写,但是字符串内容是区分大小写的。
CREATE TABLE employee_RR(
       id NUMBER(4),
       name VARCHAR2(20),
       gender CHAR(1) DEFAULT 'M',
       birth DATE,
       salary NUMBER(6,2),
       job VARCHAR2(30),
       deptno NUMBER(2)
); 
DROP TABLE employee_RR;


---NOT NULL约束
---非空约束要求指定字段在任何情况下值不允许为空。
---非空(Not Null)是一种约束条件,用于确保字段值不为空
---默认情况下,任何列都允许有空值 (注意:gender CHAR(1)NOT NULL DEFAULT 'M',为错误,不允许这样)
---(注意:not null是可以看得到的。)
---当某个字段被设置了非空约束条件,这个字段中必须存在有效值
---当执行插入数据的操作时,必须提供这个列的数据
---当执行更新操作时,不能给这个列的值设置为NULL
--->NOT NULL约束
--->NOT NULL约束可以确保指定的字段不允许NULL.
CREATE TABLE employee_RR(
       id NUMBER(4),
       name VARCHAR2(20)NOT NULL,
       gender CHAR(1) DEFAULT 'M',
       birth DATE,
       salary NUMBER(6,2),
       job VARCHAR2(30),
       deptno NUMBER(2)
);
DESC employee_RR

---二.修改表
---修改表可以修改表的名字和表的结构
---2.1修改表名:
---RENAME old_name TO new_name
---在建表后如果希望修改表名,可以使用RENAME语句实现
---语法如下,将改变表名old_name为new_name:
---RENAME old_name TO new_name;
---修改表名employee为myemp
---RENAME employee TO myemp;

RENAME employee_RR TO myemployee_RR

DESC employee_RR
DESC myemployee_RR

---2.2:修改表结构
---添加新字段,删除现有字段,修改现有字段
---就是改变表当中的字段,增删改。添加新的字段,或几个字段。
---增加列
---给表增加列可以使用ALTER TABLE的ADD子句实现。
---语法:
---ALTER TABLE table_name ADD();
---列只能增加在后面,不能插入到现有的列中
---给表增加一列hiredate,并设置默认值为当前日期
---2.2.1:添加新字段
---向myemp表中添加字段hiredate

ALTER TABLE myemployee_RR ADD (hiredate DATE DEFAULT sysdate);
DESC myemployee_RR

---2.2.2:删除字段
---将myemp表中的hiredate删除

ALTER TABLE myemployee_RR DROP (hiredate);
DESC myemployee_RR

---2.2.3:修改现有字段
---修改字段可以修改字段的类型,长度添加默认值或者约束条件。
---但是修改字段尽量在表中没有数据的情况下进行,否则尽量不要修改字段类型,
---改长度也尽量只增不减,否则可能修改失败。
--->可以修改字段的类型,长度,默认值,非空

--修改列 MODIFY
--建表之后,可以改变表中列的数据类型、长度和默认值
--修改仅对以后插入的数据有效
--如果把长度由大改小,有可能不成功
--语法:
--ALTER TABLE table_name MODIFY
--修改表myemp的列job,并增加默认值的设置
--ALTER TABLE myemp
--MODIFY(job VARCHAR2(40) DEFAULT'CLERK');
注意:尽量不要修改表结构,修改也是数据空的表,不然说明前期工作分析不足。
1、字段类型不要改,因为表里已经有数据了。如果之前是字符串改为date,就会失败
2、长度尽量大的扩,不要小的缩。
--ALTER TABLE myemployee_RR MODIFY (job NUMBER(10,2)NOT NULL);

ALTER TABLE myemployee_RR MODIFY(job VARCHAR2(40))
DESC myemployee_RR

-----DML语句(数据操作语言)
---DML用于对表中数据进行增、删、改操作
---1.INSERT:插入数据
--INSERT INTO myemployee_RR(id,name,job,deptno)VALUES(1,'ROSE',11,10);
INSERT INTO myemployee_RR(id,name,job,deptno)VALUES(1,'ROSE','CLERK',10);
COMMIT
SELECT * FROM myemployee_RR

--COMMIT--〉已提交  执行按钮右边第五个铁桶钩也是COMMIT(F11) //再右边是ROLLBACK回滚
--ROLLBACK--〉回退完成。

--INSERT语句中的字段名可以忽略,但是忽略后就是全列插入。
INSERT INTO myemployee_RR VALUES(2,'rose','M',SYSDATE,5000,'CLEAK',20)
SELECT * FROM myemployee_RR

---插入日期类型数据
---可以直接给定字符串,但是格式必须是:'DD-MON-RR',由于月用得是简拼,
---不同语言地区这里会有出入:
---英语地区是以英文字母缩写形式,如'01-SEP-03'
---而中文环境下为:'01-9月-03'。所以不建议使用。
---可以使用TO_DATE函数,这是数据库的一个内置函数,可以将一个字符串
---按照指定的日期格式转换为DATE值。

INSERT INTO myemployee_RR(id,name,job,deptno,birth)VALUES
(3,'mark','CLERK',20, TO_DATE('1990-09-13','YYYY-MM-DD'))

SELECT * FROM myemployee_RR

---UPDATE语句
---更新表中的记录
---语法如下:
---UPDATE table_name
---SET column= value()
---如果没有where子句,则全表的所有数据都会被更新修改,务必小心

---2.UPDATE,更新数据,将rose的性别改为'F',更新职员rose的薪水为8600
---修改的时候通常要使用WHERE子句来添加过滤条件,这样仅会将满足条件的记录
---进行修改,若不添加过滤条件则是全表更新,这样的情况实际比较少。
UPDATE myemployee_RR SET gender='F',salary=8600 WHERE name='rose'
SELECT * FROM myemployee_RR

---3.DELECT,删除语句
---删除ROSE
DELETE FROM myemployee_RR WHERE gender='M'
DELETE FROM myemployee_RR WHERE name='rose'
SELECT * FROM myemployee_RR


---DELETE 语句
---在DDL语句中的TRUNCATE语句,同样有删除表数据的作用。
---和DELETE语句的区别:
--DELETE可以有条件删除,TRUNCATE将表数据全部删除
--DELETE是DML语句,可以回退,TRUNCATE是DDL语句,立即生效,无法回退
--如果是删除全部表记录,且数据量较大,DELETE语句效率比TRUNCATE语句低。
--删除全部记录
--DELETE FROM myemp;
--或者
--TRUNCATE TABLE myemp

 

**************************************************************************************************************************************************************************

CREATE TABLE emp_RR(
   empno NUMBER(4,0),
   ename VARCHAR2(10),
   job VARCHAR2(9),
   mgr NUMBER(9),
   hiredate DATE,
   sal NUMBER(7,2),
   comm NUMBER(7,2),
   deptno NUMBER(2,0)
);

DESC emp_RR

CREATE TABLE dept_RR(
   deptno NUMBER(2,0),
   dname VARCHAR2(14 BYTE),
   loc VARCHAR2(13 BYTE)
);

DESC dept_RR
DROP TABLE dept_RR;


INSERT INTO emp_RR(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
VALUES(7369,'SMITH','CLERK',7902,to_date('1980-12-17','YYYY-MM-DD'),800,NULL,20);
INSERT INTO emp_RR VALUES(7499,'ALLEN','SALESMAN',7698,TO_DATE('1981-2-22','YYYY-MM-DD'),1600,300,30);
INSERT INTO emp_RR VALUES(7521,'WARD','SALESMAN',7698,TO_DATE('1981-2-22','YYYY-MM-DD'),1250,500,30);
INSERT INTO emp_RR VALUES(7566,'JONES','MANAGER',7839,TO_DATE('1981-4-2','YYYY-MM-DD'),2975,NULL,20);
INSERT INTO emp_RR VALUES(7654,'MARTIN','SALESMAN',7698,TO_DATE('1981-9-28','YYYY-MM-DD'),1250,1400,30);
INSERT INTO emp_RR VALUES(7698,'BLAK','MANAGER',7839,TO_DATE('1981-5-1','YYYY-MM-DD'),2850,NULL,30);
INSERT INTO emp_RR VALUES(7782,'CLARK','MANAGER',7839,TO_DATE('1981-6-9','YYYY-MM-DD'),2450,NULL,10);
INSERT INTO emp_RR VALUES(7788,'SCOTT','ANALYST',7566,TO_DATE('1987-4-19','YYYY-MM-DD'),3000,NULL,50);
INSERT INTO emp_RR VALUES(7839,'KING','PRESIDENT',NULL,TO_DATE('1981-11-17','YYYY-MM-DD'),5000,NULL,10);
INSERT INTO emp_RR VALUES(7844,'TURNER','SALESMAN',7698,TO_DATE('1981-9-8','YYYY-MM-DD'),1500,0,30);
INSERT INTO emp_RR VALUES(7876,'ADAMS','CLERK',7788,TO_DATE('1987-5-23','YYYY-MM-DD'),1100,NULL,20);
INSERT INTO emp_RR VALUES(7900,'JAMES','CLERK',7698,TO_DATE('1981-12-3','YYYY-MM-DD'),950,NULL,30);
INSERT INTO emp_RR VALUES(7902,'FORD','ANALYST',7566,TO_DATE('1981-12-3','YYYY-MM-DD'),3000,NULL,20);
INSERT INTO emp_RR VALUES(7934,'MILLER','CLERK',7782,TO_DATE('1982-1-23','YYYY-MM-DD'),1300,NULL,10);

SELECT * FROM emp_RR;

INSERT INTO dept_RR(DEPTNO,DNAME,LOC) VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO dept_RR VALUES(20,'RESEARCH','DALLAS');
INSERT INTO dept_RR VALUES(30,'SALES','CHICAGO');
INSERT INTO dept_RR VALUES(40,'OPERATIONS','BOSTON');

SELECT * FROM dept_RR;

**************************************************************************************************************************************************************************

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!