SQL基础教程

1.数据库的相关概念

1.1 数据

1.2 数据库

1.3 数据库管理系统

1.4 数据库系统

1.5 SQL

1.6 数据模型

1.6.1 定义

数据模型是对现实世界数据特征的抽象,也就是说数据模型是用来描述数据、组织数据和对数据进行操作的。数据模型是数据库系统的核心和基础。

数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成。

  1. 数据结构描述数据库的组成对象以及对象之间的联系,是所描述的对象类型的集合,是对系统静态特性的描述。
  2. 数据操作是指对数据库中的各种对象(型)的实例(值)允许执行的操作集合,包括操作及有关的操作规则。数据库主要有查询和更新(包括插入、删除、修改)两大类操作。数据操作是对系统动态特性的描述。
  3. 数据的完整性约束条件是一组完整性规则。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。数据模型应该反应和规定其必须遵守的基本和通用的完整性约束条件,并且提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。

1.6.2数据模型的三个要求和两大类

三个要求:

  • 一是能比较真实的模拟现实世界;
  • 二是容易为人所理解;
  • 三是便以在计算机上实现

两大类

  1. 概念模型,也称信息模型 ,它是按照数据的观点来对数据和信息进行建模,主要用于数据库设计。
  2. 逻辑模型和物理模型
    逻辑模型主要包括层次模型、网状模型、关系模型、面向对象数据模型和对象关系数据模型、半结构化数据模型等。它是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。
    物理模型是对数据最底层的抽象,它描述数据在系统内部的表达方式和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。物理模型的具体实现是数据库管理系统的任务,数据库设计人员要了解和选择物理模型,最终用户则不必考虑物理级的细节。

关系模型

  • 定义:关系模型是最重要的一种数据模型,关系数据库系统采用关系模型作为数据库的组织方式。关系模型是建立在严格的数学概念的基础上的。

关系模型中的一些术语

  • 码:也称为码键。表中得某个属性组,他可以唯一确定一个元组,学号可以唯一确定一个学生,也就成为本关系的码。
  • 域:是一种具有相同数据类型的值的集合。

关系模式

  • 对关系的描述,一般表示为关系名(属性1,属性2…属性n)。关系模型要求关系必须是规范化的,其中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项。
关系术语一般表格的术语
关系名表名
关系模式表头(表格的描述)
关系(一张)二维表
元组记录或行
属性
属性名列名
属性值列值
分量一条记录中的一个列值 or 元组中的一个属性值
非规范关系表中有表(大表中有小表)

关系模式的优点

  • 关系模式与格式化模型不同,它是建立在严格的数学概念的基础上的;关系模型的概念单一;关系模型的存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作:缺点:查询效率不如格式化模型;增加了开发数据库管理系统的难度。

1.7 数据库系统的三级模式机构

  • 模式也称为逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式是技术是数据库数据在逻辑上的视图。一个数据库只有一个模式。数据库管理系统提供模式数据定义语言(模式DDL)来严格的定义模式。
  • 外模式也称为子模式或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。外模式通常是模式的子集,一个数据库可以有多个外模式。每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。数据库管理系统提供外模式数据定义语言(外模式DDL)来严格的定义外模式。
  • 内模式也称为存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述。是数据在数据库内部的组织方式。

外模式/模式映像:模式描述的是数据的全局逻辑结构,外模式描述的是局部的逻辑结构。当模式改变时(例如增加了新的关系新的属性等)有数据库管理员对各个外模式/模式的映像做相应改变,使外模式保持不变。应用程序是根据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性

模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。当数据库的存储结构改变时,有数据库管理员对模式/内模式映像做相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性,简称数据的物理独立性

2.关系数据库

2.1 关系数据结构

1.关系的定义

  • 一组具有相同数据类型的值的集合。
  • 例如:整数、实数、介于某个取值范围的整数、指定长度的字符串集合、{‘男’,‘女’}

笛卡尔积

  • 设任意的N个域D1,D2,…,Dn。
  • 定义D1,D2,…,Dn的笛卡尔积为:D1 × D2 × … × Dn = {(d1,d2,…,dn)|di ∈
    Di,i=1,2,…,n}。
  • 例如(D1的取值类型都为动物,D2的取值类型都为菜食物):D1={猫,狗,猪},D2={鱼,骨头,白菜},则D1乘D2={(猫,鱼),(猫,骨头),(猫,白菜),(狗,鱼),(狗,骨头),(狗,白菜),(猪,鱼),(猪,骨头),(猪,白菜)}
  • 分量(Component):
    笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量。
  • 元组(Tuple):
    笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组,就是组合中的一种情况,n表示属性个数。
  • 基数(Cardinal number):
    一个域允许的不同取值个数称为这个域的基数
  • 笛卡尔积的表示方法:
    笛卡尔积可表示为一个二维表。表中的每行对应一个元组,表中的每列对应一个域,每个格子为一个分量。

关系

  • D1 × D2 × … × Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为:R(D1,D2,…,Dn)
    R:关系名
    n:关系的目或度(Degree)。
    关系是笛卡尔积的有限子集,笛卡尔积不满足交换律,关系满足交换律(关系的每个列附加一个属性名以取消关系元组的有序性)。

  • 单元关系与二元关系:
    – 当n=1时,称该关系为单元关系(Unary relation)。
    – 当n=2时,称该关系为二元关系(Binary relation)。

  • 属性(Attribute):
    关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。n目关系必有n个属性。

  • 码(Key): 候选码(Candidate key):若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码(如学号,身份证号)。
    在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码(All-key)。
    若一个关系有多个候选码,则选定其中一个为主码(Primary key)。
    候选码的诸属性称为主属性(Prime attribute)。不包含在任何侯选码中的属性称为非码属性或非主属性(Non-key attribute)。

三类关系:

  • 基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示。
  • 查询表:查询结果对应的表。
  • 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。

基本关系的性质:

  • 列同质的(Homogeneous)每一列中的分量是同一类型的数据,来自同一个域。
  • 不同的列可出自同一个域,其中的每一列称为一个属性。
  • 不同的属性要给予不同的属性名。 列的顺序无所谓(属性名打破有序性)。
  • 任意两个元组不能完全相同(候选码不同) 行的顺序无所谓,即行的次序可以任意交换。
  • 分量必须取原子值,每一个分量都必须是不可分的数据项。这是规范条件中最基本的。

2. 关系数据库的基本概念

关系模式

  • 在关系型数据库中,关系模式是型,关系是值。
  • 关系模式是对关系的描述:元组集合的结构(属性构成、属性来自的域 、属性与域之间的映象关系),完整性约束条件,元组语义。
  • 关系模式的表示:R(U,D,dom,F)
  • R表示关系名;U是组成该关系的属性名集合;D是属性组U中属性来自的域;dom是属性向域的映像关系;F是属性间的数据依赖关系集合
    简记:R(U)或者R(A1,A2,A3…An),例如:学生情况(姓名,班级,学号,身份证号等)

关系数据库

  • 采用关系模式的数据库
  • 在一个给定的应用领域中,所有关系的集合构成一个关系数据库

3. 关系操作

常用的关系操作

  • 查询:选择、投影、连接、除、并、交、差、笛卡尔积
  • 基本操作:选择、投影、并、差、笛卡尔积
  • 数据更新:插入、删除、修改
  • 查询的表达能力是其中最主要的部分

关系操作的特点

  • 集合操作方式:即操作的对象和结果都是集合
  • 非关系数据模型的数据操作方式:一次一记录

关系数据语言的种类

在这里插入图片描述
关系数据语言的特点

  • 关系语言是一种高度非过程化的语言,存取路径的选择由DBMS的优化机制来完成,用户不必用循环结构就可以完成数据操作。能够嵌入高级语言中使用。
  • 关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价。

4. 关系的完整性

  • 关系模型的完整性规则是对关系的某种约束条件
  • 实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。

关系的完整性: 保证行不重复(唯一)

  • 实体完整性约束
    主键约束(primary key):非空且唯一
    唯一键约束(unique):唯一

  • 参照完整性约束:

    存在两个关系(表)R和S,F是一个属性或者属性集合;F属于R但不是R的主键,同时F属于S并且F是S的主键,则称F是基本关系R的外码,R为外键表,S为主键表
    外键约束(foreign key):表与表之间建立联系

  • 域完整性约束: 用户定义的完整性规则
    由用户根据实际情况对数据库中的数据内容进行规定,对列的约束
    检查约束(check):添加范围
    数据类型约束(int、char等)
    默认约束(default)
    非空约束(not null)

5. 关系代数

  • 定义:一种抽象的查询语言,用对关系的运算来表达查询。三要素:运算对象、运算结果、运算符。
  • 分类
    传统的集合运算符:将关系看成元组的集合,运算是从关系的“水平”方向即行的角度来进行
    专门的关系运算符:不仅涉及行而且涉及列
    算术比较符:辅助专门的关系运算符进行操作
    逻辑运算符:辅助专门的关系运算符进行操作

(1)传统的集合运算符:并、交、差、笛卡尔积

  • 笛卡尔积:两个表的字段加在一起(相当于拼起来),例如:

在这里插入图片描述

  • 并:关系R和S具有相同的关系模式,属性相同,域相同(相当于表格增加行数)

在这里插入图片描述

  • 交: R和S具有相同的关系模式,R和S的交是属于集合R有属于集合S的元素组成的集合
  • 差: R和S具有相同的关系模式,R和S的差是有属于关系R但不属于关系S的元素构成的集合

在这里插入图片描述
(2)专门的关系运算: 投影、选择、连接、除法

  • 投影:(对关系进行垂直分割) 关系R上的投影是R上选择出若干个属性列组成新的关系(从表中选择列)

在这里插入图片描述
举例:将a1和a3进行投影,去掉重复的:
在这里插入图片描述

  • 选择(对关系进行水平分割): 挑选满足条件的行,SQL语句对应where 子句
  • 连接: 两个关系的笛卡尔积中选取满足条件的元组(两个关系先做笛卡尔积,在用条件筛选出满足条件的行)
    等值连接和自然连接(去掉了重复的等值连接) 两种连接方式

在这里插入图片描述

  • 自然连接: 两张表中属性名相同的值也相同的进行组合构成一个新的关系

在这里插入图片描述

  • 外连接、左外连接、右外连接的例子:

在这里插入图片描述
在这里插入图片描述

  • 除法(笛卡尔积的逆运算):
    象集: 给定关系R(A,B),A,B为属性组。表示A属性上a在B上的分量就是象集
    例如:
    | A|B |
    | a1|b1 |
    | a2|b2|
    | a2|b3 |
    a1对应的象集为(b1)
    a2对应的象集为:(b2,b3)
    步骤:R/S
    stop1:找到两个关系中属性相同的列
    step2:R/S就是相同的列中属于R但不属于S的列
    step3:找到R中列的元素所对应的象集,和S在和R相同列的投影
    step4:象集包含S中得到的投影的元素就是除法的结果
    例子:
    在这里插入图片描述

2.MySQL数据库

2.1 MySQL安装
2.2 MySQL配置

2.3 MySQL登陆和退出

/*两种连接方式*/
mysql -uroot -ppass						-- 连接本地SQL,账号为root,密码为pass
mysql -h192.168.206.100 -uroot -ppass	-- 连接远程SQL,IP为192.168.206.100,账号为root,密码为pass
/*三种退出方式*/
exit;
quit;
\q;

2.4 MySQL卸载
2.5 MySQL数据类型

3.关系数据库标注语言SQL

3.1SQL 增删改查关键词

  • 增:insert
  • 删:delete
  • 改:update
  • 查:select

3.2. select语句

3.2.1 select基本语句

  1. 功能:select语句用于从数据库中选取数据
  2. 结果:选取结果被存储在一个结果表中,称为结果集
  3. 语法:
SELECT column_name,column_name # 特定列,*代表所有列
FROM table_name;

3.2.2. select…where语句

  1. 功能:where子句用于提取那些满足指定条件的记录
  2. 语法:
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

3.2.3. select…order by语句

  1. 功能:order by用于对一列或多列数据进行升序或降序排列
  2. 语法:默认升序排列,即ASC,如果要对某元素按降序排列则在对应关键字后添加参数DESC
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
例:ORDER BY column1 DESC,column2,column3 DESC

3.2.4. select…group by语句

  1. 功能:group by语句用来对相同的数据进行分组。
  2. 语法:
SELECT column1,column2....columnN
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

3.例子
在这里插入图片描述

3.3. select…join语句(操作多个表)

  1. 功能:join子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
  2. 类型:
    INNER JOIN:交集
    LEFT JOIN:以左表为基础,进行两个表的行连接;会显示左表的所有行,右表若不匹配,则为null
    RIGHT JOIN:以右表为基础,进行两个表的行连接;同上述左表
    FULL JOIN:并集
    具体例子见:INNER JOIN、LEFT JOIN、RIGHT JOIN添加链接描述
  3. 不同类型的join语句功能图解:

在这里插入图片描述
4.例子
在这里插入图片描述

3.4. insert into语句

  1. 功能:向表中插入新记录,可以插入一行或多行
  2. 语法:
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);

3.例子
在这里插入图片描述

3.5. update语句

  1. 功能:更新表中已存在的记录
  2. 语法:set关键词
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

3.6. delete语句

  1. 功能:用于删除表中的行
  2. 语法:DELETE FROM
DELETE FROM table_name
WHERE some_column=some_value;

3.7. 子查询(嵌套查询)语句

  1. 功能:在一个查询语句中使用另一个查询语句的结果,用于无法一次查询到所需内容的情况。
  2. 子查询可以和select、insert、update和delete语句一起使用,并可以使用运算符如=、<, >, >=,
    <=、IN、BETWEEN等。
  3. 子查询常用在 WHERE 子句和 FROM 子句后边:
    当用于where子句时,根据不同的运算符,子查询可以返回单行单列、多行单列、单行多列数据。子查询就是要返回能够作为where子句查询条件的值。
    当用于from子句时,一般返回多行多列数据,相当于返回一张临时表,这样才符合from后面是表的规则。这种做法能够实现多表联合查询。
  4. 子查询必须遵循的几个规则
    子查询必须用括号括起来。
    子查询在select子句中只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较
    order by不能用在子查询中,虽然主查询可以使用order by。可以在子查询中使用 GROUP BY,功能与 ORDER BY 相同
    子查询返回多于一行,只能与多值运算符一起使用,如in运算符
    between运算符不能与子查询一起使用。但是,between可在子查询内使用。
  5. 语法:
# 用于where子句的基本语法
SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
    (SELECT column_name [, column_name ]
    FROM table1 [, table2 ]
    [WHERE])

# 用于from子句的基本语法
SELECT column_name [, column_name ]
FROM (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE]) AS temp_table_name
# 用于 FROM 的子查询返回的结果相当于一张临时表,所以需要使用 AS 关键字为该临时表起一个名字。
WHERE  condition

# 单行单列:WHERE查询条件中包含比较运算符,比如 >、<、>=、<=、=、!= 等
SELECT *
   FROM CUSTOMERS
   WHERE SALARY > (SELECT SALARY
         FROM CUSTOMERS
         WHERE NAME='Komal');

# 单行单列:WHERE查询条件中包含逻辑运算符(AND、OR 等)
SELECT *
   FROM CUSTOMERS
   WHERE SALARY > (SELECT SALARY
         FROM CUSTOMERS
         WHERE NAME='Komal')
   AND SALARY < 10000;

# 单列多行数据,一般和 IN、NOT INT、ANY 关键字使用
SELECT *
   FROM CUSTOMERS
   WHERE ID IN (SELECT ID
         FROM CUSTOMERS
         WHERE SALARY > 4500)
   AND AGE >= 25;

4.数据库安全性

5. 数据库完整性

参考:添加链接描述
添加链接描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值