当前位置: 首页 > 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.lryc.cn/news/584671.html

相关文章:

  • 网安系列【15】之Docker未授权访问漏洞
  • 需求不稳定对项目进度影响大,如何进行变更控制
  • 显卡GPU的架构和工作原理
  • Rail开发日志_2
  • EasyCVR视频汇聚平台国标接入设备TCP主动播放失败排查指南
  • 【2025/07/10】GitHub 今日热门项目
  • 学习笔记(32):matplotlib绘制简单图表-数据分布图
  • STM32中DMA(直接存储器访问)详解
  • linux系统---ISCSI存储服务
  • python基础25_某大网校(下)处理json数据以及保存题库
  • 遥感影像图像分割-地物提取模型训练与大图直接推理流程
  • AI翻唱——So-VITS-SVC
  • ARM环境上 openEuler扩展根盘并扩展到根分区中
  • MySQL数据库调优
  • C++ 中最短路算法的详细介绍(加强版)
  • 【养老机器人】核心技术
  • 深入拆解Spring核心思想之一:IoC
  • vue3中ref和reactive的使用、优化
  • 入门级别的Transformer模型介绍
  • Linux 内核日志中常见错误
  • 学习JNI 二
  • 机器学习1
  • Java线程池原理概述
  • Spring Boot:将应用部署到Kubernetes的完整指南
  • 什么?不知道 MyBatisPlus 多数据源(动态数据源)干什么的,怎么使用,看这篇文章就够了。
  • Windows安装DevEco Studio
  • 深入理解oracle ADG和RAC
  • 高并发导致重复key问题--org.springframework.dao.DuplicateKeyException
  • 企业电商平台搭建:ZKmall开源商城服务器部署与容灾方案
  • Java中实现线程安全的几种方式