说到SQL,相信大家第一反应就是,好难,看不懂,有现成的命令可以搜,不会用,等等等等各种自我劝退。
其实,在这里我告诉你,莫慌,我也没那么精通。只是恰好相比你们有一些自己的理解。
简单说说sql逻辑,正如下面的流程图,sql是有逻辑的,理解了逻辑,记住特定名词,稍稍练手,很快就理解,相信我,sql不难。
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
上面的单词都认识吧?
不认识?那请移步隔壁B站学习小学英语,这篇教程不适合你。
现在请记住上面的逻辑,我一点一点讲给你听。
SELECT列 FROM表 WHERE条件 GROUP BY分组 HAVING过滤 ORDER BY排序
翻译过来就是下面这样
SELECT 查询
FROM 从哪里
WHERE 筛选条件
先筛选数据,再分组聚合,最后排序输出
好现在基本名词你应该已经记下来了,接下来的概念会很抽象,不过没关系,带上你的脑袋瓜,把记住的名词带入案例,你很快就明白是什么意思了。
- 查数据(SELECT)
-- 基础查询
SELECT 姓名, 成绩 FROM 学生表 WHERE 年龄 > 18;
-- 排序
SELECT * FROM 成绩表 ORDER BY 分数 DESC;
-- 分组统计
SELECT 课程, AVG(成绩) FROM 成绩表 GROUP BY 课程;
-- 多表联查
SELECT s.姓名, c.课程名
FROM 学生表 s
JOIN 选课表 c ON s.学号 = c.学号;
口诀:SELECT列 FROM表 WHERE条件 GROUP BY分组 HAVING过滤 ORDER BY排序
2. 增删改数据
-- 插入单条
INSERT INTO 学生表 (学号, 姓名) VALUES (1, '张三');
-- 更新数据
UPDATE 成绩表 SET 分数=90 WHERE 学号=1;
-- 删除数据
DELETE FROM 学生表 WHERE 年龄 < 18;
注意:UPDATE和DELETE必须加WHERE,否则全表操作!
3. 事务控制
BEGIN; -- 开始事务
UPDATE 账户 SET 余额=余额-100 WHERE 姓名='A';
UPDATE 账户 SET 余额=余额+100 WHERE 姓名='B';
COMMIT; -- 提交事务(成功)
-- 出错时用 ROLLBACK; 回滚
考点:事务的ACID特性(原子性、一致性、隔离性、持久性)
三、考试高频题型
题型1:多表联查
例题:查学生姓名及其选修的课程名
SELECT s.姓名, c.课程名
FROM 学生表 s
INNER JOIN 选课表 c ON s.学号 = c.学号;
关键:JOIN类型(INNER/LEFT/RIGHT)
题型2:分组统计
例题:统计每门课的平均分,只显示平均分>80的课程
SELECT 课程, AVG(成绩) AS 平均分
FROM 成绩表
GROUP BY 课程
HAVING AVG(成绩) > 80;
注意:WHERE过滤行,HAVING过滤分组后的结果
题型3:子查询
例题:查成绩高于平均分的学生
SELECT 姓名, 成绩
FROM 学生表
WHERE 成绩 > (SELECT AVG(成绩) FROM 学生表);
考点:子查询在WHERE或FROM中的使用
四、必背函数与语法
聚合函数
COUNT():计数(COUNT(*)统计所有行)
SUM():求和、AVG():平均值、MAX()/MIN():极值
日期函数
YEAR(日期):提取年份
DATEDIFF(结束日期, 开始日期):计算天数差
字符串函数
CONCAT():拼接字符串
SUBSTRING():截取子串
五、考试避坑指南
主键约束:唯一且非空,常用于标识记录(如学号)。
外键约束:确保关联数据存在(如班级ID必须存在于班级表)。
索引优化:在WHERE或JOIN条件列建索引,加速查询
事务回滚:批量操作时用BEGIN...COMMIT,出错时ROLLBACK保数据安全。
六、快速练习建议
基础题:用SELECT查年龄>20的学生姓名。
联表题:查学生及其所在班级名称(需两表关联)。
统计题:计算每门课的最高分、最低分、平均分。
事务题:模拟转账操作(A扣100,B加100)。
如果上述你还是无法理解并练习后脑子一片空白的话,有一个方法,相信你的记性不错。
Mysql 基础语法
库 表 列 字段
创建数据库
Creat database company
创建表
create table persons(
id int primary key,
name varchar(10),
age int,
height float,
hobby char(10),
address varchar(12)
)default charset=utf8;
插入一条数据
insert into persons values(1,'哈喽',18,181.2,'跑步,瑜伽','上海')
插入多行数据
insert into persons values(1,'哈喽',18,181.2,'跑步,瑜伽','上海'),(2,'张三',25,180.2,'篮球','南京')
查询表里所有内容
Select * from persons;
修改员工信息
update persons set address='合肥',hobby='象棋' where id =1;
删除个人信息
delete from persons where id=3 and address='南京';
其他的只需要类比替换关键词即可。
此方法只适用于紧急速记应付临时考试,切勿面试时照本宣科,完全来不及甚至答非所问被面试淘汰。