SQL其实很简单,掌握这些就够了

更新日期: 2025-11-20 阅读: 33 标签: sql

学习SQL并没有想象中那么难。SQL是专门用来管理和操作关系型数据库的语言。经过一段时间的学习,我整理了日常工作中最常用的SQL语法,分享给大家作为学习参考。

写SQL语句时,可以写成单行或多行,用分号结束。关键字大小写都可以,但一般建议用大写,这样更清晰。注释有两种:单行注释用--,多行注释用/*注释内容*/。

SQL语言主要分为四种类型:DDL、DML、DQL、DCL。下面我们逐一了解。


DDL 数据定义语言

DDL用来操作数据库和表,比如创建数据库、删除数据库、创建表、修改表等。

-- 连接数据库(以PostgreSQL为例)
psql -d postgres -U postgres;

-- 创建数据库
CREATE DATABASE db_name;

-- 删除数据库
DROP DATABASE db_name;

-- 查看所有数据库
\l

-- 切换数据库
\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 数据操纵语言

DML负责数据的增删改操作,也就是我们常说的CRUD操作。

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;
-- 注意:一定要加WHERE条件,否则会修改所有数据

DELETE 删除数据

DELETE FROM table_name
WHERE condition;
-- 同样要注意WHERE条件,避免误删

DQL 数据查询语言

这是日常工作中最常用的部分,用来从数据库中查询数据。

WHERE 条件筛选

-- 查询特定列
SELECT column1, column2 FROM table_name WHERE id = 1;

-- 查询所有列
SELECT * FROM table_name WHERE country = 'CN';

-- 多条件查询
SELECT * FROM table_name 
WHERE column1 >= 40000 AND column1_date >= '2024-01-01';

AS 别名

SELECT name1 AS name2 FROM table_name;

ORDER BY 排序

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

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

LIKE 模糊查询

-- 查找以a开头的名称
SELECT column1, column2 FROM table_name 
WHERE column_name LIKE 'a%';

-- 查找第二个字母是b的名称
SELECT column1, column2 FROM table_name 
WHERE column_name LIKE '_b%';

-- 查找包含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 table_name 
WHERE country = 'CN' AND alexa > 50;

BETWEEN 范围查询

-- 包含边界值
SELECT column1, column2 FROM table_name 
WHERE column BETWEEN value1 AND value2;

-- 不包含边界值
SELECT column1, column2 FROM table_name 
WHERE column NOT BETWEEN 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, COUNT(*) 
FROM table_name 
GROUP BY column_name;

DATE 日期处理

-- 查询特定日期的记录
SELECT * FROM table_name 
WHERE table_date = '2025-11-10';

DISTINCT 去重

SELECT DISTINCT column_name1, column_name2 
FROM table_name;

LIMIT 限制结果数量

-- MySQL写法
SELECT * FROM table_name LIMIT 10;          -- 前10条
SELECT * FROM table_name LIMIT 10, 10;      -- 第2页,每页10条

-- PostgreSQL写法
SELECT * FROM table_name LIMIT 10;          -- 前10条
SELECT * FROM table_name LIMIT 10 OFFSET 10; -- 跳过10条,取10条

IS NULL 空值判断

SELECT * FROM table_name 
WHERE age IS NULL;

DCL 数据控制语言

DCL用来管理数据库用户的权限,平时用得相对较少。

用户管理

-- 创建用户
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';

-- 删除用户
DROP USER 'username'@'hostname';

-- 查询用户
SELECT * FROM mysql.user;

权限管理

-- 查看权限
SHOW GRANTS FOR 'username'@'hostname';

-- 授予权限
GRANT permission_list ON database.table 
TO 'username'@'hostname';

-- 撤销权限
REVOKE permission_list ON database.table 
FROM 'username'@'hostname';

实际应用技巧

组合使用示例

-- 查询每个国家的用户平均年龄,按平均年龄降序排列,只显示前5个
SELECT country, AVG(age) AS avg_age 
FROM users 
WHERE age IS NOT NULL 
GROUP BY country 
ORDER BY avg_age DESC 
LIMIT 5;

日期范围查询

-- 查询2024年1月的订单
SELECT * FROM orders 
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';

-- 查询最近7天的活跃用户
SELECT * FROM users 
WHERE last_login_date >= CURRENT_DATE - INTERVAL '7 days';

多表关联查询

-- 查询用户及其订单信息
SELECT u.name, o.order_date, o.amount 
FROM users u 
JOIN orders o ON u.id = o.user_id 
WHERE u.status = 'active';

学习建议

  1. 先掌握基础:把基本的SELECT、INSERT、UPDATE、DELETE练熟

  2. 理解WHERE条件:这是SQL查询的核心

  3. 多练习分组统计:GROUP BY是数据分析的利器

  4. 注意性能:避免使用SELECT *,只查询需要的列

SQL是一种声明式语言,你只需要告诉数据库"要什么",不需要关心"怎么做"。这种特性让SQL学习起来相对容易。虽然不同数据库(MySQL、Oracle、PostgreSQL等)有细微差别,但核心语法是相通的。

记住,学好SQL的关键是多练习。从简单的查询开始,逐步尝试复杂的统计分析,很快你就能熟练运用这个强大的工具了。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/13198

mysqldump 备份数据库_mysqldump备份详解

数据备份是一个网站能够正常运营的保障,数据备份包括网站源码备份和数据库备份,如果你使用的是ACCESS数据库,那么直接使用FTP下载数据库文件就可以了,但如果你使用了PHP+MYSQL进行网站建设,数据库备份就没有那么容易了。

为什么企业依赖于NoSQL

如果你关注大数据科技动向,你对 NoSQL 一定不陌生,NoSQL 是一个分布式数据库。在过去时间,数据存储一直关系型数据库天下,有着良好的控制并发操作、事务功能。

sql语句备忘录

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

这种SQL写法会导致索引失效?

网上经常能看到一些文章总结在 mysql 中不能命中索引的各种情况,其中有一种说法就是指使用了 or 的语句都不能命中索引。这种说法其实是不够正确的,正确的结论应该是

websql操作类封装

由于websql操作都是异步操作,当我们为了获取到websql操作的结果之后再进行后续操作时,往往是通过回调函数来实现的,当回调一多的时候,回调地狱就出现了,为了解决回调地狱问题,我将通过Promise来改写,后续调用时

Sql中Left Join、Right Join、Inner Join的区别?

left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录;right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录

开发者必知的MySQL 8.0 新功能

下面将以 MySQL 社区的优先级从高到低来展示这些功能:MySQL 文档存储;默认 utf8mb4 编码;JSON 增强;CTEs(译者注:Common Table Expresssions 公共表格表达式)

常用SQL语句分享

日常工作或学习过程中,我们可能会经常用到某些SQL,建议大家多多整理记录下这些常用的SQL,这样后续用到会方便很多。笔者在工作及学习过程中也整理了下个人常用的SQL,现在分享给你!可能有些SQL你还不常用

node.js防止Sequelize在执行查询时将SQL输出到控制台?

有没有办法得到这个不显示?一些标志,我在一个配置文件中设置某处?最佳答案创建Sequelize对象时,将false传递给logging参数:

NeDB,Node.js嵌入式数据库

NeDB 是使用 Node.js 实现的一个 NoSQL 嵌入式数据库操作模块, 可以充当内存数据库,也可以用来实现本地存储,甚至可以在浏览器中使用。 查询方式比较灵活,支持使用正则、比较运算符、逻辑运算符、索引以及 JSON 深度查询等,适用于不需要大量数据处理的应用系统

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!