计算机应用

导航

第09周 SQL语言基础与单表数据检索

第9周 · SQL 语言基础与单表数据检索

前面几周都在"搭结构"(建库、建表、加约束)。这周开始真正用 SQL 操控数据——核心就是 SELECT 查询。查询是 3+证书考试的重头戏,也是日常用得最多的语句。


一、知识点:SQL 语言四大类

分类 全称 作用 代表语句
DDL 数据定义语言 定义结构 CREATE / ALTER / DROP
DML 数据操纵语言 增删改数据 INSERT / UPDATE / DELETE
DQL 数据查询语言 查询数据 SELECT
DCL 数据控制语言 权限管理 GRANT / REVOKE

这周主角是 DQL 的 SELECT


二、操作教程:先准备数据(INSERT)

要查得先有数据。向 student 插入几条记录(不写 sid,让它自增):

USE school;

CREATE TABLE student (
  sid     INT         NOT NULL,
  sname   VARCHAR(20) NOT NULL,
  sage    INT,
  sgender VARCHAR(4),
  sdept   VARCHAR(30)
);

INSERT INTO student(sname, sage, sgender, sdept) VALUES
  ('张伟', 19, '男', '计算机系'),
  ('李娜', 20, '女', '软件工程系'),
  ('王芳', 18, '女', '计算机系'),
  ('刘强', 21, '男', '网络工程系');

INSERT 是 DML,正式的系统讲数据更新在第15周;这里只为后面查询有数据可玩。


三、操作教程:SELECT 基本结构

最朴素的查询:

SELECT 列名 FROM 表名;

例:查所有学生的姓名和年龄

SELECT sname, sage FROM student;

SELECT 执行逻辑:FROM 定位表 → 再 SELECT 决定显示哪些列。查询只"看"数据,不修改数据。


四、知识点:查所有列 * 与指定列(投影)

SELECT * FROM student;              -- * 表示所有列
SELECT sname, sdept FROM student;   -- 只取需要的列(投影)

生产环境尽量写具体列名,少用 *:① 只取要的,省传输;② 表结构变了 * 可能带出不该暴露的列。


五、操作教程:列别名 AS

给查询结果的中文/易读列名:

SELECT sname AS 姓名, sage AS 年龄 FROM student;

AS 可以省略,写成 sname 姓名 也行;别名只是显示用,不改表里真名。


六、操作教程:DISTINCT 去重

想知道"学生都分布在哪些系",每个系只列一次:

SELECT DISTINCT sdept FROM student;

结果只返回不重复的系名(计算机系、软件工程系、网络工程系)。

DISTINCT 作用于后面所有选定列的组合。写 SELECT DISTINCT sname, sdept 是对"姓名+系"去重,不是只去重系。


七、操作教程:LIMIT 限制行数

只要看前几行(常用于翻页、抽样):

SELECT * FROM student LIMIT 3;          -- 前 3 行
SELECT * FROM student LIMIT 2, 3;        -- 从第 3 行起(偏移2)取 3 行

LIMIT m, nm 是偏移量(从0开始),n 是取几行。


八、综合实操:作业三题

-- 题1:插入3条 + 查所有列 + 投影两列
INSERT INTO student(sname, sage, sgender, sdept) VALUES
  ('张伟',19,'男','计算机系'),
  ('李娜',20,'女','软件工程系'),
  ('王芳',18,'女','计算机系');
SELECT * FROM student;
SELECT sname, sage FROM student;

-- 题2:条件查询(WHERE 下一周细讲,这里先会用)
SELECT * FROM student WHERE sdept = '计算机系';

-- 题3:去重查所有系
SELECT DISTINCT sdept FROM student;

九、易混点排查表

现象 解决方法
SELECT * 列太多看花眼 改用具体列名投影,只取需要的
DISTINCT 没去重 确认是否多列组合导致"组合不重复";只想对单列去重就只选那列
别名中文乱码/报错 用反引号或确保客户端字符集 utf8mb4
LIMIT 偏移算错 记住偏移从 0 开始:LIMIT 2,3 是第3行起取3行
查不出来以为数据没了 查询不改数据;用 SELECT * 确认表真有数据
字符串没加引号 文本值必须单引号 '计算机系',数字不用

十、小测验(自测)

  1. SELECT *SELECT 列名 有什么区别?什么时候不该用 *
  2. sname 起中文别名"姓名"的 SQL 怎么写?AS 能省略吗?
  3. SELECT DISTINCT sdept FROM student; 返回什么?DISTINCT 作用在哪些列?
  4. 只取前 3 行学生的 SQL 是什么?SELECT 会修改表里的数据吗?

【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。

posted on 2026-08-29 10:26  eagle福  阅读(6)  评论(0)    收藏  举报