SQL语法(二)

数据更新:

       |-    CREATETABLE 新建表名 ASSELECT *|[列名1,列名2,...] FROM 被复制表名;   //复制表数据,Oracle专用。

       |-    INSERTINTO 表名称 [(列名称1,列名称2,...] VALUES (值1,2,...;//增加数据,建议写完整格式,即添加上值对应的列名

              |-    字符串:使用单引号“‘“

              |-    数字:直接编写

              |-    日期:当前日期(SYSDATE)、使用TO_DATE()转换,按照日期格式写

       |-    UPDATE 表名称 SET字段1=1,字段2=2...[WHERE更新条件(s]

//修改指定数据表中的数据,WHERE 字句中可以使用IN、BETWEEN...AND、LIKE等进行限定查询。当数据库更新数据时,其他用户不能针对当前数据进行任何操作。

       |-    DELETEFROM 表名称 [WHERE删除条件(s];     //删除指定数据,分物理删除和逻辑删除。物理删除即DELECT字段,逻辑删除为添加一个字段如flag(默认值为1),‘删除’数据则使用flag=0,搜索时使用WHERE flag=1。

例1:INSERT INTO MYEMP (EMPNO,ENAME,JOB,SAL) VALUES(5369,'WENWEN',

‘TEACHER’,’2500’);

例2:UPDATE MYEMP SET SAL=0 WHERE ENAME='SMITH';

例3:UPDATE MYEMP SET

SAL=(

             SELECT SAL

             FROM MYEMP

WHERE ENAME='SMITH')

WHERE ENAME='ALLEN';

例4:UPDATE MYEMP SET

SAL=SAL*1.2

WHERE SAL<(

             SELECT AVG(SAL)

             FROM MYEMP);

 

------------------------------------------------------------------------------------------------------------

 

事务处理:              //事务是针对数据更新使用的,只有DML的更新操作才存在事务的支持

 

|-    Session(会话,表示唯一的一个登陆用户)

       |-    COMMIT:事务提交,即如果已经执行了多条操作,那么只有执行了commit之后更新才会真正发出;在没有执行commit之前,所有更新操作都会保存在缓冲区。

              |-    ROLLBACK:事务回滚操作,即如果发现更新操作有问题,则恢复所有的更新操作,以保证原本的数据不被破坏。

 

-------------------------------------------------------------------------------------------------------------

 

伪列:

       |-    ROWNUM:显示每行的行号1,2,3,4...   //操作:1、取出第一行记录(只能取出第一行);2、取出前N行记录(可通过子查询查询n-m行或后n行数据)。

       |-    ROWID:行ID,每一行的ID都唯一           //例:AAASO3AAEAAAAITAAA,数据的对象编号:AAASO3,数据保存文件编号:AAE,数据保存的块号:AAAAIT,数据的保存行AAA。

例1:SELECT ROWNUM,EMPNO,ENAME,JOB,SAL FROM EMP;

例2:SELECT * FROM EMP WHERE ROWNUM=1;

例3:SELECT * FROM EMP WHERE ROWNUM<=10;

4SELECT *

FROM (

             SELECT *

             FROM EMP

             WHERE ROWNUM<=10)

WHERE EMPNO NOT IN (

             SELECT EMPNO

             FROM EMP

             WHERE ROWNUM<5); //通过子查询,查询5-10行的数据

例5:SELECT *

FROM (

             SELECT ROWNUM RN,EMPNO,ENAME,JOB

             FROM EMP

             WHERE ROWNUM<=10)

WHERE RN>=5;     //创建一个带有序号的表,并将ROWNUM使用别名重命名(伪列变实列)

例6:SELECT DEPTNO,DNAME,LOC,MIN(ROWID) FROM MYDAPT GROUP BY DEPTNO,DNAME,LOC; //通过ROWID找到重复数据的最早数据

例7:DELETE FROM MYDAPT

WHERE ROWID NOT IN(

       SELECT MIN(ROWID)

       FROM MYDAPT

       GROUP BY DEPTNO,DNAME,LOC); //删除重复数据并保留最早数据

 

----------------------------------------------------------------------------------------------------------------

 

DDL

表结构:

      

数据类型

作用

VARCHAR2n

字符型,n表示最大长度,一般保存长度较小的内容(200字以内),oracle独占,通用SQL使用VARCHAR(n)

NUMBERnm

NUMBER(n):整数,最多不超过n个长度

NUMBER(n,m):小数占m位,整数占n-m位

NUMBER:既可以整数也可以小数

DATE

日期时间数据

CLOB

大文本数据,最多保存4G文字

BLOB(不常用)

二进制数据,最多保存4G数据(文字、图片、音频)

 

       |-    CREATE TABLE表名称   列名称        数据类型    [DEFAULT默认值]

列名称       数据类型    [DEFAULT默认值]

                                                               ...

列名称       数据类型    [DEFAULT默认值]

);//创建新表

       |-    RENAME 旧表名称 TO新表名称;     //数据表重命名

       |-    TRUNCATE TABLE 表名称; //截断表,立即清空表数据并释放表所占用的数据空间(oracle独占)

       |-    CREATETABLE 新表名称 AS子查询;  //复制表

       |-    DROPTABLE 表名称; //删除表(扔入回收站)

       |-    DROPTABLE 表名称 PURGE;     //彻底删除(不经过回收站完全删除)

       |-    SELECT* FROM USER_RECYCLEBIN;    //查看回收站

       |-    PURGETABLE 表名称(回收站内的)//删除回收站内的表

       |-    PURGERECYCLEBIN; //清空回收站

       |-    FLASHBACKTABLE 表名 TOBEFORE DROP;  //闪回(从垃圾箱恢复被删除的数据表)

       |-    ALTERTABLE 表名称 ADD

                                   列名称数据类型   [DEFAULT默认值]

                                   列名称数据类型   [DEFAULT默认值]...

);//添加表中的数据列

|-    ALTER TABLE表名称 MODIFY

                                   列名称数据类型   [DEFAULT默认值]

                                   列名称数据类型   [DEFAULT默认值]...

);//修改表中的数据列

|-    ALTER TABLE表名称 DROP COLUMN 列名称;//删除表中的数据列

 

例1:CREATE TABLE member(

               mid NUMBER,

               name VARCHAR2(50) DEFAULT ‘无名氏’,

               age NUMBER(3),

               birthday DATE DEFAULT SYSDATE,

               note CLOB);

例2:CREATE TABLE EMP1 AS (SELECT * FROM EMP);

例3:CREATE TABLE DEPTINFOR AS

SELECT d.DEPTNO,d.DNAME,d.LOC,temp.COUNT,temp.AVG

FROM DEPT d,(

             SELECT DEPTNO,COUNT(EMPNO) COUNT,AVG(SAL) AVG

             FROM EMP

             GROUP BY DEPTNO

) temp

WHERE d.DEPTNO=temp.DEPTNO(+);

例4:CREATE TABLE DEPTINFOR AS SELECT * FROM EMP WHERE 1=2; //仅复制表结构,但不复制数据

例5:FLASHBACK TABLE EMP1 TO BEFORE DROP; //闪回

 

----------------------------------------------------------------------------------------------------------------

 

约束:

       |-    非空约束:NOTNULL,简称NK  //该字段的内容不允许设置为null值

       |-    唯一约束:UNIQUE,简称NK      //该列的内容不允许重复(空NULL不受该限制,即允许多值为空NULL)

       |-    为约束设置名称:CONSTRAINT 设置的名称约束名(列名[,列名...])   //为约束的报错提示信息设置易读的代码名称

       |-    主键约束:PRIMARYKEY,简称PK //非空约束+唯一约束不允许重复,也不允许为空

       |-    检查约束:CHECK,简称CK     //在进行数据更新操作前设置过滤条件

       |-    外键约束:FOREIGNKEY,简称FK  //控制子表中某一列(父表该列必须设置主键约束或者唯一约束)的内容与父表中的数据范围相匹配

       |-    有约束强制删除表:DROP TABLE 表名CASCADE CONSTRAINT;

       |-    数据的级联删除:ON DELETE CASCADE;   //父表数据删除,对应子表数据自动删除

       |-    数据的级联更新:ON DELETE SET NULL;   //父表数据删除,对应字表数据的对应内容设置为NULL

       |-    增加约束(不要使用):ALTER TABLE 表名称 ADD CONSTRAINT约束名约束类型(字段)[选项]//如有违反主键的数据,则不能添加约束;增加非空约束,只能通过修改表结构完成

       |-    删除约束(不要使用):ALTER TABLE 表名称 DROP CONSTRAINT约束名;     //删除非空约束,只能通过修改表结构完成

 

例1:CREATE TABLE member(

               name VARCHAR2(10) NOT NULL,

               age NUMBER(3)); //name列不允许插入空

例2:CREATE TABLE member(

               name VARCHAR2(10) NOT NULL UNIQUE,

               age NUMBER(3)); //name列不允许插入空且值不允许重复

例3:CREATE TABLE member(

             name       VARCHAR2(10),

             age   NUMBER(3),

             email      VARCHAR2(30),

             CONSTRAINT uk_email UNIQUE(email));  //为约束设置名称

例4:CREATE TABLE member(

       name     VARCHAR2(10),

       age NUMBER(3),

       email     VARCHAR2(30),

       CONSTRAINT age_check CHECK(age BETWEEN 0 AND 200)); //添加约束条件

例5:CREATE TABLE member(

              name     VARCHAR2(10),

              mid       NUMBER,

              CONSTRAINT pk_mid PRIMARY KEY(mid));

 

CREATE TABLE book(

              num       NUMBER(5),

              title       VARCHAR2(20),

              mid       NUMBER,

              CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid));

//REFERENCES参考其他表中的某列数据

例6:CREATE TABLE member(

              name     VARCHAR2(10),

              mid       NUMBER,

              CONSTRAINT pk_mid PRIMARY KEY(mid));

 

CREATE TABLE book(

              num       NUMBER(5),

              title       VARCHAR2(20),

              mid       NUMBER,

              CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid) ON DELETE CASCADE);  //级联删除

 

----------------------------------------------------------------------------------------------------------------

 

序列:

CREATE SEQUENCE 序列名称

[INCREMENT BY 步长]

[START WITH 开始值]

[MAXVALUE 最大值|NOMAXVALUE]

[MINVALUE 最小值|NOMAXVALUE]

[CYCLE|NOCYCLE]      //是否循环

[CACHE 缓存数据|NOCACHE]

 

序列对象.nextval:表示进行序列增长,每调用一次,序列加上指定的步长;

序列对象.currval:表示取得当前的序列内容,不管如何调用,序列内容不改变。

 

例1: INSERT INTO mytab (mid,name) VALUES(myseq.nextval,'张三’);

例2:SELECT * FROM user_sequences;  //查看序列数据字典

 

----------------------------------------------------------------------------------------------------------------

 

同义词 (oracle独占)//其他用户可以直接通过别名而不是“用户名.表名称”访问某用户的数据表

       |-    CREATE[PUBLIC] SYNONYM 同义词名称 FOR用户名.表名称;//不加PUBLIC,system用户不能使用;

 

----------------------------------------------------------------------------------------------------------------

 

视图

       |-    CREATE [OR REPLACE] VIEW 视图名称 AS子查询 [ WITH READ ONLY]

       //用视图封装复杂的子查询;OR REPLACE:如果没有该视图,创建新视图,如果该视图已存在,则修改替换该视图;WITH READ ONLY:不允许修改视图值

       |-    DROPVIEW 视图名称;      //删除视图

例1:SELECT * FROM user_views;  //查看视图数据字典

 

----------------------------------------------------------------------------------------------------------------

 

索引

       |-    CREATE INDEX 索引名 ON用户名.表名称(字段);   //创建索引,将该字段使用二叉树检索(修改时消耗大量资源)

 

----------------------------------------------------------------------------------------------------------------

 

用户管理    //使用sys用户

       |-    CREATE USER 新用户名 IDENTIFIED BY密码;  //创建新用户,但新没有session会话权限

       |-    GRANTCREATE SESSION TO 用户名;   //为用户分配session会话权限

       |-    GRANTCREATE TABLE TO 用户名;       //为用户分配创建数据表权限

。。。。。。

       |-    GRANTCONNECT, RESOURSE TO 用户名;//为用户分配角色,一次性分配权限

       |-    ALTER USER 用户名 IDENTIFIED BY新密码;//修改用户密码

       |-    ALTERUSER 用户名PASSWORD EXPIRE   //用户登录后需要立即修改密码

       |-    ALTERUSER 用户名 ACCOUNTLOCK //锁定用户

       |-    ALTERUSER 用户名 ACCOUNTUNLOCK   //解锁用户

       |-    GRANTSELECT,INSERT,UPDATE,DELETE ON用户名1.表名 TO用户名2    //对象权限:将用户1的某数据表的查看、插入、更新、删除的权限授予给用户2

       |-    REVOKECONNECT,RESOURSE FROM 用户名;

              REVOKE CREATE SESSION,CREATE TABLEFROM用户名;       //撤销权限

       |-    DROPUSER 用户名CASCADE      //删除用户

 

 

----------------------------------------------------------------------------------------------------------------

 

备份

       |-    exp        //备份数据,在cmd命令行的备份目录中启用exp

       |-    imp        //还原数据,在cmd命令行的备份目录中启用img

       |-    冷备份:    1、使用sys登录;

                                   2、找到控制文件:SELECT* FROM v$controlfile;

                                   3、找到重做文件:SELECT* FROM v$logfile;

                                   4、找到数据文件:SELECT* FROM v$datefile;

                                   5、找到配置文件:SHOWPARAMETER pfile;

                                   6、关闭数据库服务:SHUTDOWNIMMEDIATE;

                                   7、拷贝以上文件到指定备份目录

                                   8、启动数据库服务:STARTUP




----------------------------------------------------------------------------------------------------------------

Oracle分页

SELECT  * 

FROM (

SELECT ROWNUM rowno,表名.*

FROM 表名

WHERE ROWNUM <=20

)

WHERE rowno>=10;

----------------------------------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值