之前的是:oracle 表连接与子查询实例
rownum
--求薪水最低的六位是
select ename,sal from
(
select ename,sal,rownum r from
(select ename,sal from emp order by sal desc)
)where r>6 and r<=10
......................
CreateNewUser:
1-- backup scott
exp
2-- create user
create user sjy identified by sjy default tablespace users quota 10M on users
grant create session, create table,create view to sjy
3-- import the data
imp
....................
create table emp2 as select * from emp; 表备份
rollback 回退!
插入:
SQL> insert into dept2 values(50,'game','nc'); 插入一组字段!
SQL> insert into dept2 (deptno,dname) values(60,'game2'); 插入某几个(特定)字段!
SQL> insert into dept2 select *from dept;把子查询里所有的都插入
-- 问题:
有3各表 S,C ,SC
S(SNO,SNAME)代表(学号,姓名)
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
SC(SNO,CNO,SCGRADE)代表(学号,课号成绩),
问题:
1,找出没选过‘黎明’老师的所有学生姓名
2,列出2门以上(含2门)不及格学生姓名及平均成绩
3,即学过1号课程有学过2号课所有学生的姓名,
请用标准SQL语言写出答案,方言也许(请说明是什么方言)。
1。。。。。。。。
select sname from s join sc on(s.sno = sc.sno)join c(c.cno = sc.cno)
where c.cteacher <>'liming';
2.。。。。。。。
select sname where sno in(select sno from sc where scgrade <60 group by sno having count(*) >= 2)
3.。。。。。。。
select ename from s where sno in(select sno from sc where cno = 1 and cno in
(select distinct sno from sc where cno =2));
------------------------------------------------------------------------------------------------------------------
改:
update emp2 set sal = sal*2 ,ename=ename||'-' where deptno =10;
删:
delete from emp2 where deptno <25;
以上是 DML 语句已经结束了!
DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数据库中的数据。
如insert,delete,update,select(插入、删除、修改、检索)等都是DML.
------------------------------------------------------------------------------------------------------------------
基础预备:
。。。。。。。。。。。。。。。。。。。。。。。。
create table t(a varchar2(10));创建表
SQL> drop table t;表已删除。
。。。。。。。。。。。。。。
用来创建表的SQL语言称为数据定义语言DDL,DDL的英文全称是Data Definition Language,主要用来操纵Oracle数据库的结构
可以使用DDL语句定义、修改和删除在Oracle中存在的每种类型的对象。
数据定义语言主要由CREATE、ALTER与DROP 3个语句组成。
DCL(Data Control Language):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只
有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
transaction: 事物
注意:
1,如果,中间遇到 DDL语句和DCL语句就自动提,交了。rollback 就没有效果了!
2,如果,正常断开就自动提交,如果不是正常断开,就自动rollback:
起始于:DML 语句 结束于 commit
ollback:回退(回滚)
commit :提交 注意:如果,先commit了,rollback将没有效果了!
。。。。。。。。。。。。。。。。。。。
DDL :
数据库常用对象:
数据库常用的数据类型:
1,varchar2 变长字符串最大到4k 如:varchar2(20):范围:0~20;
2, char 定长字符串
3,number(p,s);这个数字一共p位,小数有s位!
4,date 全包括!
5,long 变长字符串 最大到2G
创建表:
1 create table stu
2 (
3 id number(6),
4 name varchar2(20) constraint stu_name_nn not null,
5 sex number(1),
6 age number(3),
7 sdate date,
8 grade number(2) default 1,
9 class number(4),
10 email varchar2(50) unique
11 )
...
insert into stu(name ,email) values('b','null');
两个空值不认为是重复的!
1 create table stu
2 (
3 id number(6),
4 name varchar2(20) constraint stu_name_nn not null,
5 sex number(1),
6 age number(3),
7 sdate date,
8 grade number(2) default 1,
9 class number(4),
10 email varchar2(50),
constraint stu_name_email_uni unique(email,name)
11 )
表示(email ,name) 组合唯一!
。。。。。。。。。。。。。。。。。。。。。。。。。。
主键约束:
主键:可以唯一表示整条记录的值:primary key
语法上:非空,唯一
逻辑上:代表单独唯一一条记录
create table stu
(
id number(6) primary key,
name varchar2(20) constraint stu_name_nn not null,
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4) ,
email varchar2(50),
"constraint stu_class_fk foreign key(class) references class(id),"
"constraint stu_id_pk primary key(id),"可以代替
constraint stu_name_email_uni unique(email,name)
)
。。。。
外键约束:是加载两个字段上!
create table stu
(
id number(6) primary key,
name varchar2(20) constraint stu_name_nn not null,
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4) references class(id), //参考的字段
email varchar2(50),
"constraint stu_class_fk foreign key(class) references class(id), 可以代替"
constraint stu_name_email_uni unique(email,name)
)
create table class
(
id number(4) primary key, //被参考的字段
name varchar2(20) not null
)
注意:被参考的字段必须是主键!
若要插入,只能在被参考的表里插入一个父项关键字,才可以参考表里插入字段!
insert into class values(100,'c1');
insert into stu(id,name,class,email) values(1,'a',100,'a');
。。。。。。。。
SQL> delete from class where id = 100;
delete from class where id = 100
*
第 1 行出现错误:
ORA-02292: 违反完整约束条件 (SCOTT.STU_CLASS_FK) - 已找到子记录
。。。。。。。。。。。。。。
这是不可以的,被参考的值不可以被轻易删除!