零说 · 2025-11-15 0

SQL常用语法整理

SQL语句书写规范,可以单行或多行书写,以分号结尾。关键字不区分大小写,但建议使用大写。单行注释把 — 放在文字前面,多行注释把文字放入斜杠内 /注释/。

SQL 语言共分为四大类,分别为:DDL、DML、DQL、DCL。

DDL 数据定义语言

主要是操作数据库和表,比如建库,删库,建表、删表、修改表等操作。

--连库,以postgres为例
psql -d postgres -U postgres;
--创建数据库
create database db_name;
--删除数据库
drop database db_name;
--查看所有数据库
show database;
--切换数据库
\c db_name;
--创建表
create table table_name(
id int primary key,
name varchar(50)
);
--修改表名
alter table table_name
rename to new_table_name;
--查看所有表
\dt;
--删除表
drop table table_name;

DML 数据操作语言

对数据库中的数据进行增、删、改操作。

INSERT 添加

--1、无需指定要插入数据的列名,只需提供被插入的值即可
INSERT INTO table_name
VALUES(value1,value2,value3,...);

--2、指定列名及被插入的值
INSERT INTO
table_name (column1,column2,column3,...)
VALUES(value1,value2,value3,...);

UPDATE 修改

UPDATE
table_name
SET
column1 = value1, column2 = value2, ...
WHERE condition;
--如果省略了这一句,会把表里所有相关数据修改

DELETE 删除

DELETE FROM table_name
WHERE condition;

DQL 数据查询语言

数据检索,日常任务处理主要就在这块了,前面的数据库和表没事不会动它们。DQL 用于从表中获取数据,通常最为常用的保留字是 select。

WHERE 筛选过滤

提取那些满足指定条件的记录

--多个字段下提取
SELECT column1, column2, ...
FROM table_name
WHERE id =1;

--单个字段下提取
SELECT * FROM table_name
WHERE country='CN';--国家为 CN 的数据

--多条件下过滤
select*from table_name
where column1 >= 40000
and column1_date >='2024-01-01';
--*数值大于40000 且日期是2024-01-01以后

AS 起别名

--用于给列、表或子查询结果起别名
SELECT name1 AS name2 FROM table_name;

ORDER BY 排序

用于对结果集按照一个列或者多个列进行排序,默认升序 asc,降序 desc。

--单个字段排序
SELECT * FROM table_name ORDER BY age;

--多个字段排序
SELECT column1, column2, ...
FROM table_name ORDER BY column1, column2, ... ASC|DESC;

LIKE 指定条件

用于在 WHERE子句中进行模糊查询的关键字,它允许我们根据模式匹配来选择数据,通常与 % 和 _ 配符一起使用。

--找出以 a 开头的名称
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE ‘a%’;

--_b% 找出第二个字母为 b 的名称
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE ‘_b%’;

--'%name%' 找出包含完整 name 的数据
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE‘%name%’;

MAX 最大值 & MIN 最小值

返回指定列的最大值或最小值。

--找最大值
SELECT
MAX(column1) FROM table_name;

--找最大值和最小值,用逗号隔开
SELECT
MAX(column1) as max_column1 ,
MIN(column2) as min_column2
FROM table_name;

AND&OR 且/或

基于一个以上的条件对记录进行过滤。

SELECT * FROM Websites 
WHERE country='CN' AND alexa > 50;

BETWEEN 范围

选取介于两个值之间的数据范围内的值,这些值可以是数值、文本或者日期。

--between and 包含所选
SELECT column1, column2, ...
FROM table_name
WHERE column
BETWEEN value1 AND value2;

--not between and 不包含所选
SELECT column1, column2, ...
FROM table_name
WHERE column
notBETWEEN value1 AND value2;

AVG 平均值

--返回数值列的平均值
SELECT
avg(column_name) FROM table_name;

COUNT 统计

--返回匹配指定条件的行数
SELECT
COUNT(column_name) as cnt
FROM table_name;

SELECT COUNT(*) FROM table_name;
-- * 代表全表的记录

SUM 求和

--返回数值列的总数
SELECT
SUM(column_name)
as nums FROM table_name;

GROUP BY

用于结合聚合函数,根据一个或多个列对结果集进行分组。

SELECT
column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
--统计column_name这组的数据

DATE 日期

提取日期或时间表达式的日期部分,格式:YYYY-MM-DD。

--提取日期为 2025-11-10 的记录
SELECT * FROM table_name
WHERE table_date = '2025-11-10';

DISTINCT 去重

一个列可能会包含多个重复值,DISTINCT返回唯一不同的值。

SELECT DISTINCT
column_name1, column_name1,…
FROM table_name;

LIMIT 查询

起始索引从0开始,如果查询的是第一页数据,起始索引可以省略,放在语法最后。PostgreSQL 中的 limit 子句用于限制 SELECT 语句中查询的数据的数量。

--第1页10条数据,0可以省略
SELECT * from table_name limit 0,10;
--第2页10条数据,页码-1*记录数
SELECT * from table_name limit10,10;
--第一个值(2-1)*10

--PostgreSQL
--读取4条数据
SELECT * FROM COMPANY LIMIT 4;
--从第三位取3个记录
SELECT * FROM COMPANY LIMIT 4 OFFSET 2;

IS NULL

始终使用 IS NULL 来查找 NULL 值。

SELECT * FROM table_name
WHERE age is NULL;
--找到年龄为 null 的条目

DCL 数据控制语言

用来设置或更改数据库用户或角色权限的语句。

管理用户

--添加用户
CREATE USER '用户名'@'主机名'IDENTIFIED BY '密码';
--删除用户
DROP USER '用户名'@'主机名';
--修改用户密码
UPDATE USER
SET PASSWORD = PASSWORD ('新密码')
WHERE USER = '用户名';

SET PASSWORD FOR'用户名'@'主机名' = PASSWORD('新密码');
--查询用户
SELECT * FROM USER;

权限管理

--查询权限
SHOW GRANTS FOR '用户名'@'主机名';
--授予权限
GRANT 权限列表
on 数据库名.表名
to '用户名'@'主机名';
--撤销权限
REVOKE 权限列表
on 数据库名.表名 from '用户名'@'主机名';

SQL 是高级的非过程化编程语言,也是经典的声明式语言,用户只需说明“想要什么”,而无需指定“如何做”。它的通用语法适用于 MySQL、Oracle、PostgreSQL等数据库,少数语法有差别,SQL是操作这些表格的标准语言。