SQL语言笔记

数据库

本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。

根据《SQL必知必会(第5版)》整理 ,由于不同的数据库管理系统对SQL标准略有不同,故撰文以汇之,此文以MySQL为标准,少量补充SQL Server(别问为什么,问就是因为考试考SQL Sever)。

数据库基础

数据库(datebase):保存有组织的数据的容器

数据库软件称为数据库管理系统(DBMS)

个人认为,数据库的结构可以这样认为:库 -> 表 -> 列(column)/ 行(row) -> 项

通表同类型,同一数据库中表名是唯一的

行又称记录

主键为一张表的标识,由一列或者几列组成,每行都必须有一个主键值,每行的主键值都是唯一的

虽然SQL语言不区分大小写,但一般关键字都大写

检索数据

多条SQL语句必须以“;”分隔,USE MySQL 语句中的USE表示使用某个库

SELECT语句

SELECT选择列,例如

1
2
SELECT prod_name
FROM Products;

SELECT 可以选择多个列,各列之间用‘’,’‘分隔

1
2
SELECT prod_name,prod_id, pord_price
FROM Products;

检索所有列,用“*”

1
2
SELECT *
FROM Products;

检索不同的值

如果想去除查询结果中重复出现的记录,可以使用DISTINCT关键字,关键字必须在列名之前。DISTINCT关键字作用与所有列,不仅仅是跟在其后的列。

1
2
SELECT DISTINCT prod_name
FROM Products;

限定结果

MySQL 中想要限定结果数量,可以使用LIMIT关键字

1
2
3
SELECT prod_name
FROM Products
LIMIT 5;

SQL Server使用的是TOP

1
2
SELECT TOP 5 prod_name
FROM Products;
1
2
3
4
5

```sql
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5; -- 返回第5行起的5行数据

数据库中被检索的第一行是第0行,类似于数组的标号

1
2
3
SELECT prod_name
FROM Products
LIMIT (3,4); -- 返回第3行起的后4行

注释

1
2
3
/*SELECT prod_name
FROM Products*/
LIMIT 5;
1
2
3
#SELECT prod_name
FROM Products
LIMIT 5;
1
2
3
-- SELECT prod_name
FROM Products
LIMIT 5;

排序检索数据

排序数据

使用ORDER BY子句,这个子句是SELECT中最后的一条子句

1
2
3
SELECT prod_name
FROM Products
ORDER BY prod_name;

按多个列排序

1
2
3
SELECT prod_name, prod_price
FROM Products
ORDER BY prod_name, prod_price;

指定排序方式

使用DESCEND关键字来降序

1
2
3
SELECT prod_name, prod_price
FROM Products
ORDER BY prod_name, prod_price DESC;

过滤数据

使用WHERE子句

ORDER BY位于WHERE之后

1
2
3
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 0.01;

WHERE子句操作符

BETWEEN在指定的两个值之间

IS NULL为NULL值

字符串用单引号(’ ‘)限定

范围值检查

使用BETWEEN AND关键字

1
2
3
SELECT prod_price
FROM Products
WHERE prod_price BETWEEN 1 AND 2;

空值检查

1
2
3
SELECT prod_name
FROM Products
WHERE prod_name IS NULL;

高级数据过滤

组合WHERE子句

使用ANDOR

1
2
3
SELECT prod_name, prod_id, prod_price
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;
1
2
3
SELECT prod_name, prod_id, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR prod_price <= 4;

AND 优先级高于OR

IN操作符

IN相当于OR

1
2
3
4
SELECT prod_name, prod_id, prod_price
FROM Products
WHERE vend_id IN ('DLL01', 'BRS01')
ORDER BY prod_name;

NOT操作符

WHERE子句中用来否定其后条件的关键字

1
2
3
4
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;

用通配符进行过滤

LIKE操作符

某词末尾加LIKE, 表示开头

1
2
3
SELECT prod_name, prod_id
FROM Products
WHERE prod_name LIKE 'FISH%';

加在首位表示含有

1
2
3
SELECT prod_name, prod_id
FROM Products
WHERE prod_name LIKE '%FISH%';

加在中间,%匹配0-n个字符

1
2
3
SELECT prod_name, prod_id
FROM Products
WHERE prod_name LIKE 'F%H';

_通配符

_匹配单个字符,用法与%类似

本文作者:Mosquito

本文链接: http://example.com/2022/03/05/SQL%E8%AF%AD%E8%A8%80%E7%AC%94%E8%AE%B0/

Mosquito 天使之吻手打

文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。