写在前面本篇文章为学习笔记总结原视频教程为b站up PAPAYA电脑教室 的 SQL 十四分钟速成班没错不要怀疑资料库语法比中午决定吃什么还要简单原视频讲得很好欢迎查看原作者的视频此文为视频教程的文字版。在此致谢目录学习网站与资料SQL语法笔记写在最后学习网站与资料原作者提供了一个学习 SQL 的网站sqliteviz该网站可以直接在浏览器上操作数据库不用安装任何软件对初学者非常友好但是需要特殊网络环境此外作者在视频简介提供了相关资料分享练习档下载 载点一 https://tinyurl.com/2azrrbcb 载点二 https://share.weiyun.com/t8GrkeZy SQL 语法笔记 https://tinyurl.com/26dgqg7x“载点一” 和 “SQL语法笔记” 需要特殊网络环境原视频作者居住在tw建议使用 “载点二” 第三个 “SQL 语法笔记” 我更新到了另一篇博客也提供了文档下载在此再次感谢原作者建议大家优先使用原作者链接文章SQL 範例語法 —— PAPAYA电脑教室下载PAPAYA电脑教室 的 SQL 範例語法 搬运 已设置0积分下载SQL语法笔记使用/* */或--写注释/* 这是多行注释 多行注释 */-- 这是单行注释使用SELETE导入数据*通配符表示全部FROM students表示从students表中导入语句末尾建议加;SELECT*FROMstudents;也可以指定导入部分栏位SELECT姓名,班级,成绩FROMstudents;访问大量数据会影响系统性能可以使用LIMIT加以限制SELECT姓名,班级,成绩FROMstudentsLIMIT5;这样数据库只会返回最先检索到的5个数据如果需要查看接下来的5条使用OFFSET语法类比C中的偏移量SELECT姓名,班级,成绩FROMstudentsLIMIT5OFFSET5;虽然代码可以写在同一行但是建议按关键字进行分行这样会让代码的可读性更高SELECT姓名,班级,成绩FROMstudentsLIMIT5OFFSET5;使用WHERE设置查询时的筛选条件选择是2班的同学SELECT姓名,班级,成绩FROMstudentsWHERE班级1 年 2 班;选择不是2班的同学SELECT姓名,班级,成绩FROMstudentsWHERE班级1 年 2 班;使用ORDER BY进行排序SELECT姓名,班级,成绩FROMstudentsWHERE班级1 年 2 班ORDERBY班级;此时会先显示1班再显示3班SELECT姓名,班级,成绩FROMstudentsWHERE班级1 年 2 班ORDERBY班级,成绩;此时会在班级排序的基础上按照成绩由小到大排序如果希望改为降序使用DESC即可SELECT姓名,班级,成绩FROMstudentsWHERE班级1 年 2 班ORDERBY班级,成绩DESC;搜索指定条目SELECT姓名,班级,成绩FROMstudentsWHERE姓名林小玉;如果忘记了具体名字可以使用万用字%表示0个或多个任意字元_表示一个字元前面的要变成LIKE(符合)SELECT姓名,班级,成绩FROMstudentsWHERE姓名LIKE林%;此时会列出所有名字首字为林的条目SELECT姓名,班级,成绩FROMstudentsWHERE姓名LIKE林_;此时会列出所有名字首字为林且名字只有两个字的条目WHERE也可用于数字大小的判断查询分数大于等于80的学生SELECT姓名,班级,成绩FROMstudentsWHERE成绩80;查询分数在80至90之间的学生SELECT姓名,班级,成绩FROMstudentsWHERE成绩80AND成绩90;查询数值之间可以使用BETWEENAND来查询SELECT姓名,班级,成绩FROMstudentsWHERE成绩BETWEEN80AND90;可以加入更多的条件进行筛选AND表示且SELECT姓名,班级,成绩FROMstudentsWHERE成绩BETWEEN80AND90AND班级1 年 1 班;OR表示或SELECT姓名,班级,成绩FROMstudentsWHERE成绩BETWEEN80AND90AND(班级1 年 1 班OR班级1 年 2 班);此处要加括号因为AND的语法优先级比OR更高使用IN进行更快捷的条件查询SELECT姓名,班级,成绩FROMstudentsWHERE成绩BETWEEN80AND90AND(班级IN(1 年 1 班,1 年 2 班));SQL有和Excel类似的功能利用函数完成运算AVG计算平均值SUM计算总和MAX计算最大值MIN计算最小值COUNT计算数量SELECTAVG(成绩),SUM(成绩),MAX(成绩),MIN(成绩),COUNT(成绩)FROMstudents;在使用函数计算后如果感觉栏位名称不够直观可以使用AS设置别名SELECTAVG(成绩)AS成绩平均值FROMstudents;使用ROUND设置保留几位小数保留一位小数SELECTROUND(AVG(成绩),1)AS成绩平均值FROMstudents;保留至整数位SELECTROUND(AVG(成绩))AS成绩平均值FROMstudents;使用GROUP BY进行资料分组SELECT班级,ROUND(AVG(成绩),1)AS成绩平均值FROMstudentsGROUPBY班级ORDERBY成绩平均值DESC;按班级计算平均分并且降序显示对于GROUP BY分组后的数据使用HAVING关键字进行筛选SELECT班级,ROUND(AVG(成绩),1)AS成绩平均值FROMstudentsGROUPBY班级HAVING成绩平均值80ORDERBY成绩平均值DESC;SQL语法优先级SELECT 选取FROM 来源WHERE 条件GROUP BY 分组HAVING 条件ORDER BY 顺序LIMIT 个数限制计算总行数SELECTCOUNT(*)FROMstudents;计算社团行数SELECTCOUNT(社团)FROMstudents;如果该行不存在该栏目值COUNT不会计算入行数内使用DISTINCT排除重复的行SELECTCOUNT(DISTINCT社团)FROMstudents;去掉COUNT函数即可显示是哪些包括空行的NULLSELECTDISTINCT社团FROMstudents;想要去除NULL使用WHERE加上IS NOT过滤SELECTDISTINCT社团FROMstudentsWHERE社团ISNOTNULL使用CREATE TABLE建立新资料表后接表格名称使用()表示表格含有哪些栏位栏位之间使用,分隔栏位名称后接数值类型注意字符类型关键字是VARCHAR在主键的栏目后面使用PRIMARY KEY设置主键CREATETABLEclubs(社团编号INTPRIMARYKEY,社团名称VARCHAR(15));使用DROP TABLE删库跑路这下看懂了DROPTABLEtest;使用INSERT INTO和VALUES插入数据INSERTINTOclubs(社团编号,社团名称)VALUES(101,吉他社),(102,篮球社),(103,美术社),(104,NULL);使用UPDATE语法更新表格资料UPDATEclubsSET社团名称舞蹈社WHERE社团编号104;使用SET时后面一定要跟WHERE否则所有社团名称都会被修改为舞蹈社使用DELETE删除数据DELETEFROMclubsWHERE社团编号104;同理也要接WHERE否则会删除全部数据这下又看懂了跨表格查询使用LEFT的方式JOIN接入第二个表格使用ON设置两个表格之间如何连接SELECTstudents.姓名,students.社团,clubs.社团名称FROMstudentsLEFTJOINclubsONstudents.社团clubs.社团编号WHERE班级1 年 1 班;此时会显示1 年 1 班的所有人的姓名社团社团名称虽然有些人没有社团但也会显示如果想要只输出两边都有的数据可以将LEFT的方式改为INNER图中的最后两个就会不显示SELECTstudents.姓名,students.社团,clubs.社团名称FROMstudentsINNERJOINclubsONstudents.社团clubs.社团编号WHERE班级1 年 1 班;写在最后本文纯人工总结笔记如果有错误欢迎评论区指出最后再次向原视频作者致谢