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作用相反

posted @ 2022-02-24 10:59  玲儿想叮当  阅读(57)  评论(0编辑  收藏  举报