数据库系统学习系列--概览

数据库概览

在这里插入图片描述
这张图大概展示了数据库的结构,DBMS是Database Manage System的缩写,与以往管理方式不同,数据库不再是一个app对应一个独立的数据库,而是多个app由一个统一的DBMS接口管理,当app需要调取或改动数据时,通过统一接口和数据管理系统(DBMS)对数据库进行操作


Command Types

四种command types
一共有四种command types,按我的个人的理解,DDL主要用来创建表格create table或删除drop table,定义primary key/foreign key等;DML用于对数据库进行操作,添删增改等;

DDL(Data Definition Language)

superkey

superkey的定义为sufficient to identify特定的一行

candidate key

candidate key定义为minimal的superkey,举例:加入ID足以identify特定的一行,那(ID+name)虽然可以identify特定的一行,但不是minimal的,(ID+name)只是superkey但不是candidate key

primary key

定义为在candidate key中挑选一个作为一个table的primary key
所以superkey包括candidate key包括primary key
primary key constraint,主键约束

  1. 主键只涉及一个table
  2. no two rows have same values in key columns 主键可以理解为一个标识符,也就是说一旦你有一个主键值,你就可以找到对应的唯一的一条数据,所以主键一定是非空且唯一的。举个例子,在学校里每个学生有一个学号,且大家的学号都不同,那么学号就可以作为主键值,一旦你有一个学号你就可以找到对应的唯一的学生
  3. 主键值不一定是一个单一的字段,可以是组合 举例:每个班级都有40个学生,给他们分别编号1-40,所以单独的字段班级或字段编号(1-40)并不能找到对应的唯一的学生(比如只给“十班”或者只给“35号”并不能锁定是哪一个学生),但是组合起来就是唯一的(“十班+35号”就可以锁定唯一的学生)

foreign key

外键约束

  1. link to two tables 用于在两个表之间建立联系,可以注定引用主表哪一列
  2. map each row in table1 to a row from table 2 如果字段Y在表一中是主键,在表二中不是主键,则字段Y是表二的外键
  3. values in foreign key column must appear as primary key 外键一定是其中一个表的主键,因此才能通过外键搜索定位到主表的其中特定的一列

DML (Data Manipulation Language)

  • insert:
    手动添加:
    fully specified INSERT INTO <TABLE> VALUES (<value-list>).
    partially specified INSERT INTO <TABLE>(<column-list>) VALUES (<value-list>) (可以指定填充哪一列,剩下的自动填充为NULL)

    从文件导入:
    COPY <TABLE> FROM <path>
    DELIMITER (<delimiter>) NULL <null-string> CSV

  • delete
    可以删除满足条件的列 DELETE FROM <table> WHERE <condition>(e.g.: DELETE FROM Courses WHERE Cname = ’ CS6320’)

  • update
    UPDATE <table>
    SET <column> = <value>
    WHERE <condition>

  • analyze


SQL

An SQL query descirbes a new relation to generate

  • SELECT: describe columns of relation to generate
  • FROM: describe source relations and how to match
  • WHERE: defines conditions result rows must satisfy

Combine two tables:
Syntax:
SELECT <columns>
FROM <table> JOIN <table2> ON (<join-pred>)…
WHERE <where-pred>

<join-pred>: defining matching tuple pairs
<whre-pred>: additional conditions
例子:
在这里插入图片描述
这个例子将三个表格联系了起来,并找出报了CS4320的学生的名字

一些语法:

  • not equal: “<>” ;
  • 可用 > 或 >= ;
  • 查询value是否在list里:Cname IN (‘CS4320’);
  • 可用逻辑词:AND OR NOT “ * ” 代表所有列 select * from <table>可以展示具体表格所有内容
  • table1 NATURAL JOIN table2 会自动 match values in columns with same
    name,不需要手动打出列的名字
  • 省略JOIN关键字: FROM table1,table2 WHERE <join-condition>

Aggregation Queries

COUNT,SUM,AVG,MIN,MAX
COUNT(*):数有多少行
COUNT(<column X>) 数<column X>列下有多少行
COUNT(DISTINCT <column X>) 数<column X>列下有多少不一样的值

GROUP-BY

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值