mysql基础操作4

文章介绍了SQL中的日期时间函数如NOW(),YEAR()等,并展示了如何进行日期运算和查询。同时,文章涵盖了不同类型的查询操作,包括内连接、左外连接和交叉联接,以及使用子查询和聚合函数来获取特定信息,例如查询学生、课程和成绩的关系,以及找出成绩高于班级平均分的学生。还涉及到了数据的行列转换技巧。
摘要由CSDN通过智能技术生成

日期操作相关函数

NOW() 获取当前日期和时间(日期+时间)

YEAR() 获取日期中的年份

MONTH() 获取日期中的月份

DAY() 获取日期中的天

HOUR() 获取日期中的小时

MINUTE() 获取日期中的分钟

SECOND() 获取日期中的秒

WEEK() 获取日期属于当月的第几个星期

QUARTER() 获取日期属于第几个季度

DAYOFMONTH() 获取日期属于当月的第几天

ADDDATE(d,expr) 返回日期参数d加上一段时间后的日期

SUBDATE(d,expr) 返回日期参数d减去一段时间后的日期

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 返回两个日期的整数差

SELECT NOW()

SELECT YEAR(NOW())

SELECT TIMESTAMPDIFF(YEAR,'2021-01-01',NOW())

查询st1104班的2011年出生的学生姓名、课程名称、分数

SELECT s.stuName,co.cName,g.score

FROM classes c,student s,course co,grade g

WHERE c.bjid=s.bjid AND s.stuid=g.stuid AND co.cid=g.cid

AND c.bjname='st1104' AND YEAR(stuBirthday)=2011

查询工龄在3年以上的员工姓名和部门名称

SELECT e.ename,d.deptName

FROM dept d,emp e

WHERE d.did=e.did AND TIMESTAMPDIFF(YEAR,birthday,NOW())>=3

内连接查询操作列出与连接条件匹配的数据行(仅主外键有对应关系的)

左外连接符合内连接特点并且左边的表全部显示

查询所有的班级及学生信息,没有学生的班级也显示 左外连接实现

SELECT *

FROM classes c LEFT JOIN student s

ON c.bjid=s.bjid

查询所有的班级的学生总人数,显示班级名称和总人数

SELECT c.bjname,count(s.bjid)

FROM classes c LEFT JOIN student s

ON c.bjid=s.bjid

GROUP BY c.bjname

假设每个学生都学习了每门课,显示学生姓名和课程名

SELECT s.stuname,c.cname,g.score

FROM student s CROSS JOIN course c LEFT JOIN grade g

ON s.stuid=g.stuid AND c.cid=g.cid

交叉联接返回左表中的所有行,左表中的每一行与右表中所有行关联

假设每个学生都选择每门课,查询没有选择课程的学生姓名和课程名称

SELECT s.stuname,c.cname,g.score

FROM student s CROSS JOIN course c LEFT JOIN grade g

ON s.stuid=g.stuid AND c.cid=g.cid

WHERE g.score IS NULL

查询st1104班的学生信息 (要求使用子查询完成)

SELECT *

FROM student

WHERE bjid=(SELECT bjid

FROM classes

WHERE bjname='st1104')

查询学生王甘的老乡的信息 自查询:一张表赋予两种不同的身份

SELECT s2.*

FROM student s1,student s2

WHERE s1.stuAddress=s2.stuAddress

AND s1.stuname='王甘' AND s2.stuname<>'王甘'

查询所有的学生姓名、课程名称及分数, 并进行 行列转换(面试题)

SELECT s.stuname,

sum(CASE WHEN c.cname='HTML' THEN g.score ELSE 0 END)'HTML',

sum(CASE WHEN c.cname='JAVA' THEN g.score ELSE 0 END)'JAVA',

sum(CASE WHEN c.cname='MySQL' THEN g.score ELSE 0 END)'MySQL',

sum(CASE WHEN c.cname='SpringBoot' THEN g.score ELSE 0 END)'SpringBoot'

FROM student s,course c,grade g

WHERE s.stuid=g.stuid AND c.cid=g.cid

GROUP BY s.stuname

中间结果集的思想

查询所有SpringBoot成绩比其所在班级平均成绩高的学生信息

SELECT s1.*

FROM student s1,grade g1,course c1,(SELECT c.bjid,avg(g.score)pjf

FROM classes c,student s,grade g

WHERE c.bjid=s.bjid AND s.stuid=g.stuid

GROUP BY c.bjid)temp

WHERE s1.stuid=g1.stuid AND c1.cid=g1.cid AND s1.bjid=temp.bjid AND

c1.cname='SpringBoot' AND g1.score>temp.pjf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值