mysql函数实现主键存表返回最大值_MySQL学习记录

0cca67c6ab5f3912ea554de31dde6fd0.png

一、MySQL入门

1.了解数据库和MySQL

本章是MySQL的入门章节,在本章中主要是对MySQL和数据库概念的一个了解和MySQL的安装,并且学习了如何使用数据库客户端工具navicat对MySQL进行连接,并且对navicat的基本操作进行学习。

2.创建数据表

3e9746df763dc0866e5de76343bb6234.png

3.利用查询功能在表内插入数据

0c1d1f3b4c0d53f2593b250d154049d9.png

e4f5731777b18b10e32665e7362723fc.png

6340a29ef166be0fda5c6a4bb58214cc.png

bb615fe796013fd673dcd9a79bebd28c.png

二、简单查询

1.基本查询语句

select子句:select <列名1>,<列名2>,......

from子句:from <表名>;

select * from <表名>; 表示查询该表中的全部列。

4075f4fa082fd4a6cab67f9eb4f62d9e.png

distinct子句:删除重复数据 select distinct 姓名 from student;表示删除student表中姓名列中重复的数据。

e12d3348bb196bd9618b517066415089.png

2.指定查询条件

select <列名1>,<列名2>,......

from <表名>

where 查询条件;

SQL的运行顺序:

  • from 从哪张表中查找数据
  • where 查询出符合条件的行
  • 从查询出的行中选取出select语句指定的列

3.运算符

算术运算符:+ - * / 任何数与null运算结果都等于null

比较运算符:=、<>(不等于)、>、>=、<、<=

逻辑运算符:not(否定某一条件)、and(并且)、between(范围查询)、or(或者)、in(or的简单用法)

4.字符串模糊查询

like子句:字符串模糊查询(%表示任意字符串、_一个下划线表示任意1个字符)

e85e2d3afd98d037c626fd6dc3eebb37.png

82942cdd267d455a3669955266c5af6b.png

三、汇总分析

1.汇总函数

count函数:求某列的行数,count(*)表示求所有行数

select count(*) from teacher; 表示求“teacher”表的所有行数

sum函数:对某列数据求和,只能对数值类型的列计算

select sum(成绩) from score; 表示对“score”表中的“成绩”列求和

avg函数:求某列数据的平均值,只能对数值类型的列计算

select avg(成绩) from score; 表示对“score”表中的“成绩”列求平均值,即求平均成绩

max函数:求某列数据的最大值

select max(成绩) from score; 表示求“score”表中的“成绩”列的最大值

min函数:求某列数据的最小值

select min(成绩) from score; 表示求“score”表中的“成绩”列的最小值

2.分组

group by子句:将数据按某个条列进行分组

select 性别,count(*) from student group by 性别; 按性别进行分组,汇总不同性别的人数

对分组结果指定条件:having子句

5ea785911a27919834fd674919693070.png

3b1a640af5a4a6b8c7947661f02735ff.png

3.用SQL解决业务问题

(1)翻译成大白话

面对一个我们需要解决的问题,我们要把问题翻译成自己能看懂的大白话,理解问题

(2)写出分析思路

面对一个问题,要先思考解决这个问题的分析思路是什么,第一步要做什么,第二步要做什么...

(3)写出对应的SQL语句

按照分析思路写出SQL语句

4.对查询结果排序

降序(desc):从大到小

升序(asc):从小到大

b4e8663cca4d644bb4c2ed4634ddbd29.png

71a4127e3aaf615f91b0ed8cfdb1f851.png

空值(null)的排序:对一列数值进行排序,空值(null)会排在最前面

limit子句:从查询结果中取出指定行

select * from score limit 2; 表示从查询结果中取出前两行

四、复杂查询

1.视图功能

视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。视图本身不存放数据,它存放的是SQL查询语句,所以视图中的数据会随着查询的源表数据的改变而改变。

创建视图:create view 视图名称(<视图列名1>,<视图列名2>,...) as <select查询语句>;

视图的作用:视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。

2.子查询

子查询是在一个select查询语句中嵌套进了另一个select查询语句,SQL查询语句是先运行子查询再运行外部的查询语句。

6eb88b00a238b8f567035081b6ed8eab.png

子查询可用于from、in、any、all

any和all关键字:这两个都是用于子查询,any 是任意一个 ,all 是所有

any表示有任何一个满足就返回true,all表示全部都满足才返回true

例如:

select 学号,成绩 from where 成绩>any(select 成绩 from score where 课程号='0002'); 表示这些学号的学生成绩比课程0002的全部成绩里的任意一个高

select 学号,成绩 from where 成绩>all(select 成绩 from score where 课程号='0002');
表示这些学号的学生成绩比课程0002的全部成绩里的所有成绩都高

3.标量子查询

一般子查询结果可以返回多行结果,而返回结果只有一行的查询叫标量子查询。由于标量子查询只返回一个值,所以标量子查询的返回值可以和比较运算符(<、>)一起使用。

select 学号,成绩 from score where 成绩>(select avg(成绩) from score); 表示求大于平均成绩学生的学号

select 学号,成绩 from score where 成绩 between(select avg(成绩)from score where 成绩<60) and (select avg(成绩)from score where 成绩>80); 表示求介于小于60分学生平均成绩和大于80分学生平均成绩之间的学生成绩

fdc403c1f4cc79dea8676246476b12e6.png

只要用到单一值的情况下,我们都可以用标量子查询获取到

4.关联子查询

在关联子查询中,对于外部查询返回的每一行数据,内部查询都要执行一次。另外,在关联子查询中是信息流是双向的。外部查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回它的记录。然后,外部查询根据返回的记录做出决策。

1、外部查询得到一条记录并传递到内部查询中;

2、内部查询基于输入值执行;

3、内部查询把返回值输出到外部查询中,并用这些值结束内部查询。

a7c804d7318fb3187afe823443df1dae.png

5eea0cc26fd531ed6585a100215272c8.png

三种子查询对比:

8a8d994a3cf6e6a66b55109451de80e1.png
三种子查询对比

5.各种函数

(1)汇总函数

count函数:求某列的行数,count(*)表示求所有行数

select count(*) from teacher; 表示求“teacher”表的所有行数

sum函数:对某列数据求和,只能对数值类型的列计算

select sum(成绩) from score; 表示对“score”表中的“成绩”列求和

avg函数:求某列数据的平均值,只能对数值类型的列计算

select avg(成绩) from score; 表示对“score”表中的“成绩”列求平均值,即求平均成绩

max函数:求某列数据的最大值

select max(成绩) from score; 表示求“score”表中的“成绩”列的最大值

min函数:求某列数据的最小值

select min(成绩) from score; 表示求“score”表中的“成绩”列的最小值

(2)字符串函数

0999cf8efbf23d318951608fb8af783f.png

(3)算术函数

c3cdb8e86aabffb962ede759143850eb.png

(4)日期函数

1400674ba56518bed7a868a780cf9b03.png

五、多表查询

1.表的加法(union)

将两个表的数据按行合并在一起

select 课程号,课程名称 from course union select 课程号,课程名称 from course1; 表示将course和course1这两张表的数据按行合并在一起,去除重复的行

select 课程号,课程名称 from course union all select 课程号,课程名称 from course1; 表示将course和course1这两张表的数据按行合并在一起,保留除重复的行

2.表的联结

关系数据库里,两张表有对应的列可以相互关联到一起的对应匹配关系叫做联结。

92628a8890c20e631bef858d9721e23b.png

(1)交叉联结(笛卡尔积,cross join)

将表中的每一行和另一个表中的每一行合并在一起

b146bd530a6877d91e8c7a88158c9217.png

(2)内联结(inner join)

查找出同在于两张表中的数据,并对这些数据进行交叉联结

287e523870489dbd6fa2d65002eb2317.png

select a.学号,a.姓名,b.课程号 from student as a inner join score as b on a.学号=b.学号; 表示这两张表通过学号进行内联结

(3)左联结(left join)

将左侧的表作为主表,将主表中的数据全部取出来,右边的表中只选出和主表数据相同主键的行

f27f6e223d3aee811247b34c8de511c6.png


select a.学号,a.姓名,b.课程号 from student as a left join score as b on a.学号=b.学号; 表示这两张表通过学号进行左联结

(4)右联结(right join)

将右侧的表作为主表,将主表中的数据全部取出来,左边的表中只选出和主表数据相同主键的行

c79a46b615361d3960788a4cc248d0af.png

select a.学号,a.姓名,b.课程号 from student as a right join score as b on a.学号=b.学号; 表示这两张表通过学号进行右联结

(5)全联结(full join)

全连接的查询结果会返回左边表和右边表的所有行,当某行和另一表中的行匹配的时候,两个行进行合并,如果某一行和另一表中的行没有匹配的话,另一个表对应的地方用空值(null)进行填充(MySQL不支持全联结)

756c204e891dc7d4d6a6b2e27e67b2fe.png

SQL联结文氏图

b8bd6dbffe853297953a42acac6d0389.png

3.case表达式

CASE 表达式是一个标量表达式,它基于条件逻辑来返回一个值。注意,CASE 是一个表达式,而不是一条语句;也就是说,不能用它来控制活动的流程,也不能根据条件逻辑来做某些处理。相反,它只是根据条件逻辑来返回某个值。因为CASE是一个标量表达式,所以它可以支持任何标量表达式(如SELECT、WHERE、HAVING,以及ORDER BY)、CHECK 约束,等等。

9a862f486bbc2468882972cdcbd97112.png

6d21f25435026a8aae24d5b7656f3074.png

1883df367e9b891b197dcadd5ec9a0d7.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值