Oracle第三课(学习中笔记)

复习
一。连接查询
等值连接 FROM A a, B b WHERE a.id = b.id
不等值连接 FROM A a ,B b WHERE a.id between b.aid  and b.bid ;
自连接 FROM A a, A b where a.id = b.id
外连接

class    student
1    1001
2    1002

WHERE CLASS.ID(+) = STUDENT.CID;

二。组查询
single-row单行函数
upper(name)更改数据为大写
round(age)单个处理四舍五入

group function 分组函数
count(*) 查询数量
avg(age) 查询平均值

三。
group by :
select count(*),min(salary)
frome table_emplpyee
group by age
分组后进行条件的过滤
having count(*)>2 (hanving专属于group by )

例:
SELECT COUNT(*)
FROM TABLE
WHERE AGE >20 AND AGE <30 由此问上是取出大于20小于30的年龄
GROUP BY AGE  利用age进行分组
HAVING COUNT(*)>10 取分组后的数据中count(*)>10的内容
ORDER BY AGE 最后将所有的数据进行排序


group by trunc(age/10) 将1-10,10-20,20-30 进行分组
要是我们要在21-31 进行分组呢。应当如此写法
group by trunc((age-1)/10)

subquery
SELECT * FROM A WHERE A.ID IN (
    SELECT AVG(AGE) FRME B
)

分页(子查询)
page
SELECT * FROM (
    SELECT D FROM P
)

使用rownum表示当前行的行号
-----------------------------------------------


E-R图的绘画。
one-to-one
many-to-one
many-to-many

范式
第一范式(INF):在关系模式R中的每一种具体关系R中,如果每个属性值都是不可再分的最小数据单位,
则称为R是第一范式的关系
第一范式简单地说,就是要求属性具有原子性,不可再分解。第一范式面临出第二范式。
第二范式(2NF):如果关系模式R(U,F)中的左右非主属性都完全依赖于任意一个候选关键字,则称关系R是属于第二范式。
第二范式简单地说,就是每个表有个主键,其他字段完全依赖于该主键,第二范式的问题?引出第三范式。
第三范式(3NF);如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖,则成关系R是属于第三范式的。
第三范式是很重要的,表示了不要存在值的依赖关系。


第四章节TABLE
Datetype
VARCHAR2
CHAR
VARCHAR

CREATE TABLE JUL12_TEST_CHAR(
    a char(10),
    b varchar(10),
    c varchar2(10)
)

INSERT INTO JUL12_TEST_CHAR VALUES('AAA','AAA','AAA');
SELECT LENGTH(A),LENGTH(B),LENGTH(C) FROM JUL12_TEST_CHAR
CHAR为不可变
VARCHAR为可变类型,为微软的标准。
VARCHAR2也为可变类型,只有Oralce自己可以用。
VARCHAR2的类型最多可以放置4000个字符。

NUMBER
CREATE TABLE JUL12_TEST_NUMBER(
    A NUMBER,
    B NUMBER(3),
    C NUMBER(5,2)
);

INSERT INTO JUL12_TEST_NUMBER (A) VALUES(1234);
INSERT INTO JUL12_TEST_NUMBER (A) VALUES(123123123123123);
INSERT INTO JUL12_TEST_NUMBER (A) VALUES(123.12);
如此可见 NUMBER就是什么样的数据都可以添加进入数据库
INSERT INTO JUL12_TEST_NUMBER (B) VALUES(2.234);
如此可件 NUMBNER(3可添加的都是整数,而位数最多为三位,若添加小数,则在开始的时候就被取整
INSERT INTO JUL12_TEST_NUMBER (C) VALUES(1.2312);
INSERT INTO JUL12_TEST_NUMBER (C) VALUES(123.12312);// 可以插入但是小数被转化成2位
INSERT INTO JUL12_TEST_NUMBER (C) VALUES(12344); //  不能插入
如此可见 NUMBER(5,2)中可以添加小数的位数必须为2。那么整数的位数就只能为三了。

当然也可以 使用INT   他的范围和变成语言中的是一样的。

日期格式
CREATE TABLE JUL12_DATE
(
    D DATE
);

INSERT INTO JUL12_DATE VALUES(SYSDATE);
INSERT INTO JUL12_DATE VALUES('09-AUG-08');
INSERT INTO JUL12_DATE VALUES(TO_DATE('AUG:03:08','MM:DD:YY'));

SELECT TO_CHAR(D,'DD-MM-YY HH24:MM:SS') FROM JUL12_DATE;
INSERT INTO JUL12_DATE VALUES(TO_DATE('AUG:18:2008 12:23:10','MM-DD-YY HH:MI:SS'));


----CLOB   BLOB


=====================================================
主键。。。
PRIMARY KEY
CREATE TABLE JUL12_PK(
    ID NUMBER(4) PRIMARY KEY,
    NAME CHAR(10)
);

INSERT INTO JUL12_PK VALUES(1,'AA');
INSERT INTO JUL12_PK VALUES(2,'BB');
INSERT INTO JUL12_PK VALUES(3,'CC');

CREATE TABLE JUL12_PK1(
    ID NUMBER(4) ,
    NAME CHAR(10),
    CONSTRAINT S_1PK PRIMARY KEY(ID)
);


ALTER TABLE JUL12_STUDENT_04
ADD CONSTRAINT SS_PK
PRIMARY KEY(SID);

非空约束
CREATE TABLE JUL12_NULL(
     ID NUMBER(3) PRIMARY KEY,
    NAME VARCHAR(10) NOT NULL
);

ALTER TABLE JUL12_NULL  MODIFY NAME NULL;

--unique唯一性约束
CREATE TABLE JUL12_UNIQUE1(
    ID NUMBER PRIMARY KEY,
    NAME CHAR(10) UNIQUE
);

INSERT INTO JUL12_UNIQUE1 VALUES (1,'ZAHNG');
INSERT INTO JUL12_UNIQUE1 VALUES (2,'ZHANG');

、、CHECK
加查值是否在约束的范围里面
CREATE TABLE JUL12_CHECK(
    A CHAR(3)
    CONSTRAINT CHECK_A CHECK (A IN ('A','B','C'))
);

---FOREIGN KEY
CREATE TABLE JUL12_TEST_CLASS(
    CID NUMBER(3) PRIMARY KEY,
    CNAME VARCHAR2(10) UNIQUE
);
CREATE TABLE JUL12_TEST_STUDENT(
    SID NUMBER(3) PRIMARY KEY,
    SNAME VARCHAR2(10) NOT NULL,
    CID NUMBER(3) ,
    CONSTRAINT JUL12_FK_SC FOREIGN KEY(CID) REFERENCES
    JUL12_TEST_CLASS(CID)
);

INSERT INTO JUL12_TEST_CLASS VALUES(1,'JAVA');

INSERT INTO JUL12_TEST_STUDENT VALUES(101,'ZHANG',1);

先删除子表,然后再删除父表。

级联删除呢?
DELETE FROM JUL12_TEST_CLASS;

alter TABLE JUL12_TEST_STUDENT MODIFY
    CONSTRAINT JUL12_FK_SC1 FOREIGN KEY(CID) REFERENCES
    JUL12_TEST_CLASS(CID) ON DELETE CASCADE;
-------实现级联删除,父表删除则子表关于删除列的内容全部删除
1。删除以前约束
ALTER TABLE JUL12_TEST_STUDENT DROP CONSTRAINT JUL12_FK_SC;
2。建立新的符合要求的约束
ALTER TABLE JUL12_TEST_STUDENT ADD
    CONSTRAINT JUL12_FK_SC1 FOREIGN KEY(CID) REFERENCES
    JUL12_TEST_CLASS(CID) ON DELETE CASCADE;
-------删除后子表的该字段为NULL
1。删除以前的约束
ALTER TABLE JUL12_TEST_STUDENT DROP CONSTRAINT JUL12_FK_SC1;
2。建立信的符合要求的约束
ALTER TABLE JUL12_TEST_STUDENT ADD
    CONSTRAINT JUL12_FK_SC1 FOREIGN KEY(CID) REFERENCES
    JUL12_TEST_CLASS(CID) ON DELETE SET NULL;

约束名字在user_constratints表中
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM
USER_CONSTRAINTS WHERE TABLE_NAME='JUL12_TEST_STUDENT';
posted @ 2008-08-06 18:43  系咪噶  阅读(353)  评论(0编辑  收藏  举报