写在前面:
本篇文章为学习笔记总结,原视频教程为: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函数即可显示是哪些,包括空行的NULL
SELECTDISTINCT社团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 班';写在最后
本文纯人工总结笔记,如果有错误,欢迎评论区指出!
最后再次向原视频作者致谢!