oracle数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...
oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列
DML语句
insert
向表中插入新的记录
--三种插入方式
--(1)不写字段的名字,直接按照字段的顺序把值逐个往里插
insert intodept2values(50,'DANAME','BEIJING');
--(2)指定某些字段往里插,其他不插的字段默认都是空值
insert intodept2(deptno,dname)values(60,'DNAME2');
--(3)将子查询的结果插入到表中
insert intodept2select * from dept;
update
修改记录。
--对部门号为10的员工的工资加2 倍
updateemp2setsal = sal*2 , ename='2'||ename where deptno =10;
--将编号为7369的员工的经理改为编号为7698 的经理
update emp2 set mgr = 7698 where empno = 7369;
delete
删除员工名为2MILLER的员工
delete fromemp2 where ename =‘2MILLER’;
DDL语句
oracle常用变量类型
binary_integer,主要用来计数而不是用来表示数据类型
number,数字类型
char,定长字符串
varchar2,变长字符串
date,日期类型
long,长字符串,最长2GB
boolean,布尔型,可以取值true,false,null
create
创建新的表,创建表时可以指定字段的约束条件。约束条件通常有:默认约束,非空约束,唯一约束,主键约束,外键约束,check。约束有可以分为列级约束、表级约束。
无约束创建表
create tablestu
(
id number(10),
name varchar2(20),
sdate date,
class number(10),
grade number(2) ,
email varchar2(50)
);
非空约束&check约束&默认约束&唯一约束
可以对某些字段进行非空约束和唯一约束。
--name非空,emali唯一
create tablestu
(
id number(10)check(id>1000),
name varchar2(20)not null,
sdate date,
class number(10),
grade number(2)default1,
email varchar2(50)unique
);
--使用constraint给约束条件取名字,如果不给约束条件起名字,系统会默认的给约束条件起一个名字
create table stu
(
id number(10),
name varchar2(20)constraint stu_name_nnnot 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 tablestu
(
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 tablestuadd(address varchar2(100));
删除列
alter tablestudrop(address);
修改列
alter tablestumodify(address varchar2(200));
删除约束条件
alter tablestudrop constraintstu_class_fk;
添加约束条件
alter tablestuadd constraintstu_class_fk foreign key(class) references class(id);
修改约束条件
通常修改约束条件的方法时把原来的删掉,然后再添加个新的。
drop
删除表。
drop tablestu;
伪列
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 whererownum <=3;
可见,rownum 是对查询结果按照先插入的先显示的顺序进行编号。但是,rownum只能和< 或者 <= 一起用,不能与 > 和 = 一起使用。
(1)求10行以后的后4行的员工编号和姓名
--错误写法,查询结果为空
select empno, ename from emp where rownum > 10;
--正确写法,先对rownum 进行别名显示,别名显示后就可以采用>,>=
select empno, ename from (
selectrownum r,empno,ename from emp
) wherer > 10;
(2)求薪水最高的前5个人
--错误写法,先取出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;
(3)求薪水最高的第6个人到第10个人
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.rowidfrom 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数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...相关推荐
- layui数据表格(一:基础篇,数据展示、分页组件、表格内嵌表单和图片)
表格展示神器之一:layui表格 前言:在写后台管理系统中使用最多的就是表格数据展示了,使用表格组件能提高大量的开发效率,目前主流的数据表格组件有bootstrap table.layui table ...
- SQL 基础篇 SQL 16 查找GPA最高值
SQL基础篇(汇总)刷题传送门 题目链接 题面 样例输入 drop table if exists user_profile; CREATE TABLE `user_profile` ( `id` i ...
- Oracle Database 11g : ocp之SQL 基础
Oracle Database 11g : SQL 基础 第一章:使用SQL SELECT 语句检索数据 使用的表 1.空值 2:列别名 1:定义列别名 2:使用列别名 select FIRST_NA ...
- Oracle学习(一)SQL基础
一.认识SQL SQL是什么? SQL,结构化查询语言,全称是 Structured Query Language. SQL 是一门 ANSI(American National Standards ...
- SQL必知必会(一)SQL基础篇
SQL基础 1.SQL语言 2.SQL开发规范 3.DB.DBS 和 DBMS 的区别是什么 4.SQL执行顺序 1.oracle中执行顺序 2.MYSQL执行顺序 3.sql关键字执行顺序 5. I ...
- java表示语句结束的符号,java基础篇三(运算符号、表达式与语句)
一.运算符 赋值运算符:= 一元运算符: +,正号 -,负号 !,非 ~:取补码,如下例子: Paste_Image.png Paste_Image.png ++,自增一 --,自减一 算数运算符: ...
- mysql的经典sql语句大全_经典SQL语句大全_基础篇_提升篇_技巧篇_开发经典篇
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- PL/SQL基础篇4(游标)
/* 游标:可以用来存放查询结果,逐行提取查询结果,以编程的方式访问数据 类型:1.隐式游标:2.显示游标:3.引用游标 */ /* 在PL/SQL中使用DML语句时自动创建隐式游标 ...
- python基本语法语句-python 语法基础篇 一
安装篇 编辑篇: 编辑python 一 : 在终端环境下输入python命令,回车键运行.这种方式称为 交互方式. 1️⃣ 打开终端: 2️⃣ 输入python 回车 3️⃣ 输入python 语法 ...
最新文章
- 【驱动】GNSS驱动基础
- Exchange Server 2013 DAG高可用部署(四)-服务器配置(上)
- 世道变了!这个AI竞赛不再要刷榜成绩,直接看商业落地计划书
- html canvas抽奖,HTML5 Canvas圆盘抽奖应用(适用于Vue项目)
- 把CentOS启动进度条替换为详细信息
- 使用Fiddler进行iOS APP的HTTP/HTTPS抓包
- SpringSecurity的csrf防护措施
- Redis应用案例 查找某个值的范围
- python读取文件夹下所有图片_python 读取单文件夹中的图片文件信息保存到csv文件中...
- java \t怎么从头开始_如何从头开始以正确的面向对象方式创建Java Web Framework
- Windows SDK编程之一 窗口示例程序
- axis2手动设置命名空间targetNamespace
- 面试官系统精讲Java源码及大厂真题 - 05 ArrayList 源码解析和设计思路
- matplotlib柱状图_Python可视化很简单,一文学会绘制柱状图、条形图和直方图
- python中文版免费下载-PYTHON自然语言处理(中文最新完整版)pdf下载
- 如何在TP-LINk WR340G中禁用端口
- mysql至少选修了两门课程_数据库中用关系代数表达式,查询至少选修两门课程的学生的学号和姓名怎么写?...
- 2016ICPC北京现场赛打铁退役之旅
- Revit二次开发——模型线
- 联想拯救者P7000八代I7 8750H 可以安装WIN7系统吗