DML语句

insert

向表中插入新的记录

--三种插入方式

--(1)不写字段的名字,直接按照字段的顺序把值逐个往里插

insert into dept2 values(50,'DANAME','BEIJING');

--(2)指定某些字段往里插,其他不插的字段默认都是空值

insert into dept2(deptno,dname) values(60,'DNAME2');

--(3)将子查询的结果插入到表中

insert into dept2 select * from dept;

update

修改记录。

--对部门号为10的员工的工资加2 倍

update emp2 set sal = sal*2 , ename='2'||ename where deptno =10;

--将编号为7369的员工的经理改为编号为7698 的经理

update emp2 set mgr = 7698 where empno =  7369;

delete

删除员工名为2MILLER的员工

delete from emp2 where ename = ‘2MILLER’;

DDL语句

oracle常用变量类型

binary_integer,主要用来计数而不是用来表示数据类型

number,数字类型

char,定长字符串

varchar2,变长字符串

date,日期类型

long,长字符串,最长2GB

boolean,布尔型,可以取值true,false,null

create

创建新的表,创建表时可以指定字段的约束条件。约束条件通常有:默认约束,非空约束,唯一约束,主键约束,外键约束,check 。约束有可以分为列级约束、表级约束。

无约束创建表

create table stu

(

id number(10),

name varchar2(20),

sdate date,

class number(10),

grade number(2) ,

email varchar2(50)

);

非空约束&check约束&默认约束&唯一约束

可以对某些字段进行非空约束和唯一约束。

--name非空,emali唯一

create table stu

(

id number(10) check(id>1000),

name varchar2(20) not null,

sdate date,

class number(10),

,

email varchar2(50) unique

);

--使用constraint给约束条件取名字,如果不给约束条件起名字,系统会默认的给约束条件起一个名字

create table stu

(

id number(10),

name varchar2(20) constraint stu_name_nn not null,

sdate date,

class number(10),

grade number(2) default 1,

email varchar2(50) constraint stu_email_un unique

);

主键约束&外键约束

主键的一些特性:

(1)可以唯一标识整条记录

(2)非空且唯一

(3)用类型的数值的字段做主键比字符类型的字段更合适

(4)可以用多个字段作为联合主键

外键的一些特性:

(1)建立于一张表的两个字段,或者两张表的两个字段,一个字段去参考另一个字段的值

(2)如果被参考字段没有这个值,不能把参考字段的值设置成为其他的值(如,被参考字段为空,而将参考字段设置为一个非空值是不能的)

(3)被参考的字段必须是主键

(4)被参考的字段不能作为删除条件

--name非空,emali唯一

create table stu

(

id number(10) primary key,

name varchar2(20) constraint stu_name_nn not null,

sdate date,

class number(10),

grade number(2) default 1,

email varchar2(50) constraint stu_email_un unique

);

--建立class表

create table class

(

id number(10) primary key,

name varchar2(20)

);

--stu表的class字段参考class表的id字段,即stu表的class字段是class表的外键

create table stu

(

id number(10) primary key,

name varchar2(20) constraint stu_name_nn not null,

sdate date,

class number(10) references class(id),

grade number(2) default 1,

email varchar2(50) constraint stu_email_un unique

);

列级约束&表级约束

上面sql的约束条件都是写在字段的后面,称为列级约束;还有另一种写法,就是在所有字段的最后用constraint声明,称为表级约束。需要注意的是,非空约束与默认约束只能用于列级约束。

create table stu

(

id number(10) ,

name varchar2(20),

sdate date,

class number(10),

grade number(2) default 1,

email varchar2(50),

check(id>1000),

constraint stu_id_pk primary key(id),

constraint stu_class_fk foreign key(class) references class(id),

constraint stu_email_un unique(name,email)

);

alter

修改现有表的结构。

增加列

alter table stu add(address varchar2(100));

删除列

alter table stu drop(address);

修改列

alter table stu modify(address varchar2(200));

删除约束条件

alter table stu drop constraint stu_class_fk;

添加约束条件

alter table stu add constraint stu_class_fk foreign key(class) references class(id);

修改约束条件

通常修改约束条件的方法时把原来的删掉,然后再添加个新的。

drop

删除表。

drop table stu;

伪列

Oracle表中的数据的默认显示顺序是先插入的先显示,Oracle表中rownum和rowid都是伪列,这两个伪列都可以对记录进行编号排序,很有用处。

rownum

rownum是根据sql查询出的结果给每行分配一个逻辑编号,对查询结果按照1,2,3...进行排列的,但这个字段不会显示出来。每条记录的rownum根据sql查询结果的不同而不同。

--新插入的数据

insert into emp2(empno,ename,deptno) values(8888,'test',80);

select * from emp2;

--选出最早插入的3条记录

select * from emp2 where rownum <=3;

可见,rownum 是对查询结果按照先插入的先显示的顺序进行编号。但是,rownum只能和< 或者 <= 一起用,不能与 > 和 = 一起使用。

行的员工编号和姓名

--错误写法,查询结果为空

select empno, ename from emp where rownum > 10;

--正确写法,先对rownum 进行别名显示,别名显示后就可以采用>,>=

select empno, ename from  (

select rownum r, empno,ename from emp

) where r > 10;

个人

--错误写法,先取出rownum <= 5的记录,再对记录排序

select ename,sal from emp where rownum <= 5 order by sal desc;

--正确写法,先排好序,再取出rownum <= 5的记录

select ename,sal from (

select ename,sal from emp order by sal desc ) where rownum <=5;

个人

select ename,sal from (

select rownum r ,ename,sal from (

select ename,sal from emp order by sal desc )) where r >=6 and r <=10;

分析:先排序,再对rownum 进行别名化,别名显示后就可以采用>,>=。

rowid

rowid是物理结构上的记录,在每条记录插入到数据库中时,都会有一个唯一的物理记录 (不会变)。

select t.*,t.rowid from emp t;

rowid的一个应用

对emp表根据薪水降序分页查询。

--rowid分页,第一步获取数据物理地址rowid

select rowid rid,sal from emp order by sal desc;

--rowid分页,第二步根据rownum取得最大页数

select rownum rn,rid from(select rowid rid,sal from emp order by sal desc) where rownum<10;

--rowid分页,第三步根据rownum别名化rn取得最小页数

select rid from(select rownum rn,rid from(select rowid rid,sal from emp order by sal desc) where rownum<10) where rn>5;

--rowid分页,第四步根据物理地址,查询出具体数据

select * from emp where rowid in(select rid from(select rownum rn,rid from(select rowid rid,sal from emp order by sal desc) where rownum<10) where rn>5);

分析:

分页的关键是根据逻辑rownum取得最小最大页数,然后再根据物理rowid查询出物理记录。第一步先获取数据物理地址,第二步取得最大页数,第三步取得最小页数,第四步因为取得的页数都是物理地址,再根据物理地址,查询出具体数据。

oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列的更多相关文章

  1. 【目录】mysql 基础篇系列

    随笔分类 - mysql 基础篇系列 mysql 开发基础系列22 SQL Model(带迁移事项) 摘要: 一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql m ...

  2. 撸基础篇系列,JAVA的NIO部分

    前言:撸基础篇系列,避免每次都要从头开始看,写个自己的知识体系树 NIO 核心就是异步, 比如,复制文件,让操作系统去处理,等通知 BIO核心类 一,BIO NIO基本操作类 Bytebuffer 构 ...

  3. python基础篇(三)

    PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...

  4. 小猪猪逆袭成博士之C++基础篇(三)字符串

    小猪猪逆袭成博士之C++基础篇(三)字符串 String 写在题外的话: 非常感谢在我发了第一篇随笔以后有很多人看还评论了,这大概就是一种笔记性质的,也不一定全对,如果不对的地方请指出来让我加以改正. ...

  5. java基础解析系列(三)---HashMap

    java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

  6. oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列

      DML语句 insert 向表中插入新的记录   --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 insert into dept2 values(50,'DANAM ...

  7. oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式

      数字字典表 --查看当前用户下面有哪些张表 select * from user_tables; select table_name from user_tables;   --查看当前用户下面有 ...

  8. oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式

    数字字典表 --查看当前用户下面有哪些张表 select * from user_tables; select table_name from user_tables; --查看当前用户下面有哪些视图 ...

  9. oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器

      PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语 ...

随机推荐

  1. 百度开源项目插件 - Echarts 图表

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. 如何利用PHP语言压缩图片?PHP入门教程

    PHP可以控制缩略图清晰度和缩略图之后产生音量的产生.下面我们就来看看如何使用PHP优化我们的压缩图像.  PHP应用程序的开发往往涉及生成缩略图,使用PHP生成缩略图的过程本身并不难,但你知道PHP ...

  3. TP5.1:将外部资源引入到框架中(css/js/font文件)

    为了让我们的框架形式变得更加好看,我们需要加入Bootstrap和Jq文件到框架中 1.通过Bootstrap和jq官网进行相关文件的下载 (1)Bootstrap下载地址:https://v3.bo ...

  4. cesium 实现路径漫游功能

    功能:路径漫游. 详细:绘制多个路径,删除路径,漫游路径选择,路径漫游. ①绘制路径 ②保存路径 ③路径切换 ④路径漫游 ⑤路径删除 ⑥删除完成

  5. cesium 显示视角高度以及鼠标经纬度

    HTML中的内容 <div id="cesiumContainer"> <!-- 设置经纬度显示 --> <span style="font ...

  6. less通用pc移动库

    // less 文件 (移动端通用less文件) // 作者 marchen // 时间 2014/9/1 // 协议 MIT // 只考虑webkit内核手机浏览器和火狐内核浏览器 // 自定义le ...

  7. UESTC 761 LoveZx与期末考试

    被卡的一道题,其他情况都想出来了,主要是没想好A[i] == B[j]时候的处理,取最后面最大的可能不是最优解,相等的时候我暴力比较后缀的(为此还要维护一个链),这个操作是O(len) 所以T了.(也 ...

  8. paper-list

    1.yolo-v1,yolo-v2,yolo-v3 2.ssd,focal loss,dssd 3.fast-rcnn,faster-rcnn,r-fcn,Light-Head R-CNN,R-FCN ...

  9. 写给iOS小白的MVVM教程(一): 从MVC到MVVM之一个典型的MVC应用场景

    前言 本着实践为主的原则,此系列文章不做过多的概念性的阐述和讨论;更多的代码和篇幅用来展示MVC和MVVC下的基础代码结构与具体实现,来展示各自优劣.这篇文章,更多的在于发掘MVC与MVVC的共性,以 ...

  10. Exception occurred during processing request: The given object has a null identifier: com.zsn.crm.Model.SaleVisit; nested exception is org.hibernate.TransientObjectException: The given object has a nu

    edit.jsp页面没有加入隐藏字段 id ,导致模型驱动封装时缺少id ,,调用update更新数据库时出错!