数据库的学习

数据库的学习

1.单表查询

学生表student的结构:
在这里插入图片描述

查询表中所有学号小于8的男学生的学号和姓名

select sid,sname	# 需要查询出来的字段
from student 		# 从哪张表中取数
where ssex = '男’  and sid < 8 #设置查询条件,两个条件用and(和)/or(或)连接

如果你需要对选择出来的结果进行处理,需要使用函数和order by,再看一个例子:

查询学号非空,姓“张”的学生的学号和姓名,按照sid升序并取前三条

select sid,sname
from student 
where sname like '张%#通过like和通配符%来进行模糊匹配
and sid is not null #学号非空
order by sid  #根据sid排序 默认为升序;添加desc为降序
limit 3  #制取前面三条

多表查询

加入成绩表sc
在这里插入图片描述
通过join连接两张表:

查询赵雷每门课的成绩

select sname ,cid,score
from student 
inner join src
on student.sid = sc.sid #两张表的连接条件,满足条件的两行会合并成为一行
where sc.sname = '赵雷’

复杂用例的编写

加入课程表course和教师表teacher
课程表:
在这里插入图片描述
教师表:
在这里插入图片描述

SQL语言的执行顺序和语法顺序:
如下从上到下为SQL的语法顺序(也就是你写的SQL格式)
在这里插入图片描述
而实际上SQL的执行顺序为:
在这里插入图片描述

实例

在限定学生表学号小于等于6的一批学生中,查询每门课的最高成绩(最高成绩低于70分的课程不显示),然后根据课程最高成绩降序排列取前两条记录。查询的SQL如下:

select cid 					#课程号
 ,max(score) as max_score	#最高分
from sc						#成绩表 
where sid <=6 				#条件子句
//分组查询
group by cid 
having max(score)>=70
order by max(score)
limit 2;
一、条件子句(where)

1. 比较运算符(适用于区间)
比较运算符包括=(等于),>=(大于等于),<=(小于等于),!=(不等于),>(大于),<(小于)。比如查询年龄小于30的学生:

> where sage < 302.

2. 确定范围(适用于连续范围)
between … and …为取值限定了一个范围。例如:查询年龄大于等于10小于等于20的学生:where sage between 10 and 203.
3. 确定集合(适用于离散的少数值)
例如:插入年龄为10,20,30的学生:where sage in (10,20,30)in可以和not一起使用,表示不在这个区间的值

where sage not in (10,20,30)

4 . 字符匹配
通过like 关键字和正则表达式匹配,常用的通配符有%(任意的字符)和下划线(_)(一个字符)。例如查询名字sname带“王”的学生

where sname like "王%

5. 判断是否为空值
通过is null 关键字来判断是否为空,例如查询姓名sname不为空

where sname is not null

6. 多个查询条件
and(两个条件同事满足) 和or(两个条件满足一个即可) 。例如查询年龄Sage小于20并且性别ssex为男的学生:

where sage <20 and ssex = '男’
二、分组查询(group by&聚合函数&having子句)

分组查询实现了类似excel中数据透视表的功能,可以帮助我们对数据进行分层汇总,而我们对分层后的数据进行统计的时候需要用到聚合函数(也就是平均值、求和、最大值和最小值等),最后我们对分层之后的数据筛选的时候需要用到having子句。

where子句是对原始表做筛选的
having子句是对分层汇总之后的结果做筛选的

1. group by
group by不仅可以对一个字段进行分组,还能对多个字段进行分组。这和excel中的数据透视表一致。

2. 聚合函数
在这里插入图片描述
3. having子句

和where子句一致,只需注意是对聚合后的结果作限制。

三、字段选择(select)

select比较灵活,我们不单单能选择原始数据表的字段,还能使用函数对字段进行计算,正如我们第一篇提到的,函数并不是重点,当你需要的时候百度或者问技术小哥就知道了。我们这里只简单介绍一下可以对字段进行计算。例如:查询各学生的年龄(通过公式计算年龄)

select sid, sname, year(curdate()) - year(sage) as sage
from student;
四、结果呈现(order by)

和excel一样,可以用多个字段排序关键字desc表示降序排列.例如:查询学生id和年龄,并先按照学号sid降序,再按照年龄sage升序排列

select
	sid, sage
from student
order by sid desc, sage
表的连接

sql表连接包括内连接、外连接和交叉连接,我们通过一个例子简单介绍三种连接的异同。
1.待连接的表的信息
现在有一张A表和B表,A表记录学生学号sid和对应的姓名name,B表记录学生学号sid和对应的分数score。
2. 内连接
内连接即通过对某个字段进行等值匹配从而将两个表联合起来,比方说我们需要获取两张表中同一个学号对应的姓名和成绩,使用的就是inner join,结果如下:
在这里插入图片描述
3.左连接和右连接
一般情况下,“A表左连接B表”的结果与“B表右连接A表”的结果相同,为了保证SQL代码的易阅读性,一般用左连接即可。左连接指的是将左表作为基准表,保留表中的所有行,将右表根据某个字段进行等值匹配,如果找不到右表中匹配的行则显示为NULL。结果如下:

4.交叉连接
没有连接条件的表连接将产生笛卡尔积,即连接结果行数等于A表行数乘上B表行数,可以理解为两个表的记录两两配对产生的结果。结果如下:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值