后端进行的表的操作增删查改
现在是建了一个成绩表,注意哈。
decimal(2,1). 2是M表示有两个有效数字长度,1是D的长度,即小数点后有一位(10分制)
开始
1.增加:
insert into 表名 values(值,值······) 值要和表中的列相匹配
也可以单添加name这种:
insert into student(name) values('aa');
双引号和单引号都表示字符串,小问题
他下面的select的语句我会解释
两个图进行的操作,以及其效果
这是插入一行的,那么假如我们插入多行呢
insert into 表名 values(值,值······),(值···)
就是后面再加上这种参数就OK
这时候可能有疑问,我一个一个插入和你这种一个插入三个区别在哪里呢,
我们要记住MySQL是客户端服务器结构的程序,每一次交互都会有成本(时间等东西)。
所以一次插入多个会更有效率。
2 查询(你插入的东西):
1.全列查询(危险,十几亿的数据全掏出来,服务器干死机了)
select *from 表名 查询当前数据库中的所有行和列
服务器会解析SQL并且执行,读取硬盘中student(表名),表中的每一条记录,会把所有记录通过网络返回给客户端。
2.(1)指定列查询:
手动去指定查询某一列,或者某几列,服务器返回的结果,就只包含想要的数据:
select 列名,列名(可多个)from 表名;
2.(2)查询可以同时计算
比如select name ,chinese+10 from student;
但是我们要了解一件事❗️❗️❗️
MySQL是一个客户端服务器结构的程序,大家看到的客户端显示的结果只是个临时表,select不管你如何加,都不影响数据库服务器硬盘存储的原始数据,即使我现在是下面的+10,但是这个表还是原来那样(原来的数据)。
❗️❗️❗️看到了吧,他不会改变他的数据
2.(3)SQL的四则运算只能针对数字进行,也可利用两个列或或多个列计算
2.(4)查询的时候,给列/指定别名
select 列名 as 别名 from 表名
下图是把总和别名为total
2.(5)查询时去重
把重复的去掉:select distinct 列名 from 表名
distinct后面的列名可以写多个,那么要求后面的值都要相同,才叫重复
2.(6)排序查询:
针对查询到的结果进行排序
select 列名 from 表名 order by 列名
MySQL是一个客户端,服务器的结构的程序,因此这里的排序,也只是针对临时表进行的,对于数据库的原始数据顺序,没有任何影响
下面的select* 是显示出每一列由english排列的结果
默认排序由小到大:
由大到小:select 列名 from order by 列名 desc
(descond):下降
如果SQL中没有指定order by,此时我们代码不该依赖去临时表的顺序,MySQL不保证不带order by有一定顺序。(总结:不理解就无脑加order by )
order by可以指定多个列排序,并且用逗号连接。
看下面的图片,英语一样就比数学,谁小谁前面
2(7)条件查询(指定筛选条件)
2(7).1、WHERE表达式
条件表达式即是,对记录进行过滤,满足条件进行显示。如果没有指定WHERE子句,则显示所有记录;在WHERE表达式中,可以使用MySQL支持的函数或者运算符。
where 特别重要:有很多大佬有时候都会忘记写where低级,但是重要。
下面是各种表达式
❣️
简单说一下 =和<=>的区别
两个都是等于,但是<=>可以比较NULL
比如NULL<==>NULL(条件成立),假如是=就会不成立
注:理解查询语句执行过程
1.服务器需要先遍历表中的每一个记录
2.针对当前记录,带入条件,看他是否成立
3.如果条件成立,则一条记录加入结果集,并返回给客户端,如果不成立,这一条记录跳过
如找英语小于4分的
select 列名 from 表名 where 条件
当然,条件比较并不是使用列名和常量比较,也可以使用列名和其他列名进行比较
如找语文大于英语的
条件查询,也可以加一些更复杂的表达式,
但是别名使用不了(更精准是不能在条件里面用),这是结论,我们下面这个是前面,而不是用于条件,对比着来看。
select执行顺序:
1.遍历某个指定的行
2.带入条件筛选
3.条件为true,被筛选成功,再计算select 列名表达式;
AND和OR(&&和|| 懂的我不多说)