banner
NEWS LETTER

CPT103-L2-SQL

Scroll down

#CPT103 #Database

CPT103 Lecture的第二节课,主要讲了SQL(Structured Query Language)一些基本的创建表格的语法一些元组(Tuple)的操作

  • 推荐一个网站:网站链接,系统介绍讲解了数据库,可以参考。

SQL

SQL(Structured Query Language, 结构化查询语言),是一种特定目的编程语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。

SQL有三个重要的部分

  • 数据定义语言(Data Definition Language, DDL):
    用于定义和管理数据库对象,包括数据库、表、索引、视图、存储过程、触发器等。DDL语句用于定义和修改数据库对象的结构,不会直接对数据库中的数据进行操作。
    DDL语句常用的关键字包括:

CREATE:用于创建数据库对象,例如表、索引、视图等。
ALTER:用于修改数据库对象的结构,例如添加或删除列、修改列的数据类型等。
DROP:用于删除数据库对象。

  • 数据操纵语言(Data Manipulation Language, DML):
    是SQL语言的一个子集,用于对数据库中的数据进行操作,包括插入、更新、删除和检索数据。DML语句用于对数据库中的数据进行增删改查,不会直接对数据库对象的结构进行操作。
    DML语句常用的关键字包括:

INSERT:用于插入一条或多条数据到数据库中。
UPDATE:用于更新数据库中的数据。
DELETE:用于删除数据库中的数据。
SELECT:用于从数据库中检索数据。

  • 数据控制语言(Data Control Language, DCL):
    是 SQL 语言的一个子集,用于控制数据库用户对数据库对象的访问权限。DCL 语句不会直接对数据库中的数据或结构进行操作,而是用于授予或收回用户对数据库对象的权限。
    DCL 语句常用的关键字包括:

GRANT:用于授予用户对数据库对象的权限。
REVOKE:用于收回用户对数据库对象的权限。

SQL的格式

  • 需要注意的是,SQL语言对关键字的大小写并不敏感,原则上大写小写都没问题,但一般为了更好的可读性和代码的整洁规范,我们选择关键字全部大写
  • 而表格的名字、列的名字往往是大小写敏感的,所以我们选择这么写:
1
SELECT (sName) FROM Student;

创建一个逻辑结构(Schema)

可以:

1
CREATE SCHEMA name;

或者:

1
CREATE DATABASE name;

Schema 指的是数据库对象的逻辑结构,包括表、视图、索引、存储过程、触发器等。它定义了数据库中数据的组织方式,以及数据库对象之间的关系。

创建我们的第一个表格

1
2
3
4
CREATE TABLE my_table ( 
column1 int,
column2 varchar(40)
);

SQL语法

‘USE’关键字

1
USE schema_name;

USE关键字用于选择要使用的数据库,通常在连接到数据库服务器后立即使用,以便后续的查询和操作都针对该数据库进行。如果不使用USE关键字,则默认情况下使用当前连接的数据库。

Inserting Values(插入值)

1
INSERT INTO my_table VALUES  (1, 'ABC'), (2, 'DEF');

INSERT关键字用于向表中插入新记录。它是一种非常常用的SQL语句,可以用于将数据导入数据库中。
tips: (1, 'ABC'), (2, 'DEF')就是该table的两个元组(Tuple)。

此外,还可以使用**反引号(`)**,这样表格或列名字命名时如果有空格,就不需要使用’_’,直接空格即可:

1
2
3
4
CREATE TABLE `my table` (
`column A` INT,
`column B` VARCHAR(11)
);

但是非常不建议这么做!正常我们就用上面的普通的命名方式my_table就好。

Numercial Data Types(数字的数据类型)

Integers(整数)

  • example: INT or INT(5)
    - 括号内表示 integer 的总位数。

  • SMALLINT
    - 占用:2字节(byte)
    - 范围:-32,768 到 32,767,是左闭右开区间,即包括-32,768但不包括32,767。

  • INT or INTEGER
    - 占用:4字节
    - 范围:-2,147,483,648 到 2,147,483,647(无符号:0 到 4,294,967,295,也是左闭右开区间。
    - 是最经典和常用的选择。(废话

  • BIGINT
    - 占用:8字节
    - 范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

Fixed Point(定点数)

这是个全新的东西,细细说一下这个定点数是什么:

  • example: DECIMAL[(M[, D])] or NUMERIC[(M[, D])]
    (tips: 中括号[]之间的是optional的,可有可无)
    M -> 总位数,D -> 小数点后的位数
    example:price DECIMAL(10,2)

  • 定点数是什么?
    - 定点数(Fixed-point number)是一种表示实数的格式,其特点是小数点的位置是固定的。

  • 相比于浮点数,定点数的优点:
    - 精度更高:浮点数的精度会受到指数的影响,而定点数的精度是固定的。
    - 速度更快:定点数的运算速度比浮点数更快,因为不需要进行指数运算。
    - 存储空间更小:定点数占用更少的存储空间,因为不需要存储指数。

  • 定点数的缺点:
    - 表示范围有限:定点数的表示范围由小数点的位置决定,无法表示超出范围的数字。
    - 不适用于科学计算:定点数不适用于需要很高精度的科学计算。

  • 定点数的表示方法:
    - 定点数通常使用二进制表示,小数点的位置由整数部分和小数部分的位数决定。例如,一个8位定点数,其中4位整数部分,4位小数部分,可以表示的范围为-2^4到2^4-2^(-4),精度为1/2^(-4)。

  • 常见的应用场景:
    - 金融计算:定点数用于计算利率、汇率等金融数据。
    - 嵌入式系统:定点数用于控制电机、温度等设备。
    - 数字信号处理:定点数用于滤波、傅里叶变换等信号处理操作。

Float(浮点数)

  • example: FLOAT or FLOAT(5) or FLOAT(3, 2)
    - 括号内如果只有一个参数,则表示总位数;
    - 如果有两个参数,则第一个表示总位数,第二个表示小数点后的位数。

String Types(字符串类型)

  • CHAR[(M)] or VARCHAR(M)
    M -> 总位数
    (tips: 中括号[]之间的是optional的,可有可无)

二者之间的区别:
- 存储方式:
CHAR:固定长度,以空格填充不足部分。例如,CHAR(10)类型的列,如果存储的字符串长度不足10,则会用空格补足到10个字符。
VARCHAR:可变长度,只存储字符串实际占用的空间。例如,VARCHAR(10)类型的列,如果存储的字符串长度为5,则只占用5个字节的存储空间。

- 性能:
CHAR:查询效率较高,因为长度固定,可以直接进行比较。
VARCHAR:查询效率略低,因为需要先获取字符串的实际长度,然后进行比较。

- 使用场景:
CHAR:适用于存储长度固定且需要精确比较的字符串,例如身份证号码、密码等。
VARCHAR:适用于存储长度可变且不需要精确比较的字符串,例如姓名、地址等。

String Values(字符串值)

  • SQL中,字符串值使用单引号:'I AM A STRING'
    (tips: 用双引号其实也可以,这方面也不严格)
  • 在字符串内部使用单引号时,前面加上反斜杠:'I\'M A STRING'
    或使用双引号:'I"M A STRING'

Date and Time(日期与时间)

  • DATE:
    - 支持的范围:’1000-01-01’ to ‘9999-12-31’.
    - MySQL展示日期的格式:’YYYY-MM-DD’.

  • DATETIME[(fsp)]
    - 支持的范围:’1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’.
    - MySQL展示日期的格式:’YYYY-MM-DD hh:mm:ss[.fraction]’.

1
2
3
4
5
6
CREATE TABLE `staff` ( 
`name` VARCHAR(60),
`id_card` CHAR(6),
`recruit_date` DATE,
`last_login` DATETIME
);
  • TIMESTAMP
    - 和DATETIME相似,但是保存UTC时间。

NULL and Special Values(特殊值)

  • NULL:
    NULL表示未知或缺失,它不是0、””或任何其他值。NULL可以出现在任何数据类型中,包括数字、字符串、日期等。
    - 常用于:数据尚未收集;数据无法获得;数据被删除。

  • Special Values:
    指具有特殊含义的值。
    example:
    NaN: 表示非数字
    Infinity: 表示正无穷
    -Infinity: 表示负无穷

- 常用于:表示数据溢出或数据无效等情况。

Column Options(列选项)

col-name datatype [col-options]

  • NOT NULL: 这个列的值不能为NULL;
  • UNIQUE: 每个值都必须独一无二,不能重复;
  • DEFAULT value: 默认值。(在MS access中不工作)
  • AUTO_INCREMENT: 自动生成唯一数字,通常用于主键——每次向表中插入新记录时,MySQL会自动将AUTO_INCREMENT设置的列的值加1;也可以指定自增起始值,默认值为1。

example:

1
2
3
4
5
6
7
CREATE TABLE Persons ( 
id INT UNIQUE NOT NULL AUTO_INCREMENT,
lastname VARCHAR(255) NOT NULL,
firstname VARCHAR(255),
age INT DEFAULT 12,
city VARCHAR(255)
) AUTO_INCREMENT = 5;

Tuple Manipulation(元组操作)

INSERT

  • 添加一横排数据:
1
2
3
4
INSERT INTO tablename (col1, col2, …)
VALUES (val1, val2, …),
...
(val1,val2,val3);
  • 如果每一列都要添加值,就不用一一列出来了:
1
2

INSERT INTO tablename VALUES (val1, val2, …);

UPDATE

  • 更新一横排数据:
1
2
3
UPDATE table_name
SET col1 = val1 [,col2 = val2…]
[WHERE condition]
  • 关于condition:

- condition为true的横排,对应列的值都会改变;
- 如果不给condition,所有横排都会被改变

DELETE

  • 删除一横排数据:
1
2
3
DELETE FROM
table_name
[WHERE condition]
  • condition同上。

如有错误,请及时指出~评论发邮件均可,欧内盖!

Other Articles
Article table of contents TOP
  1. 1. SQL
  2. 2. SQL的格式
  3. 3. 创建一个逻辑结构(Schema)
  4. 4. 创建我们的第一个表格
  5. 5. SQL语法
    1. 5.1. ‘USE’关键字
    2. 5.2. Inserting Values(插入值)
  6. 6. Numercial Data Types(数字的数据类型)
    1. 6.1. Integers(整数)
    2. 6.2. Fixed Point(定点数)
    3. 6.3. Float(浮点数)
    4. 6.4. String Types(字符串类型)
    5. 6.5. String Values(字符串值)
    6. 6.6. Date and Time(日期与时间)
    7. 6.7. NULL and Special Values(特殊值)
    8. 6.8. Column Options(列选项)
  7. 7. Tuple Manipulation(元组操作)
    1. 7.1. INSERT
    2. 7.2. UPDATE
    3. 7.3. DELETE
Please enter keywords to search