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

面试题:基础的sql命令

基础的 SQL 命令主要用于对数据库进行查询、新增、修改、删除等操作,可分为以下几类:

一、数据查询(SELECT)

用于从表中获取数据,是最常用的命令。
基本语法

SELECT 列名1, 列名2... FROM 表名 WHERE 条件;
  • 示例:查询students表中所有 18 岁以上的学生姓名和年龄
    SELECT name, age FROM students WHERE age > 18;
    
  • 常用扩展:DISTINCT(去重)、ORDER BY(排序)、LIMIT(限制结果数量)等。

我来扩写这个 SQL 查询,加入 DISTINCT、ORDER BY 和 LIMIT 等常用扩展功能:

-- 查询18岁以上不重复的学生姓名和年龄,按年龄降序排列,年龄相同的按姓名升序排列,只返回前20条记录
SELECT DISTINCT name, age 
FROM students 
WHERE age > 18 
ORDER BY age DESC, name ASC 
LIMIT 20;

这个扩展查询包含以下功能:

  1. DISTINCT - 确保返回的结果中没有重复的行

  2. WHERE age > 18 - 筛选条件,只返回18岁以上的学生

  3. ORDER BY age DESC, name ASC - 先按年龄降序排列,年龄相同的再按姓名升序排列

  4. LIMIT 20 - 只返回前20条记录

如果需要更复杂的查询,还可以考虑:

  • 添加 GROUP BY 进行分组

  • 使用 HAVING 对分组结果进行筛选

  • 使用 JOIN 连接其他表

  • 添加 OFFSET 实现分页功能

我将扩展这个 SQL 查询,加入 GROUP BYHAVINGJOIN 和 OFFSET 分页功能,同时保持之前的 DISTINCTORDER BY 和 LIMIT 条件:

假设场景:

  • students 表存储学生信息(idnameageclass_id

  • classes 表存储班级信息(idclass_nameteacher_id

  • exam_scores 表存储考试成绩(student_idscore

查询目标:

"查询18岁以上、平均分≥60分的学生姓名、年龄和班级名称,按年龄降序排列,并实现分页(每页10条记录)"

完整 SQL:

SELECT s.name,s.age,c.class_name,AVG(e.score) AS avg_score
FROM students s
LEFT JOIN classes c ON s.class_id = c.id
LEFT JOIN exam_scores e ON s.id = e.student_id
WHERE s.age > 18
GROUP BY s.id, s.name, s.age, c.class_name
HAVING AVG(e.score) >= 60
ORDER BY s.age DESC,s.name ASC
LIMIT 10 OFFSET 0;  -- 第一页(0-10条记录)

关键功能说明:

  1. JOIN(连接表):

    • 连接 students 和 classes 获取班级名称

    • 连接 students 和 exam_scores 计算平均分

  2. GROUP BY(分组):

    • 按学生ID、姓名、年龄和班级名称分组

    • 确保聚合函数(如 AVG)正确计算每个学生的平均分

  3. HAVING(筛选分组):

    • 筛选出平均分≥60的学生(WHERE 不能用于聚合条件)

  4. DISTINCT(去重):

    • 由于 GROUP BY 已经确保唯一性,这里可以省略 DISTINCT

  5. ORDER BY(排序):

    • 优先按年龄降序(DESC),其次按姓名升序(ASC

  6. LIMIT + OFFSET(分页):

    • LIMIT 10 每页10条

    • OFFSET 0 从第1条开始(第2页改为 OFFSET 10

进阶扩展:

  • 如果需要计算总页数,可结合 COUNT(*) OVER() 窗口函数:

    SELECT s.name,s.age,c.class_name,AVG(e.score) AS avg_score,COUNT(*) OVER() AS total_count
    FROM ...

二、数据插入(INSERT)

用于向表中新增记录。
基本语法

INSERT INTO 表名 (列名1, 列名2...) VALUES (值1, 值2...);
  • 示例:向students表插入一条新记录
    INSERT INTO students (name, age, gender) VALUES ('张三', 20, '男');
    

三、数据更新(UPDATE)

用于修改表中已有记录。
基本语法

  • 示例:将students表中id=1的学生年龄改为 21
    UPDATE students SET age=21 WHERE id=1;
    

    注意:若省略WHERE,会修改表中所有记录,需谨慎使用。

四、数据删除(DELETE)

用于删除表中的记录。
基本语法

  • 示例:删除students表中age < 18的记录
    DELETE FROM students WHERE age < 18;
    

    注意:若省略WHERE,会删除表中所有记录(表结构保留)。

五、表结构操作

1. 创建表(CREATE TABLE)

sql

CREATE TABLE 表名 (列名1 数据类型 约束,列名2 数据类型 约束...
);
  • 示例:创建students
    CREATE TABLE students (id INT PRIMARY KEY, -- 主键(唯一标识)name VARCHAR(50) NOT NULL, -- 非空age INT
    );
    
2. 删除表(DROP TABLE)
DROP TABLE 表名; -- 彻底删除表(包括结构和数据)
3. 修改表结构(ALTER TABLE)
  • 新增列:ALTER TABLE 表名 ADD 列名 数据类型;
  • 删除列:ALTER TABLE 表名 DROP COLUMN 列名;

六、其他常用命令

  • DESCRIBE 表名;(或DESC 表名;):查看表结构。
  • USE 数据库名;:切换到指定数据库。
  • SHOW DATABASES;:查看所有数据库。
  • SHOW TABLES;:查看当前数据库中的所有表。

这些命令覆盖了 SQL 的核心操作,掌握后可完成大部分基础数据库交互。

左链接,右链接的区别

右链接:最大的条数取决于右边

左链接:最大的条数取决于左边

http://www.xdnf.cn/news/17100.html

相关文章:

  • 在LLM小型化趋势下,AI Infra需要做出哪些相应调整?
  • 【完整源码+数据集+部署教程】爬行动物异常检测系统源码和数据集:改进yolo11-GhostDynamicConv
  • JavaScript 中 var、let 和 const 的区别与使用场景
  • TCP的三次握手和四次挥手实现过程。以及为什么需要三次握手?四次挥手?
  • [GESP202309 四级] 2023年9月GESP C++四级上机题题解,附带讲解视频!
  • Python爬虫08_Requests聚焦批量爬取图片
  • layernorm backward CUDA优化分析
  • linux nfs+autofs
  • mq_unlink系统调用及示例
  • Java开发时出现的问题---并发与资源管理深层问题
  • 在具身智能火热加持下,看 2025 年机器人学术年会中的热点主题。PNP机器人展示力控、灵巧手捕捉等案例。
  • Android Studio下载及安装配置
  • 计算机视觉的四项基本任务辨析
  • Android audio之 AudioDeviceInventory
  • 飞算JavaAI需求转SpringBoot项目:从零到一的沉浸式开发之旅
  • 人工智能之数学基础:利用全概率公式如何将复杂事件转为简单事件
  • 学习游戏制作记录(将各种属性应用于战斗以及实体的死亡)8.5
  • DM8日常运维命令总结(四)
  • Go语言 string
  • 数据结构——双向链表
  • Linux 调度器函数sched_*系统调用及示例
  • 【音视频】WebRTC 一对一通话-信令服
  • Go语言实战案例:使用context控制协程取消
  • 算法训练之哈希表
  • Java后端高频面试题
  • React在使用create-react-app创建项目慢的解决办法
  • python的高校考研交流系统
  • 基于ARM+FPGA多通道超声信号采集与传输系统设计
  • 广州客户 戴尔R720服务器 liunx系统 RAID5无损升级扩容
  • 注意点:Git 从安装到分支协作、冲突解决的完整步骤 ---待修改,没看这个步骤,需要重新整理步骤