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 [表名]

扫描二维码关注公众号,回复: 15204761 查看本文章

查询一个表: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了。以后写博客的先好好考虑能不能帮到大家了。

        万一、真的有人看了发现有错误,欢迎指出!感谢!

猜你喜欢

转载自blog.csdn.net/xiexieyuchen/article/details/123306079