xiaoyh 的个人博客

一个只会敲代码的咸鱼

0%

SQL 基础

1. 什么是 SQL

结构化查询语言(Structured Query Language)简称 SQL ,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

如何创建一个数据库

创建数据库要使用 CREATE DATABASE 语句:

1
create database database_name;

创建数据库中的表要使用 CREATE TABLE 语句:

1
2
3
4
5
create table table_name(
col1 varchar(255),
col2 int(32),
...
);

2. Crud

数据库最基本的操作无非就是增(create)、删(delete)、查(retrieve/read)、改(update)。

增(create)

增操作要使用 INSERT INTO ,将数据添加至尾部:

1
2
3
4
5
6
7
8
insert into table_name
(col1, col2, ...) -- 这一行是字段名,可省略,
values
-- 若字段名省略,则需要列出插入行的每一列数据
(value1, value2, ...),
(value1, value2, ...),
...
(value1, value2, ...); -- 可一次性插入多组数据

删(delete)

删操作要使用 DELETE

1
delete * from table_name; -- 删除所有数据,* 可以省略

查(retrieve/read)

查操作要使用 SELECT

1
2
select * from table_name;           -- 查询所有字段
select col1, col2 from table_name; -- 查询指定字段

改(update)

改操作要使用 UPDATE ,由于更新操作需要指定某一条数据,所以必须使用条件语句:

1
2
3
update table_name
set col1=value1, col2=value2, ...
where some_col=some_value; -- 指定某数据更新某些字段

3. WHERE 子句

WHERE 是最常用的子句,提取满足条件的语句,一般用于查、改、删。

1
2
3
4
5
-- 只查询满足 some_col=some_value 的数据的 col1 与 col2 字段
select col1, col2 from table_name where some_col=some_value;

-- 只删除满足条件的数据
delete from table_name where condition

IN 操作符

IN 操作符允许在 WHERE 子句中规定多个值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 不使用 IN
select * from table_name where some_col=value1 or some_col=value2;

-- 使用 IN
select * from table_name where some_col in (value1, value2);


-- 若想选取不在这个范围内的,可以使用 NOT IN


-- 不使用 NOT IN
select * from table_name where some_col!=value1 and some_col!=value2;

-- 使用 NOT IN
select * from table_name where some_col not in (value1, value2);

BETWEEN 操作符

BETWEEN 操作符用于选取介于某段数据范围内的值。对于不同的数据库,区间的开闭情况也不一样(有可能是闭区间,也有可能是半开半闭区间)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 不使用 BETWEEN
select * from table_name where some_col<=value1 and some_col>=value2;

-- 使用 BETWEEN
select * from table_name where some_col between value1 and value2;


-- 若想选取不在这个区间范围内的,可以使用 NOT BETWEEN


-- 不使用 NOT BETWEEN
select * from table_name where some_col>value1 or some_col<value2;

-- 使用 NOT BETWEEN
select * from table_name where some_col not between value1 and value2;

BETWEEN 后用的是文本值,则表示以介于文本范围之间开头的数据

1
2
-- 选取 name 以介于 'A' 和 'H' 之间字母开始的数据
select * from Websites where name between 'A' and 'H';

LIKE 操作符

LIKE 操作符用于在 WHERE 子句中进行模糊查询。

1
2
select * from table_name
where col_name like pattern;

区别于 =LIKE 后的字符串是模式串,有以下几种通配符:

通配符 描述
% 替代 0 个或多个字符
_ 替代 1 个字符
[charlist] 字符列中的任何单一字符
[^charlist] 或 [!charlist] 不在字符列中的任何单一字符
1
2
3
4
5
6
'https%'    -- 表示以 https 开头的字符串
'%xiaoyh%' -- 表示包含 xiaoyh 的字符串
'_pple' -- apple、bpple 等都符合
'[ab]pple' -- 仅 apple、bpple 符合
'[a-H]pple' -- apple、bpple ... hpple 符合(sql 大小写不敏感)
'[!ab]pple' -- apple、bpple 不符合

4. 其他

还有一些其他的关键字

SELECT DISTINCT

SELECT DISTINCT 会把查询的字段去重。

1
select distinct col1, col2 from table_name;

ORDER BY

ORDER BY 对指定字段排序(默认升序),如果有多个字段,则先给前面的字段排序,再在此基础上给后面的字段排序。如果想使用逆序得加 DESC 关键字。

1
2
3
4
5
6
7
-- 升序
select * from table_name
order by col1, col2;

-- 逆序
select * from table_name
order by col1, col2 desc;