数据库的总结

来源:互联网 发布:网络摄像头破解教程 编辑:程序博客网 时间:2024/06/04 19:05

1.ER图 实体(矩形) 关系(菱形) 属性(椭圆)

 本篇主要是讲述了数据库的主题内容,对各个章节进行提纲式的阐述,很多例子并没有详解,在以后遇到时候还会继续探讨。

数据库:减少数据的冗余,节省存储空间

实现数据资源的充分共享

易于编写应用程序

 

2. 数据库数据对象中最基本的是表和视图,

日期时间型:

日期date,时间time,时间戳记timestamp(七部分组成的值(年、月、日、小时、分钟、秒和微秒))

 

表的创建:stusex char(1)[not null with]default'0';

 

1. null可以为空 not null 不可为空,DB2中 空字符串’’不是null

 

2. 一般定义成char型字段,是因为这个字段的数据长度固定,并且实际数据查询

       中, char型比varchar型的效率高

删除表:

DROP TABLE tbl_studentinfo;

修改表:

<字段增加>ALTER TABLEtbl_studentinfo ADD upstuno INTEGER;

ALTER TABLEtbl_studentinfo ADD upstuno INTEGER default NULL;

ALTER TABLEtbl_studentinfo ADD upstuno INTEGER [not null]default '05001';

<字段删除>ALTER TABLEtbl_studentinfo DROP COLUMN stutel;

<字段修改>ALTER TABLEtb1_studentinfo ALTER COLUMN stuname SET DATA TYPE

VARCAHR(30);(修改字段只能对长度进行修改)

 

integrity  accuracy reliability

 

3. 插入多行

INSERT INTO tbl_studentinfo_new (name,address,birthday)

SELECT                 stuname,stuaddr,stubirth

FROM               tbl_studentinfo

数据更新

UPDATE 表名

SET         列名1 = 值1,……, 列名n = 值n

WHERE  条件1

AND       条件2

数据删除:

DELETE FROM tbl_scoreinfo

WHERE 姓名= 'zhangsan'

 

事务(TRANSACTION) 是作为单个逻辑工作单元执行的一系列操作

一致性Consistency

原子性Atomicity

隔离性Isolation

永久性Durability

 

 

4.查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不是真正存储,每次

执行查询只是娴从数据表中提取数据,并按照表的形式显示

SELECT [DISTINCT | UNIQUE] (*, 字段名 [AS 别名], …)

  FROMtablename [AS alise]

  [WHERE condition]

  [GROUP BY ]

  [HAVING ]

  [ORDER BY ]

 

//////////////////////////////////////////////////////

<>不等于

IS NULL/ IS NOT NULL

like 0个或者多个

between (包含两头)

模糊查询

In like

分页查询

SELECT * FROM tbl_studentinfo ORDER BYstuno DESC

    FETCH FIRST 3 ROW ONLY

///

SELECT * FROM (

    SELECT STUNO,STUNAME,

                   ROWNUMBER() OVER(ORDER BY STUNOASC) AS RN

    FROM TBL_STUDENTINFO) AS A1 

WHERE A1.RN BETWEEN 2 AND 3

 

6. 关联检索:

 

笛卡尔关联

想等关联

自我关联

外部关联

 

SELECT A.CLASSNO,B.CLASSNAME,B.SCORE

FROM TBL_SCOREINFO A,TBL_CLASSINFO B

多表关联中,追加的条件应该是可以唯一确定关联表的数据.

如果不能唯一,或出现笛卡尔集合的话,肯定是有条件没有追加完全。

SELECTA.STUNO,A.CLASSNO,B.CLASSNO,B.CLASstuname,A.SCORE

FROM TBL_SCOREINFO A,TBL_CLASSINFO B

WHERE A.CLASSNO = B.CLASSNO;

 

 

select S.stuname as 姓名,cs,className as课程,c.score as 成绩

from tbl_studentinfo as S

join tbl_scoreinfo as c on(S.stuno =C.stuno)

join tbl_classinfo as CS on(CS.classno =C.classno)

外部关联的传统方法在DB2中是不支持的,DB2只支持JOIN的方法

SELECT stuname, classtuname, score

FROM (

          SELECTA.stuname, B.classname, C.score

     FROM tbl_studentinfo A, tbl_classinfo B,tbl_scoreinfo C

          WHEREA.stuno = C.stuno

              AND B.classno = C.classno

            AND B. classno = '002'

              UNION ALL

              SELECT d.stuname, e.classname, f.score

             FROM tbl_studentinfo d, tbl_classinfoe, tbl_scoreinfo f

             WHERE d.stuno = f.stuno

              AND e.classno = f.classno

             AND e. classno = '003'

)

ORDER BY classtuname, score DESC;

 

UNION 与UNION ALL的区别只有一点,UNION会对合并后的结果集进行重复数据

的过滤,UNION ALL 不会。

 

在数据库查询中我们有时需要将数据库的检索结果集进行合并,则这个时候需要用到

集合运算(UNION与UNION ALL)。

group by

SELECT COUNT(*),STATE,CITY

FROM TBL_CUSTOMER

GROUP BY STATE,CITY

 

having

 

SELECT classno AS 课程编号,AVG(score) AS 测试平均成绩

FROM tbl_scoreinfo

GROUP BY classno

HAVING AVG(Score)>70;

//////////////////////////

SELECT  classno, AVG(score)

FROM    tbl_scoreinfo

WHERE   AVG(score) > 70

GROUP  classno;

WHERE 子句中不能使用组函数

/////////////////////

 

 

7 . 子查询

检索子查询

虚拟表子查询

条件子查询

 

单行子查询 = ><><=

多行子查询in any all

 

查询张三的计算机成绩

select C.score

from tbl_studentInfo A,tbl_classInfoB,tbl_scoreInfo C

where A.stuno = C.stuno

and B.classno = C.classno

and A.stuname = '张三'

and B.className = '计算机';

 

 

8. 视图 序列 索引

 

视图是数据库中真实数据的参照。视图可以被看成是虚拟表或存储查询。

 

CREATE VIEW STUSCORE_VI AS

  SELECT A.stuname, B.Classname, C.score

  FROMTbl_StudentInfo A, Tbl_ClassInfo B, Tbl_ScoreInfo C

 WHERE A.Stuno = C.Stuno

 ANDB.Classno = C.Classno

视图不占用物理磁盘空间

优点:

控制数据访问

简化查询

数据独立性

避免重复访问相同的数据

DROP VIEW STUSCORE_VI

 

 

索引是一种数据库物理结构,它以表非常相似的方式占用磁盘空间,并被数据库用于

改善查询性能

CREATE INDEX idx_tblsinfo_sname ONtbl_studentinfo(stuname);

DROP INDEX idx_tblsinfo_sname;

 

CREATE TABLE customer_orders_wk (

  order_id   INT NOT NULL   -- 订单编号

       GENERATED ALWAYS AS IDENTITY

       (START WITH 1

        INCREMENT BY 1

        MINVALUE 1

        NO MAXVALUE

        NO CYCLE

        NO CACHE),

  order_date DATE,                --订单日

  cust_id    INT,                      -- 客户编号

  product_id INT,                  -- 商品编号

  quantity   INT,                     -- 数量

  price      DECIMAL(10,2),     -- 价格

  status     CHAR(9))

游标:cursor

游标是系统为用户开设的一个数据缓冲区,存放sql语句的执行结果,每个游标区都有一个名字用户可以用sql语句逐一从游标中获取记录,并赋给主变量

 

游标声明的语法: DECLARE 游标变量名 CURSOR FOR   SQL的检索文;

游标的赋值的语法:FETCH 游标名 TO 变量1,变量2.. .. ..

创建存储过程

 

过程的创建的语法:

   CREATE PROCEDURE 过程名(参数名1,参数名2……)

   BEGIN

       过程体;

   END;

触发器:

触发器是一个针对表定义的数据库对象,在这个表中插入,更新或者删除行时会激活它CREATE TRIGGER触发器名 BEFORE/AFTER  触发条件

   [REFERENCING NEW AS n OLD AS o]