Mysql学习&操作总结
操作注意点总结:
1、查询时候,ON后面的条件必须以表.字段名的格式
2、快捷办法:from后表名命名一个表别名(from 表名 表别名; 表名 as 表别名;字段名 as 字段别名)
3、写关键字或者表名的时候或者字段的时候,写一两个字母后会出现可选单词,那么就直接选(快&准确)
4、每一条sql后都需跟英文分好(;)
5、复制sql到sql编辑器窗口,如果sql格式不美观,我们选中sql后,点击美化sql
6、注释sql的方法: -- sql语句,这样sql语句就不会被执行
7、在navicat工具中,选中某张表,右键,选择转储sql方式:
结构和数据:生成建表语句(create)和写入数据的sql语句(insert)
仅结构:生成建表语句(create)
目的:将生成的sql语句复制后,可在任意数据库中执行(例如:学生_成绩库;sys库),结果在相关数据库中生成相关表
8、在nvicat工具中修改字段值后,需要保存(点击√)
9、notepad中 shift+alt +上下 可以实现批处理
sql知识点总结:
1、聚合函数:max、min、count、avg、sum
max:最大
min:最小
count:计数(统计)
avg:平均值
SUM:求和
2、关键字:
group by 对具体表字段进行分组,例如:对学号分组group by student_id
having 类似where,后跟判断条件,例如:having avg(num)>60
where 后跟判断条件,条件表达式中字段应是原表中存在的字段名
on 跟链接语句一起使用(left join ... on ... / right join ...on .../ inner join ... on ...)
where /on /having 用法区别:
where 和 on 的区别:
ON用于连接查询条件使用,where 是单独的条件判断(不是连接中使用),有连接并且有where判断时,where需要在on之后使用
where 和 having的区别:
where 后字段必须为表中存在的字段,having 可用查询字段的别名作为条件进行判断;
where 用于group by 之前;having用于group by之后 (即where是先判断再分组,having是分组后做判断)
操作命令总结:
-- 修改score 表字段
ALTER TABLE score CHANGE course_id course_id int;
ALTER TABLE score CHANGE num num int;
操作练习:
第一题:查询“生物”课程比“体育”课程成绩高的所有学生的学号;
答案:
select A.student_id,sw
from
(select student_id,num as sw from score left join course on score.course_id=course.cid where course.cname='生物') AS A
Left join
(select student_id,num as ty from score left join course on score.course_id=course.cid where course.cname='体育') AS B
ON
A.student_id=B.student_id
where sw > if(isnull(ty),0,ty)
解析:
SELECT
A.student_id, -- 需要查询的字段
sw,
ty
FROM
( SELECT student_id, num AS sw FROM score LEFT JOIN course ON score.course_id = course.cid WHERE course.cname = '生物' ) AS A -- 第一张表A(通过左连接学生表和成绩表筛选条件为生物课的结果)
LEFT JOIN
( SELECT student_id, num AS ty FROM score LEFT JOIN course ON score.course_id = course.cid WHERE course.cname = '体育' ) AS B -- 第一张表B(通过左连接学生表和成绩表筛选条件为体育课的结果)
ON
A.student_id = B.student_id -- 表(左连接A表和B表以学生号为筛选条件,筛选形成的一张新表)
WHERE sw > IF( isnull( ty ), 0, ty ); -- 判断条件:判断生物成绩高于体育成绩
A: 1 60
B: 1 59
2 100
-- IF( isnull( ty ), 0, ty ):做条件判断,如果体育成绩为空时,则返回0;否则,返回该体育成绩
-- 类似python写法:
-- if isnull(ty):
-- 0
-- else:
-- ty
第二题:查询出平均分高于60的学号和平均成绩
select student_id,avg(num) from score group by student_id having avg(num)>60;
课后练习:
1、默写第一题
2、默写第二题
like语句
%xxx%:查询username字段中包含xxx的记录
%xxx:查询username字段中以xxx结尾的记录
xxx%:查询username字段中以xxx开头的记录
select count(tid) from teacher where tname like '李%'
in常用于where表达式中,其作用是查询某个范围内的数据
select * from book where id in (2,4)
not in与in作用相反