当前位置:首页 > 资讯 > 正文

数据库基础:术语、表结构与SQL操作详解

数据库基础:术语、表结构与SQL操作详解

一:Lec1

1.一些术语

a. 使用Table代表relation。表中行和列顺序是没有意义的

b. attribute 代表 column--也就是degree。

c. Tuple 代表 row---也就是Cardinality。(注意表中不要有重复的行 duplicate tuples

2.引入键的概念

a. 主键 Primary Key--- 唯一性(能identify 每一行) + 非空

不变性:一旦记录被创建,其主键的值就不应该更改。

单一性:一个表中只能有一个主键。

b. 候选键 Candidate Key --- 也具有唯一性和非空性--(一个表中可以拥有多个候选键)

主键是从候选键中选取的一个。

最小性:候选键是最小的超键,意味着它不能进一步移除任何属性而仍然保持唯一性。

c.超键 Super Key ---- 也具有唯一性识别 ---但增加了包容性---意是可以拥有多列无用的列

比如 只要ID就可以具有唯一性,但是超键可以是ID+Grade。

d. 外键 Foreign Key --- 引用另一个表中的主键用来关联两个表

二:Lec2

1.有关数据库的编程语言

a. Create database Database_Name; 创建

b. Use Database_Name; 使用

c. Create Table Table_Name(

        cloumn1_name  datatype  col-option,

        cloumn2_name  datatype  col-option,

        名字     类型       限制(主键/之类的)

);  

2. 讲一波数据类型-- datatype

a. Char----固定长度,可以接受0~255. 意思就是Char(5) 如果穿进去A,则为'A    '。

b. Varchar --- 不固定长度,可以接受0~65535,会根据传进来的定。

c. TINYINT --- 可接受-128~127, 在unsigned情况下 0~255。

d. SmallInt --- 使用2Bytes记录,可接受 -32768~32767。

e. MediumInt --- 使用3Bytes记录。

f.Int --- 使用4Bytes记录。

h. BIGINT -- 使用8Bytes记录。

i. Float(p) -- P代表精度 in bits ------ 通常使用单精度或双精度。

g. Date --- '1000-01-01'类型

h. DateTime ---- ' 10000- 01- 01 00:00:00.000000'---------TimeStamp-UTC时间

3.讲一下 约束-也是Column Options

a. Not Null --- 非空

b. Unique --- 唯一的       Primary key = Not null + Unique

c. Default value --- 直接给一个默认值

d. Auto_Increasement ----- 每次自动加一,一般总用于主键

练习题1

 

4.讲解如何插值给数据库------Insert

a. 格式

 

b.练习

 

5. 关于修改------ Update

a. 格式

 

b. 练习

 

6. 关于删除------ Delete-------删表跑路 Drop Table if Exists 表名

a. 格式

 

7.详细聊聊约束问题----Constraints 

a. 建表的最后    Constraints 约束名  约束(列名)

b. 一些例子

尤其是外键---Constraint 约束名 Foreign Key(列名) reference 其他表名字 (至少是那个表的候选键)

8. 重中之重---外键约束 Reference Options

a. Restrict ---- 当尝试删除或更新主键表中的一行,并且该行在外键表中有引用时, 选项会阻止删除或更新操作 

b. CASCADE --- 会在主键表中进行的删除或更新操作自动传递到外键表 

例如,当删除用户时,同时删除该用户的所有相关记录。 

c. SET NULL --- 当主键表中的记录被删除或更新时,外键表中的对应记录会被设置为  

分为两种情况ON DELETE -- ON UPDATE

8.关于Alter语句 ----增/改/删

a. 增加一列------ Alter Table 表名 ADD 列名 datatype option

    删除一列 ----- Alter Table 表名 Drop  Column 列名

    修改一列 ----- Alter Table 表名 Change Column 旧列名  新列名 datatype  option

b.  增加约束 ---- Alter Table  表名  ADD Constraint 约束名 具体约束(Unique(col1))

      删除约束 --- Alter Table 表名 Drop Primary Key

三:Lec3

1. 关于Select的一些操作

a. Distinct 去除掉重复的

b.有关Like语句 ---- 查询相关的String

例子 where  列名 like  '%nb%' ------ 意思就是是否包含nb

'%nb' ----- 前缀是nb       'nb%' ------后缀是nb    'nb_' nb后面有一个字符

2.关于表之间的连接

a. 防止两个表有一样的列-----可以Table1.ID = Table2.ID

b. Aliases --- Select column as new_name/  Select * from table_name as new_table_name

3. 子连接   Self-Joins(主要解决同一张表中不同行之间的匹配)

4.子查询  Subqueries ------嵌套语句一般先执行

 

a. IN---check value is in a set  找department_id的1,2,3的所有------可以替代OR

 

b. EXISTS ---- 测试子查询是否返回至少一个行

 

c. ANY /ALL 只要有一个就行/全都

四:Lec4 

1. 四种不同的连接方式

a. Cross --- 交叉连接,返回两表中的所有可能组合,每一行都与另一行进行组合

b. Inner Join --- 内连接 根据指定要求连接两个表才会连接(可以用Using当两个表列名相同

例子: Select * from A Inner Join B ON condition

c. Nactural Join --- 自然连接(自动连接名字相同的列) 

d. Outer Join --- 外连接(Left / Right) Full Outer Join

左连接就是左边全部保留-右边的没有的设置为null,可以有 on condition

2. 关于ORED BY  --- 升降序

a. Select * from table_name where condition ORDER BY 列名(ASC / DESC

3. 讲讲算法

a. COUNT : The number of the rows. ----- 仅计算指定列中非 NULL 值的数量

 

b. SUM --- 计算整列的合

c. AVG ----计算整列的平均

d. MIN 和 MAX

4.Group By --- 主打一个分组 将相同名字的行合并

 
 
 

a. 基础语法

 

b.与 WHERE 的区别

  • 在数据分组之前过滤行,而 在数据分组之后过滤分组。
  • 不能与聚合函数一起使用,因为它在聚合之前应用。 可以用来基于聚合结果过滤分组。

c. 例子--- 首先Where查询---然后用having过滤----确保在 之后和 之前使用 子句。

 

6.集合计算

a.Union --- 将两个表的Selection结果合并成一个

基本语法

 

注意事项

  1. 去除重复行

    • 默认去除两个结果集中的重复行。如果你想包含所有重复行,请使用 。
  2. 列的数量和类型

    • 参与 的每个 语句必须有相同数量的列。
    • 这些列的数据类型必须兼容,以便它们可以被 在结果集中对应起来。
  3. 排序和限制

    • 可以在 语句的最后添加 子句对整个结果集进行排序。
    • 使用 可以限制返回的行数。

例子:

 

五:Lec5 ER图(一般在做后一道题直接让画)

1.如何从一段话中找出实体(Entities -- Table),属性(Attributes -- column), 关系(Relationships -- 外键连接)

a.实体(Entity)

  • 实体代表系统中的一个对象或概念,可以是具体的或抽象的。
  • 在 ER 图中,实体通常以矩形表示,并标有实体的名称。
  • 例如,一个学校系统的 ER 图可能包括“学生”、“课程”、“教师”等实体。

b. 属性(Attribute)

  • 属性是关于实体的数据项。
  • 在 ER 图中,属性通常以椭圆形表示,并通过线连接到其所属的实体。
  • 属性可以是简单的(不可分割的),如学生的“姓名”、“学号”,也可以是复合的(可以分割的),如学生的“地址”(包括街道、城市、邮编)。

c. 关系(Relationship)

  • 关系描述了实体之间的关联。
  • 在 ER 图中,关系通常以菱形表示,并标有描述性名称。
  • 关系可以有不同的基数,例如一对一(1:1)、一对多(1:M)、多对多(M:N)。

2. 详细聊聊基数问题 --- 基数有三种主要类型:一对一(1:1),一对多(1:M 或 M:1),多对多(M:N)

a.  一对一 (1:1)

  • 每个实体 A 中的元素最多只能与实体 B 中一个元素关联,反之亦然。
  • 在数据库中,这通常意味着两个表之间的每个行都是唯一对应的。
  • 例子:每个人最多有一个护照号码,每个护照号码也只能属于一个人。

b. 一对多 (1:M 或 M:1)----- 对于 1:M 关系,线条会在“多”的一端有一个箭头或“鸟爪”标记

  • 实体 A 中的一个元素可以与实体 B 中多个元素关联,但实体 B 中的一个元素最多只能与实体 A 中一个元素关联。
  • 这是最常见的关系类型。
  • 例子:一个老师可以教授多个课程,但每个课程最多只有一个老师。

c. 多对多 (M:N)

  • 实体 A 中的一个元素可以与实体 B 中多个元素关联,反之亦然。
  • 在数据库设计中,多对多关系通常通过引入第三个表(称为关联表或联结表)来实现。
  • 例子:学生和课程之间的关系。一个学生可以选修多个课程,一个课程可以有多个学生。

3. 重中之重 --- 如何从一段话中找出实体属性关系,绘画ER图(会在后续的练习题里详细说)

4.关于M:M关系的问题----当我们发现M:M关系的时候,我们经常引用一个其他表去拆分这种复杂的关系。

a.特点和处理

  • 特点:两个实体集可以相互关联,没有数量限制。例如,一个学生可以选修多个课程,同时一个课程可以被多个学生选修。
  • 处理:在数据库中,直接实现多对多关系是不可能的,因此需要创建一个第三个表(关联表),该表包含两个实体集的外键。

b. 例子

假设有两个实体“学生”和“课程”,它们之间存在多对多关系。为了实现这种关系,我们创建一个名为“学生选课”(StudentCourses)的关联表:

  • 学生表(Students)

    • StudentID(主键)
    • StudentName
  • 课程表(Courses)

    • CourseID(主键)
    • CourseName
  • 学生选课表(StudentCourses) - 关联表

    • StudentID(外键,来自学生表)
    • CourseID(外键,来自课程表)
    • EnrollmentDate(选课日期等额外信息)

5. 同理关于 1:1 的关系也有问题---

这意味着每个实体集中的一个成员都精确地对应于另一个实体集中的一个成员。一对一关系在实际应用中相对较少见,但在某些情况下非常有用。

特点

  • 唯一性:每个实体的实例在对方实体中只有一个对应的实例。
  • 对称性:如果实体 A 中的一个实例与实体 B 中的一个实例相关联,那么实体 B 中的这个实例也只能与实体 A 中的这个实例相关联。

实现方式

  1. 通过外键:在其中一个实体的表中创建一个外键,该外键引用另一个实体的主键。
  2. 双向关联:在两个表中都创建外键,相互引用对方的主键。这种方法不太常见,因为它可能导致数据冗余和维护难度。

最新文章