SQL入门刷题笔记
2022/3/6 19:15:50
本文主要是介绍SQL入门刷题笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
开始学习数据库了,如题,这篇博客就是我SQL入门的学习笔记。没有太多语法,更多的是一些函数的运用,就是主要是直接上代码,不讲理论上的东西。所以这篇博客真的只是笔记,不是讲解。
内容
首先,安装一个SQL的编辑器,我使用的是SQLserver:SQLsever安装教程
然后就是练习网站:SQL练习网站(入门篇39道题,肝的话可以一天解决)(本笔记的顺序就是按题目的顺序写的)
需要提前说明的是,SQL的不分大小写的,只要单词不出错就好,我个人是比较喜欢用小写。
下面就是正式内容了
创建表: 这是我根据第一题创建的第一个表(后来才发现原来题目不需要我创建表),这是学习链接
create table user_profile(/*user_profile是表名*/ id char(8), device_id char(8), gender char(8), age int, university char(20), province char (20), )
将数据插入表,学习链接
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong');
删除一个表,学习链接
drop table [表名]
查询一个表:select*from [表名]
查询指定列:select [字段名],... ,[字段名] from [表名]
select 与 from 之间是字段名,也就是列名
对表中的一列进行去重查询(不改变原表):
select [字段名] from [表名] group by [字段名]
group by [字段名],是一个分组语句,分组的依据可以有多个
输出表的前几行:
select top n *from [表名] (SQLserver支持top,但是不支持limit)
或
select *from [表名] limit 0,n
或
select *from [表名] limit n
(输出某一列的前几行只需要将*号改为某一列的名称即可)
修改表某一列的名称:
exec sp_rename '[表名].[旧字段名]','[新字段名]','column'
在进行输出时改变表某一列的名称(但是原表中该列的名称不变,表头重命名用as):
select top 2 [字段名] as [新字段名] from [表名](SQLserver中适用)
或
select [字段名] as [新字段名] from [表名] (SQLserver中使用会报错)
注:as语句也可以对表名使用,当表名太长时使用可以方便很多。
通过某一值查询对应行:(可输出多列)学习链接
select [字段名] from [表名] where [字段名]='xxx'
例:select device_id,university from user_profile where university='北京大学'
通过大于某值进行查询对应行:(该代码为:输出年龄大于24的学生信息)
select device_id,gender,age,university from user_profile where age>24
查询在某值范围内的行:
select device_id,gender,age from user_profile where age>=20 and age<=23
或
select device_id,gender,age from user_profile where age between 20 and 23
注:SQL中的与或语句与python一样:and(与),or(或)
查询除某值外的其它行信息:
例: select device_id,gender,age,university from user_profile where university != '复旦大学'
过滤某一值为空的行:(该例子为过滤年龄为空的行)
select device_id,gender,age,university from user_profile where age is not NULL
查询某一值在几个值中的行:(例子为查询学校为北大、复旦、山大的同学信息)
select device_id,gender,age,university from user_profile
where university in ('北京大学','复旦大学','山东大学')
查询某值含有某字段的行:(例子为查询学校中含有'北京'的行)
select device_id,gender,age,university from user_profile
where university like '%北京%'
注:like语句学习链接与通配符学习链接
输出某数值的最大最小值:
select max([字段名]) from [表名]
select min([字段名]) from [表名]
注:max()min()也可用于char类型,或文本类型,会获得按字母顺序排列的最高或最低值,且null(空值)不进行记录
统计所有记录的数量:
select count (*) from [表名]
统计某列的数量:(不包括null)(例子为求表中男性的人数有多少)
select count(gender) from user_profile where gender='male'
统某列不重复的数量:
select count(distinst [字段名]) from [表名]
关键词 distinct 用于返回唯一不同的值
统计某列中的值重复了多少次:(例子为查询各个年龄有多少人)
select age count(1) as age from user_profile group by age
计算某一字段的平均值:
select avg([字段名]) as [新字段名] from [表名]
round()函数:
用于把数值字段舍入为指定小数位数:round([字段名],位数)
where和having的区别:
“Where” 是一个约束声明,使用Where来约束来之数据库的数据,
Where是在结果返回之前起作用的,且Where中不能使用聚合函数。
“Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,
在Having中可以使用聚合函数。聚合函数就是指max,avg,count,round这些函数
将表按某值排序
order by sal(列名)(默认升序)
order by sal desc(加上desc变为降序)
当order by后面有多个字段时,先按前面的字段排序,再按后面的字段排序
关联表:(left join、inner join、right join的区别学习链接)
关联两个表:
可以通过inner join 关联,
inner join 表名 on 表名.同元素=表名.同元素
关联3个表:
from (表1 inner join 表2 on 表1.字段号=表2.字段号)
inner join 表3 on 表1.字段号=表3.字段号
对输出不进行去重的语句:union all(可以将多个并列的select语句作为一个输出,不会输出多余的表头)
判断某值为null时应该用is而不是等于号=
条件函数case when用法:学习链接
1.简单函数
case [col_name] when [value1] then [result1]…else [default] end
2.搜索函数
case when [expr] then [result1]…else [default] end(when表达式中可以使用and)
常用日期函数
year(列名),month(列名),day(列名),可以分别获取表中的年月日
或
date_format(列名,'%y') as year
date_format(列名,'%m') as month
date_format(列名,'%d') as day
获取年月日
获取当前时间:now()函数:可以获取年月日时分秒
interval语句:学习链接
常用在date_add()、date_sub()函数中,常用于时间的加减法
截取字符串的函数:substring_index(),学习链接
用法规则:
substring_index(“待截取有用部分的字符串”,“截取数据依据的字符”,
截取字符的位置N)
substring_index(())可以进行镶套截取
查询某字段最小值(或最大值):
select * from [表名] where [字段名] in ( select min([字段名])from [表名] )
或:
select * from [表名] order by [字段名] asc limit 0,1
sum和count函数的区别:学习链接
sum()用于求和,count()用于行数的统计。
sum()列值为空时不计算,count()为空时认为没有这一行。
sum()为空时返回结果为null
结语
写完了才发现自己写得杂乱无章,没有进行排版分类,对大多数人基本无用,算是垃圾blog了。以后写博客的先好好考虑能不能帮到大家了。
万一、真的有人看了发现有错误,欢迎指出!感谢!
这篇关于SQL入门刷题笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南