赞
踩
重难点:
- 数据模型的三个组成要素
- 数据库系统的三级模式结构以及二级映像
(1)数据(data):数据是数据库中存储的基本对象
(2)数据库(DataBase, DB):数据库是长期存储在计算机内、有组织的、可大量共享的数据的集合
(3)数据库管理系统(DataBase Management System, DBMS):数据库管理系统是位于用户与操作系统之间的一层数据管理软件
(4)数据库系统(DataBase System):数据库系统是由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理、维护数据的系统
(1)人工管理阶段(20世纪50年代中之前)
应用程序与数据之间的对应关系:
(2)文件系统阶段(20世纪50年代末-60年代中)
应用程序与数据之间的对应关系:
(3)数据库系统阶段(20世纪60年代末以来)
数据库系统
应用程序与数据之间的对应关系:
数据管理三个阶段的对比
人工管理阶段 | 文件系统阶段 | 数据库系统阶段 | |
---|---|---|---|
数据的管理者 | 用户(程序员) | 文件系统 | 数据库管理系统 |
数据面向的对象 | 某一应用程序 | 某一应用 | 现实世界(一个部门、企业、组织) |
数据的共享程度 | 无共享,冗余度极大 | 共享性差,冗余度大 | 共享性高,冗余度小 |
数据的独立性 | 不独立,完全依赖于程序 | 独立性差 | 具有高度的物理独立性和一定的逻辑独立性 |
数据的结构化 | 无结构 | 记录内有结构、整体无结构 | 整体结构化,用数据模型描述 |
数据控制能力 | 应用程序自己控制 | 应用程序自己控制 | 由数据库管理系统提供数据安全性、完整性、并发控制和恢复能力 |
(1)两类数据模型:
实体之间的联系有一对一、一对多和多对多等多种类型
实体-联系方法:用 E-R 图来描述现实世界的概念模型
(2)数据模型的组成要素
(3)常用的数据模型
基本层次联系: 是指两个记录以及他们之间的一对多(包括一对一)的联系。
(4)层次模型
定义:
①有且只有一个结点没有双亲结点,这个结点称为根节点
②根以外的其他结点有且只有一个双亲结点
层次模型的数据操纵主要有增删改查,进行增删改的时候,要满足层次模型的完整性约束
优点:
缺点:
(5)网状模型
定义:
①允许一个以上的结点无双亲
②一个结点可以有多于一个的双亲
优点:
缺点:
(6)关系模型
①关系模型的数据结构:
关系的完整性约束条件:实体完整性,参照完整性,用户定义的完整性
优点:
缺点:
(1)“型”和“值”的概念
(2)数据库系统的三级模式结构
重难点:
- 关系、关系模式和关系数据库的概念,选择、投影、来凝结等关系运算
- 关系模型中的三个组成要素
关系模型中的逻辑结构就是一张二维表
(1)域(domain):一组具有相同数据类型的值的集合,即某一“列”的取值范围
(2)笛卡尔积(cartesian product):给定一组域D1, D2, …, Dn,允许其中某些域是相同的,即所有域的所有取值的一个组合
例如: 给出3个域:
D1=导师集合SUPERVISOR={张清玫,刘逸}
D2=专业集合SPECIALITY={计算机专业,信息专业}
D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}则 D1,D2,D3的笛卡尔积 D1 x D2 x D3 = {
(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }
基数为 2 * 2 * 3 = 12
笛卡尔积没有实际意义
(3)三类关系
(4)关系模式
eg:
(1)常用的关系操作
特点:集合操作方式,操作的对象和结果都是集合,一次一集合。
(2)关系代数
选择
eg:在Student
表中查询信息系(IS)的全体学生
投影
eg:查询学生的姓名和所在系
连接
等值连接
自然连接 在结果中去除重复列
外连接:把悬浮元组也保存在关系结果中,在其他属性天上NULL,就叫外连接
左外连接:只保留左边关系R中的悬浮元组
右外连接:只保留右边关系S中的悬浮元组
除运算
重难点:
- SQL-DDL基本语句: CREATE DATABASE,CREATE TABLE
- SQL-DML基本语句:INSERT,DELETE,UPDATE,SELECT
(1)SQL的特点
SQL功能 | 动词 |
---|---|
数据定义DDL | CREATE(创建),DROP(撤销),ALTER(修改) |
数据操纵DML | INSERT(插入),UPDATE(更新),DELETE(删除),SELECT(选择) |
数据控制DCL | GRANT(授权),REVOKE(撤销) |
(2)数据定义
(3)索引的建立与删除
#为Student表按学号升序建立唯一索引
CREATE UNIQUE INDEX SCNO ON Student(Sno);
#修改索引名
ALTER INDEDX SCNO RENAME TO SCSNO;
#删除索引
DROP INDEX SCSNO;
- SELECT
- FROM
- WHERE
- GROUP BY
- HAVING
- ORDER BY
(1)单表查询
#查询全体学生的姓名、出生年份和所在院系
SELECT Sname,Birth,LOWER(Sdept);
#列别名
SELECT Sname,Birth,LOWER(Sdept) DEPARTMENT;
去除重复记录:DISTINCT 关键字
查询条件 | 谓词 |
---|---|
比较 | =,<=>(判断NULL=),>,<, >=,<=,!=,<>,!>,!<;NOT+上述比较运算符 |
确定范围 | BETWEEN AND, NOT BETWEEN AND |
确定集合 | IN NOT IN |
字符匹配 | LIKE, NOT LIKE |
空值 | IS NULL, IS NOT NULL |
多重条件(逻辑条件) | AND, &&, OR, ||, NOT, !, XOR |
#查询所有年龄在20岁以下的学生姓名及其年龄 SELECT Sname,Sage FROM Student WHERE Sage<20; #查询年龄在20~30岁之间的学生姓名 SELECT Sname FROM Student WHERE Sage BETWEEN 20 AND 30; #查询计算机科学系、数学系和信息系学生的姓名和性别 SELECT Sname,Ssex FROM Student WHRER Sdept IN('CS','MA','IS'); #检索所有姓张的学生学号及姓名 SELECT S#,Sname FROM Student WHERE Sname LIKE '张%'; #查询所有有成绩的学生的学号和课程号 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL; #查询计算机系年龄在20岁以下的学生姓名 SELECT Sname FROM SC WHERE Sdept='CS' AND Sage<20;
ORDER BY子句(ASC 升序, DESC 降序; 缺省值为升序)
#查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列
SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC;
聚集函数
聚集函数只能出现在select子句和group by子句的having子句中,不能用在where子句中
#查询学生总人数
SELECT COUNT(*)
FROM Student;
#查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno)
FROM SC;
#计算1好课程的学生平均成绩
SELECT AVG(Grade)
FROM SC
WHERE Cno='1';
SELECT * FROM SC LIMIT 5,10; #检索记录行6-15
GROUP BY子句
#求各个课程号及相应的选课人数
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
(2)连接查询
#按“001”号课成绩由高到低顺序显示所有学生姓名(二表连接)
SELECT Sname FROM Student,SC
WHERE Student.SCourse=SC.SCourse AND SC.SCourse='001'
ORDER BY Sgrade DESC;
#查询每个学生及其选修课程的情况
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno;
#用自然连接替代
SELECT * FROM Student NATURAL JOIN SC
WHERE Student.Sno=SC.Sno;
#求年龄有差异的任意两位同学的姓名
SELECT S1.Sname AS STU1,S2.Sname AS STU2
FROM Student1 S1,Student S2
WHERE S1.Sage > S2.Sahe;
#求既学过“001”号课程又学过“002”号课程的所有学生的学号
SELECT S1.Sno
FROM SC S1,SC S2
WHERE S1.Sno=S2.Sno AND S1.Cno="001" AND S2.Cno="002";
natural
on
连接条件
#查询每个学生及其选修课程的情况(左外连接)
SELECT *
FROM Student LEFT OUTER JOIN SC
ON Student.Sno=SC.Sno;
#查询每个学生的学号、姓名、选修的课程名及成绩
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;
(3)嵌套查询
- max聚集函数查的是最大值,并不是最大值对应的记录(因为符合max的可能有多行,也并不是其中一行)
- 聚集函数仅用于 select 和 having,不用于 where子句
IN
的子查询##########非相关子查询############## #列出张三、王三同学的所有信息 SELECT * FROM Student WHERE Sname IN ('张三','王三'); #列出选修了“001”号课程的学生的学号和姓名 SELECT Sno,Sname FROM Student WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno='001' ); #查询与“刘晨”在同一个系学习的学生 ①确定“刘晨”所在系名 SELECT Sdept FROM Student WHERE Sname='刘晨'; (查询结果为 CS) ②查找所有在CS系的学生 SELECT * FROM Student WHERE Sdept='CS'; ③讲第一步查询嵌入到第二步查询的条件中 SELECT * FROM Student WHERE Sdept IN ( SELECT Sdept FROM Student WHERE Sname='刘晨' ); ############相关子查询############### #求学过001号课程的同学的姓名 SELECT Sname FROM Student Stud WHERE Sno IN( SELECT Sno FROM SC WHERE Sno=Stud.Sno AND Cno='001' );
#由于一个学生只可能在一个系学习,则可以用 = 代替 IN SELECT * FROM Student WHERE Sdept = ( SELECT Sdept FROM Student WHERE Sname='刘晨' ); #找出每个学生超过他选修课程平均成绩的课程号 SELECT Sno,Cno FROM SC x WHERE Grade>=( SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno );
----------------------------------------------------------------------------------持续更新-----------------------------------------------------------------------------------
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。