SQL

SQL是结构化查询语言的缩写,用来访问和操作数据库系统

DDL:Data Definition Language

DDL允许用户定义数据,也就是创建表、删除表、修改表结构这些操作。通常,DDL由数据库管理员执行。

DML:Data Manipulation Language

DML为用户提供添加、删除、更新数据的能力,这些是应用程序对数据库的日常操作。

DQL:Data Query Language

DQL允许用户查询数据,这也是通常最频繁的数据库日常操作。

主键

主键的一个基本原则是:不使用任何业务相关的字段作为主键。因为这个值可能会发生变化。

最好它就是一个id

比如 1 2 3 4 5 或者 8f55d96b-8acc-4636-8cb8-76bf8abc2f57 这种唯一标识

外键

通过某个字段 把数据和另一张表关联起来 称为外键

ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);

上面的语句中 FOREIGN KEY (class id)制定了class_id作为外键 并且这个外键将关联到calsses表的id列

查询

基本查询

SELECT * FROM <表名>

SELECT是关键字 *表示所有列 FROM表示从哪个表查询

条件查询

SELECT * FROM students WHERE score >= 80;

WHERE表示条件

SELECT * FROM <表名> WHERE <条件表达式>

条件可以是多个 也可以有 AND OR NOT字段

SELECT * FROM students WHERE score >= 80 AND gender = 'M';
SELECT * FROM students WHERE score >= 80 OR gender = 'M';
SELECT * FROM students WHERE NOT class_id = 2;

可以使用括号

SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';

投影查询

SELECT id, score, name FROM students;

查询结果只包含其中几列

排序

SELECT id, name, gender, score FROM students ORDER BY score;

使用 ODER BY 进行排序

在最后加上DESC即为倒序

在后面添加其他列名 可以进一步排序

聚合查询

SELECT COUNT(*) FROM students;

查找的内容是行数

COUNT(*)COUNT(id)是相同的效果

其他聚合函数如下

  • SUM 计算某一列的合计值,该列必须为数值类型
  • AVG 计算某一列的平均值,该列必须为数值类型
  • MAX 计算某一列的最大值
  • MIN 计算某一列的最小值

聚合函数还可以分组

比如想计算每个班学生的数量 使用WHERE的话 需要进行3次统计

SELECT COUNT(*) num FROM students WHERE class_id = 1;

使用如下语句可以实现分组统计

SELECT COUNT(*) num FROM students GROUP BY class_id;

多表查询

SELECT * FROM students, classes;

查询可以从多个表中查询 得到的是两个表每行两两拼接的新表 即每个表都有100行的话 返回的表将是10000行数据

连接查询

选出所有学生 同时返回班级名称

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;

修改数据

除了Retrieve外 剩下的基本操作是增 删 改

INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...),(值1,值2,...);

字段的顺序不一定和表相同 但必须和value是对应的

UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;

UPDATE的时候可以使用表达式

UPDATE students SET score=score+10 WHERE score<80;

DELETE FROM <表名> WHERE ...;

DELETE与UPDATE类似