【数据库】常用 Sql 示例

文章目录

      • [一、 数据操作语言 (DML)](#一、 数据操作语言 (DML))
        • [1. SELECT (查询)](#1. SELECT (查询))
        • [2. UPDATE (更新)](#2. UPDATE (更新))
        • [3. DELETE (删除)](#3. DELETE (删除))
        • [4. INSERT (插入) - (补充)](#4. INSERT (插入) - (补充))
      • [二、 数据定义语言 (DDL)](#二、 数据定义语言 (DDL))
        • [1. CREATE (创建)](#1. CREATE (创建))
        • [2. ALTER (修改)](#2. ALTER (修改))
        • [3. DROP (删除)](#3. DROP (删除))
      • [三、 数据控制语言 (DCL)](#三、 数据控制语言 (DCL))
        • [1. GRANT (授权)](#1. GRANT (授权))
        • [2. REVOKE (撤销)](#2. REVOKE (撤销))
      • [四、 其他常用的 SQL 语句 (补充)](#四、 其他常用的 SQL 语句 (补充))
        • [1. TRUNCATE (截断)](#1. TRUNCATE (截断))
        • [2. JOIN (连接查询)](#2. JOIN (连接查询))
        • [3. DISTINCT (去重)](#3. DISTINCT (去重))
        • [4. LIMIT / TOP (分页)](#4. LIMIT / TOP (分页))
        • [5. UNION (合并结果集)](#5. UNION (合并结果集))
        • [6. CASE WHEN (流程控制)](#6. CASE WHEN (流程控制))

假设我们有一个用户表 users,结构为 (id, name, email, age, status)

一、 数据操作语言 (DML)

主要用于对数据库表中的数据进行增、删、改、查。

1. SELECT (查询)

这是使用频率最高的语句,用于从表中检索数据。

  • 经典例子 1:条件查询与排序
    查询状态为"active"且年龄大于 18 的用户,按 ID 倒序排列。

    sql 复制代码
    SELECT id, name, email 
    FROM users 
    WHERE status = 'active' AND age > 18 
    ORDER BY id DESC;
  • 经典例子 2:聚合与分组
    统计每个状态下的用户数量,且只显示数量大于 10 的组。

    sql 复制代码
    SELECT status, COUNT(*) as user_count 
    FROM users 
    GROUP BY status 
    HAVING COUNT(*) > 10;
2. UPDATE (更新)

用于修改表中现有的数据。切记配合 WHERE 使用,否则会更新全表。

  • 经典例子:批量修改状态
    将 ID 为 1001 的用户邮箱更新,并将状态改为 'inactive'。

    sql 复制代码
    UPDATE users 
    SET email = 'new_email@example.com', status = 'inactive' 
    WHERE id = 1001;
3. DELETE (删除)

用于删除表中的数据行。切记配合 WHERE 使用,否则会清空全表。

  • 经典例子:删除指定数据
    删除所有最后登录时间早于 2023 年 1 月 1 日的用户。

    sql 复制代码
    DELETE FROM users 
    WHERE last_login < '2023-01-01';
4. INSERT (插入) - (补充)

虽然题目未列出,但这是 DML 中必不可少的语句。

  • 经典例子:插入新记录

    sql 复制代码
    INSERT INTO users (name, email, age) 
    VALUES ('Zhang San', 'zhangsan@test.com', 25);

二、 数据定义语言 (DDL)

主要用于定义或修改数据库结构(表、索引、视图等)。

1. CREATE (创建)

用于创建数据库、表、索引或视图。

  • 经典例子 1:创建表
    创建一个带有主键和非空约束的用户表。

    sql 复制代码
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL,
        email VARCHAR(100) UNIQUE,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
  • 经典例子 2:创建索引
    为 email 字段创建索引以加快查询速度。

    sql 复制代码
    CREATE INDEX idx_email ON users(email);
2. ALTER (修改)

用于修改现有的数据库对象结构(如表结构)。

  • 经典例子 1:添加列
    在用户表中增加一个电话号码列。

    sql 复制代码
    ALTER TABLE users 
    ADD COLUMN phone_number VARCHAR(20);
  • 经典例子 2:修改列类型
    将 age 字段的类型从 INT 改为 TINYINT。

    sql 复制代码
    ALTER TABLE users 
    MODIFY COLUMN age TINYINT;
3. DROP (删除)

用于删除数据库对象(结构连同数据一起删除,不可逆)。

  • 经典例子 1:删除表

    sql 复制代码
    DROP TABLE IF EXISTS users;
  • 经典例子 2:删除数据库

    sql 复制代码
    DROP DATABASE my_database;

三、 数据控制语言 (DCL)

主要用于管理数据库的权限安全

1. GRANT (授权)

将特定权限授予用户。

  • 经典例子:授予查询和修改权限
    创建一个用户 'web_user',并允许其从任何主机连接,仅对 my_db 数据库拥有查询和插入权限。

    sql 复制代码
    GRANT SELECT, INSERT ON my_db.* TO 'web_user'@'%' IDENTIFIED BY 'password123';
2. REVOKE (撤销)

收回已授予用户的权限。

  • 经典例子:撤销修改权限
    收回 'web_user' 在 my_db 数据库上的插入权限。

    sql 复制代码
    REVOKE INSERT ON my_db.* FROM 'web_user'@'%';

四、 其他常用的 SQL 语句 (补充)

这些语句在开发和维护中非常经典。

1. TRUNCATE (截断)

属于 DDL,用于删除表中所有数据,但保留表结构。比 DELETE 速度快,且重置自增 ID。

  • 经典例子:清空表数据

    sql 复制代码
    TRUNCATE TABLE users;
2. JOIN (连接查询)

用于多表关联查询,是关系型数据库的核心。

  • 经典例子:内连接
    查询用户及其订单信息(假设有 orders 表)。

    sql 复制代码
    SELECT u.name, o.order_id, o.amount
    FROM users u
    INNER JOIN orders o ON u.id = o.user_id;
3. DISTINCT (去重)

用于返回唯一不同的值。

  • 经典例子:查询所有不同的状态

    sql 复制代码
    SELECT DISTINCT status FROM users;
4. LIMIT / TOP (分页)

用于限制返回的行数(不同数据库语法略有不同,以 MySQL 为例)。

  • 经典例子:分页查询
    查询第 2 页的数据(每页 10 条,跳过前 10 条,取 10 条)。

    sql 复制代码
    SELECT * FROM users 
    ORDER BY id 
    LIMIT 10 OFFSET 10;
5. UNION (合并结果集)

用于合并两个或多个 SELECT 语句的结果集。

  • 经典例子:合并两个表的用户名

    sql 复制代码
    SELECT name FROM users
    UNION
    SELECT name FROM admins;
6. CASE WHEN (流程控制)

用于实现类似编程语言中的 if-else 逻辑。

  • 经典例子:数据透视/分类
    将年龄分组显示。

    sql 复制代码
    SELECT name,
      CASE 
        WHEN age < 18 THEN 'Minor'
        WHEN age BETWEEN 18 AND 60 THEN 'Adult'
        ELSE 'Senior'
      END AS age_group
    FROM users;
相关推荐
知识分享小能手2 小时前
Redis入门学习教程,从入门到精通,Redis 数据操作:知识点详解与代码实战(2)
数据库·redis·学习
m0_662577972 小时前
Python迭代器(Iterator)揭秘:for循环背后的故事
jvm·数据库·python
似水明俊德3 小时前
12-C#
开发语言·数据库·oracle·c#
FirstFrost --sy3 小时前
MySQL关于表的操作
数据库·mysql
青槿吖4 小时前
【保姆级教程】Spring事务控制通关指南:XML+注解双版本,避坑指南全奉上
xml·java·开发语言·数据库·sql·spring·mybatis
浪潮IT馆4 小时前
Windows 达梦 8(DM8)数据库完整安装教程 + 命令行导入 .dmp 文件完整指南
数据库·windows
Dylan~~~4 小时前
Redis MCP Server:让 AI 拥有“持久记忆“的革命性方案
数据库·人工智能·redis
小小怪7504 小时前
超越Python:下一步该学什么编程语言?
jvm·数据库·python
Y001112365 小时前
Day8-MySQL-多表查询-1
数据库·sql·mysql