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]