当前位置: 首页 > news >正文

数据库操作核心知识点整理

文章目录

        • 一、表结构创建与管理
        • 二、约束条件
        • 三、查询操作(SELECT命令)
        • 四、多表查询与连接
        • 五、数据更新操作
        • 六、注意事项

一、表结构创建与管理
  1. 创建数据表(CREATE TABLE)
    基本语法示例:

    CREATE TABLE student(sno char(8),  -- 学号,固定长度8字符name varchar(20),  -- 姓名,可变长度最大20字符age int  -- 年龄,整数类型
    );
    
  2. 删除数据表(DROP TABLE)

    • 功能:删除整个基本表(包括表结构和数据)。
    • 语法:DROP TABLE 表名;
二、约束条件
  1. UNIQUE约束

    • 作用:保证列中数据唯一(允许NULL,但NULL只允许出现一次)。
  2. 主键约束(PRIMARY KEY)

    • 特性:唯一标识表中记录,不允许为NULL,且值必须唯一。
  3. 外键约束(FOREIGN KEY)

    • 作用:建立表之间的关联关系,确保子表中的外键值对应主表的主键值。
三、查询操作(SELECT命令)
  1. 执行顺序
    单表查询流程:
    FROM(读表到内存)→ WHERE(筛选行)→ GROUP BY(分组)→ HAVING(分组后筛选)→ SELECT(选择列)→ ORDER BY(排序)

  2. 单表查询基础

    • 去重(DISTINCT):去除查询结果中重复的记录,如 SELECT DISTINCT 列名 FROM 表;
    • 列别名:通过 列名 别名列名 AS 别名 定义,如 SELECT SNAME NAME FROM student;
    • 判等条件:使用 = 进行等于判断(注意字符串需用单引号包裹,如 WHERE Name = '张三')。
    • 非BETWEEN AND等价写法:例如 WHERE Age > 18 AND Age < 25(等价于 BETWEEN 19 AND 24)。
    • 空值检测:用 IS NULLIS NOT NULL(不能用 = NULL),如 WHERE Age IS NULL
    • 多重条件:WHERE后用 AND/OR 连接,如 WHERE Age > 18 AND Name LIKE '张%'
  3. 模糊查询(部分匹配)

    • 通配符:
      • %:匹配任意长度的字符串(包括0个字符);
      • _:匹配任意单个字符(UTF8编码中,一个汉字需用一个 _ 匹配)。
    • 示例:WHERE Name LIKE '张_%'(匹配“张”开头的3字符姓名,如“张三”“张四”)。
  4. 聚合函数

    • AVG(列名):求数值型列的平均值;
    • SUM(列名):求数值型列的总和;
    • COUNT():计数(COUNT(*) 统计所有记录,包括重复和NULL;COUNT(DISTINCT 列名) 统计不重复的非NULL值)。
  5. 分组查询(GROUP BY)

    • 功能:按指定列分组,对每组进行聚合计算。
    • 搭配 HAVING:对分组后的结果筛选(仅作用于GROUP BY的分组),如:
      SELECT sno
      FROM sc
      WHERE cno = 'C1' OR cno = 'C2'
      GROUP BY sno
      HAVING COUNT(*) = 2;  -- 筛选同时选了C1和C2的学号
      
  6. 排序(ORDER BY)

    • 功能:对查询结果排序,放在查询语句最后。
    • 示例:SELECT * FROM student ORDER BY Age DESC;(按年龄降序)。
四、多表查询与连接
  1. 笛卡积与连接

    • 笛卡积:两表连接未加条件时,结果行数为两表行数乘积(n×m),需避免。
    • 连接类型:
      • INNER JOIN:只保留两表匹配的记录;
      • LEFT JOIN:保留左表所有记录,右表无匹配则为NULL;
      • RIGHT JOIN:保留右表所有记录,左表无匹配则为NULL;
      • FULL JOIN:保留两表所有记录,无匹配则为NULL。
    • 优化建议:先通过WHERE筛选缩减数据量,再进行连接。
  2. 连接写法

    • 隐式连接(简化写法):SELECT * FROM S, SC WHERE S.Sno = SC.Sno;
    • 自身连接:同一张表作为两个表处理(需取别名区分),如 SELECT a.Name, b.Name FROM student a, student b WHERE a.Class = b.Class;
  3. 子查询(嵌套查询)

    • 原则:能用普通查询(如连接)实现的,优先不用子查询;需分步骤返回结果时,使用嵌套查询(优化速度)。
    • 避免:相关子查询(依赖父查询字段,效率低);尽量用 IN 代替 =,不用 ANY/ALL
五、数据更新操作
  1. 修改数据(UPDATE)

    • 建议:明确写出列名(避免数据库迁移时因列顺序变化出错)。
    • 示例:UPDATE student SET Age = 20 WHERE Sno = '20230001';
  2. 删除数据(DELETE)

    • 特性:只删除表中记录,表结构保留。
    • 示例:DELETE FROM student WHERE Age < 18;
六、注意事项
  1. where 里面不可以使用聚合语句
  SELECT * FROM orders 
WHERE SUM(amount) > 100; -- 报错,WHERE 不能直接用聚合函数`

正确写法

-- 方式1:HAVING(需先 GROUP BY)
SELECT customer_id, SUM(amount) 
FROM orders 
GROUP BY customer_id 
HAVING SUM(amount) > 100;-- 方式2:子查询
SELECT * FROM orders 
WHERE customer_id IN (SELECT customer_id FROM orders GROUP BY customer_id HAVING SUM(amount) > 100
);
http://www.dtcms.com/a/273263.html

相关文章:

  • mac m1芯片 安装pd及win10系统
  • 第12讲—一元函数积分学的物理应用
  • 在vscode中安装jupyter
  • 电机电角度与机械角度的个人理解:从蒙圈到理解到放弃
  • 蓝桥云课 矩形切割-Java
  • 快速分页wpf
  • npx cowsay 让动物说话~
  • Java重试+事务的方式优化saveBatch,配置信息修改
  • Flink Exactly Once 和 幂等
  • 【郑大二年级信安小学期】Day9:XSS跨站攻击XSS绕过CSRF漏洞SSRF漏洞
  • 服务器深夜告警?可能是攻击前兆!
  • Unity插件——ABC详解
  • AI驱动的低代码革命:解构与重塑开发范式
  • LeetCode 8. 字符串转换整数 (atoi)
  • 【保姆级喂饭教程】idea中安装Conventional Commit插件
  • FreeRTOS—任务创建和删除的API函数和方法
  • 书生实训营第二关:大模型对战
  • 列表初始化
  • C++ Lambda 表达式详解
  • 《棒垒球知道》奥运会的吉祥物是什么·棒球1号位
  • 【c++八股文】Day6:using和typedef
  • [yolo-world]YOLO-World数据集介绍及标注格式详解
  • SoC程序如何使用单例模式运行
  • 什么是 MIT License?核心要点解析
  • [数据结构与算法] 优先队列 | 最小堆 C++
  • 几种LLM推理加速技术的区别
  • 列表页与详情页的智能识别:多维度判定方法与工业级实现
  • 海光芯赋能:国产化高性能计算平台,重塑边缘与工业智能新算力
  • 使用虚拟机远程登陆ensp模拟器交换机
  • ROS1学习第二弹