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是操作这些表格的标准语言。
