数据库(DB):保存有组织的数据的容器。
数据库管理系统(DBMS):创建和操纵数据的容器。
数据库系统(DBS):DB+DBMS(含应用开发工具)+应用程序+数据库管理员(DBA)
数据模型:数据库的类型是根据数据模型来划分的,DBMS也是针对它进行设计的。
DBMS代表数据库管理系统,数据库是数据的集合,管理系统是一组用于存储和检索这些数据的程序;因此DBMS是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。 常见的有:Mysql, Oracle ,Sybase等。
关系 (Relation) :一个关系对应一张表;
元组 (Tuple) :表中一行为一个元组;
属性(Attribute):表中一列为一个属性,给每一个属性起一个名称即属性名;
码(Key) :唯一确定一个元组的属性或属性组;
域(Domain) : 针对属性的取值范围集合 ,是一组具有相同数据类型的值的集合。 比如性别取值为男、女、学号的长度为8位等, 所有的域都是原子数据(Atomic Data) ;
目或度(Degree):R表示关系的名字,n是关系的目或度;
分量:元组中的一个属性值;
候选码(Candidate Key):如果关系中的某一属性或属性组的值能唯一的标识一个元组,称为该属性或属性组为候选码。
主码(Primary Key):主键,如果一个关系有多个候选码,则选定一个作为主码。 可以人为选定一个键作为一张表的主键。一张表可以没有主键。选定为主键的那一列数据里面不能出现空值(NULL),且要满足作为键的条件。
主属性(Prime Attribute):包含任何候选码中的属性称为主属性,不包含任何候选码的属性称为非主属性。
外码(Foreign Key):关系模式R中的属性或属性组非该关系的码,但他是其他关系的码,那么该属性集对关系模式R而言是外码,也称为外键。 用于强制约束表与表之间的联系
全码(ALL-key):关系模型的所有属性组是这个关系模式的候选码,称为全码。
关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,……,属性n)学生(学号,姓名,年龄,性别,系,年级);
注意规范:不能出现大表套小表。
基本关系:实际存在的表,是实际存储数据的逻辑表示。
查询表:查询结果对应的表。
视图表:由基本表或其他视图表导出的表,本身不独立存储在数据库中,数据库中只是存放定义,所以又称为虚表。
型:对某一类数据的结构和属性的说明,(学号,姓名,性别,系别,年龄,籍贯);
值:是型的一个具体赋值,(201315130,李明,男,计算机,19,江苏);
模式:模式是相对稳定的,即属性名的集合;
实例:模式的一个具体值,反映数据库某一时刻的状态,同一个模式可以有很多实例,实例随数据库中的数据的更新而变动;
例子:对于成绩单,科目的那一行表示的是模式,每一个人的成绩一行表示一个实例。
模式:数据库中全体数据的逻辑结构和特征的描述,所有用户的公共数据视图,综合了所有用户的需求,一个数据库只有一个模式,模式是相对稳定的,但是实体是相对变动的;
外模式:模式的子集,一个数据库可以有多个,是数据库中局部数据的逻辑结构和特征的描述;
内模式:1)是数据物理结构和存储方式的描述;2)是数据在数据库内部的表示方式,一个数据库只有一个内模式。
练习网站: SQL Fiddle
select 需要展示的字段,* 代表全部字段
from 从哪一张表展现
where 后面跟着一些过滤条件,多个过滤条件使用 and / or 来连接
order by 根据某几个字段来排序,后面跟着ACS代表升序,DESC代表降序
limit 最多展示多少行数据。使用limit是一个好习惯,不然可能会不小心一次性展示几百万条数据。
建表:
CREATE TABLE `student_info` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id,主键', `student_name` varchar(50) COMMENT '学生姓名', `student_age` int COMMENT '学生年龄', `student_sex` varchar(10) COMMENT '学生性别', `class_name` varchar(20) COMMENT '所在班级', PRIMARY KEY (`id`) ); INSERT INTO `student_info` (`student_name`, `student_age`,`student_sex`,`class_name`) VALUES ('葛尧', 8 , '男', '1班') ; INSERT INTO `student_info` (`student_name`, `student_age`,`student_sex`,`class_name`) VALUES ('XH', 19 , '男','2班') ; INSERT INTO `student_info` (`student_name`, `student_age`,`student_sex`,`class_name`) VALUES ('QHR', 24 , '男','3班') ; INSERT INTO `student_info` (`student_name`, `student_age`,`student_sex`,`class_name`) VALUES ('GG', 22 , '女','1班') ; INSERT INTO `student_info` (`student_name`, `student_age`,`student_sex`,`class_name`) VALUES ('GYX', 17 , '女','2班') ; INSERT INTO `student_info` (`student_name`, `student_age`,`student_sex`,`class_name`) VALUES ('WR', 9 , '女','3班') ;
常用函数:
求和:sum()
对数字进行sum,不能对名字、班级这些文字进行求和。
select sum(`student_age`) as '年龄和' from `student_info` where `student_sex`='女' ;
求个数:count(任意)
select count(1) as '成年男学生数目' from `student_info` where `student_sex`='男' and `student_age` > 17 ;
求平均:avg()
select sum(`student_age`)/count(1) as '使用多个函数组合求成年男学生平均年龄', avg(`student_age`) as '使用avg函数求成年男学生平均年龄' from `student_info` where `student_sex`='男' and `student_age` > 17 ;
子查询
需求: 列出所有的,女性人数小于2的门派
SELECT * FROM ( SELECT `student_class` as '门派', `student_sex`, count(1) as '人数' FROM `student_info` GROUP BY `student_class`, `student_sex` ORDER BY `人数` DESC, `门派` ) son_result WHERE son_result.`student_sex` = '女' and son_result.`人数` < 2 ;
基本要素包括实体集和联系
实体集&属性(矩形): 描述数据内部结构,具有相同属性的实体具有相同的特征和性质
联系集(菱形及连线): 描述外部结构,联系也称关系,在信息世界中反映实体内部或实体之间的联系
常见的联系集类型(映射基数)分为一对一(1:1)、一对多(1:n)和多对多(m:n)
建图:第一种是从需求分析阶段得到的数据流图(DFD)和数据字典(DD)来建立模型;第二种是根据对现实世界的理解,直接进行建模。
我们将其转换为关系模式如下:
商店(商店编号,店名,店址,店经理)
商品(商品编号,商品名,单价,产地)
职工(职工编号,职工名,性别,工资)
销售(商店编号,商品编号,月销售量)
服务(商店编号,职工编号,参加工作时间)