网站建设静态代码,安徽网页设计公司,微信小程序开发工具手机版,青岛做公司网站的公司目录
一、新增 指定列插入
一次插入多个数据
二、查询
1、全列查询
2、指定列查询
3、查询字段为表达式
4、查询的时候给列名/表达式 指定别名
5、查询时去重
6、排序查询
7、条件查询
8、模糊查询
9、空值查询
10、分页查询
三、修改
四、删除 SQL 最核心…
目录
一、新增 指定列插入
一次插入多个数据
二、查询
1、全列查询
2、指定列查询
3、查询字段为表达式
4、查询的时候给列名/表达式 指定别名
5、查询时去重
6、排序查询
7、条件查询
8、模糊查询
9、空值查询
10、分页查询
三、修改
四、删除 SQL 最核心的操作就是增删改查作为一个后端开发我们在未来的工作中最常遇见的场景也就是增删改查CRUD
一、新增
语法
insert into 表名 values(值值....)
新增也就是网数据表中插入一条记录语法中此处列出的这些值的数目和类型要和表的列相匹配。
我们现在先在java这个数据库中创建一个student表 然后再在这个表中插入数据 此时颜色对应的部分也就是我们前面所指的值和值对应
这里我们要注意一点: SQL 中表示字符串使用 或者 都行 也就是说在SQL中并没有“字符”类型 大部分没有字符类型的编程语言都是允许 单引号 和 双引号 来表示字符串并且单双引号效果通常是等价的 此外如果我们要想能够正确的插入中文必须保证在创建数据库的时候指定 charset utf8 这样才能保证插入中文的时候不会进行报错。 指定列插入
在进行数据的插入的时候我们也可以对单独的某个列进行插入
语法;
insert into 表名(列名) values (值); 使用括号( )来标识目前要针对哪些列进行插入多个列名之间可以使用 , 进行分割
后续values 里的列必须要和当前 ( ) 中的列的个数和类型都匹配 一次插入多个数据
在values 后面可以有多个和 多个 ( ) 之间用 , 分割每一组 就是一条记录也就是一行 那么 问题来了我们一次插入 3 条记录和分 3 次插入一条记录有什么区别呢
我们要时刻牢记 MySql 是一个客户端服务器结构的程序 那么哪种更好呢
我们要知道每一次网络交互都是有一定的成本的
而第一种的成本更低。因此第一种是更优的选择。 二、查询
查询语句能让我们看到表中包含的数据内容
1、全列查询
select *from 表名;
这个操作就是查询出当前数据库中所有的行和所有的列
其中* 是通配符可以把它理解成斗地主中的“癞子”* 就能够代指任意的列 那么上图就是全列查询的全部效果
那么我们前面也说了MySQL是一个客户端服务器结构的程序全列查询可以用下图来表示 select * 是一个非常危险的操作
如果当前select* 查询的这个表里面的的数据非常非常多比如几十亿条....这样的操作就会导致这个服务器一瞬间硬盘的带宽和网卡的带宽都被吃满了
这就会使服务器无法给外面的普通用户提供服务了此时服务器就像 “卡死” 了一样 2、指定列查询
手动指定要查询到额某一列或者某几列 服务器返回的额结果就只包含想要的数据
语法
select 列名列名... from 表名;
我们现在重新创建一个表将其命名为exam_result 先对其进行一次全列查询 再对其进行指定列查询操作结果如下 数据库的增删改查都是比较慢的也是比较吃硬件资源的因此我们尽量能省则省 3、查询字段为表达式
查询的同时可以进行计算
例如我们要查询所有同学数学成绩加10分之后的效果可以这样写 此处我们看到的客户端中显示的结果其实是一个“临时表”select 操作不管怎么写都不会影响到数据库服务器硬盘上存储的原始数据
SQL中四则运算只能针对数字进行
但是也可以将两个列的数值或者多个列之间的数值进行计算 这时我们会发现此时查询结果中临时表的列名和咱们当前表达式是一致的这就导致了如果查询的表达式非常的复杂就会导致列名也非常的复杂不利于用户来阅读 4、查询的时候给列名/表达式 指定别名
语法
select 列名 as 别名 from 表名;
此时别名会最终显示在查询结果的临时表中
另外as 这个关键字是可以省略的但是我们不建议省略
最终的效果如下 SQL中。列名和表名都是可以起别名的取名的方式都是用as 5、查询时去重
把重复的行去掉只保留一份
语法
select distinct 列名 from 表名;
我们现在先查询一下math 这一列的数组 此时会发现98.0这个数值有两个当我们现在进行查询时去重的操作之后临时表中便只会显示一个98.0了 同样的distinct 后面的列名也可以是多个
当指定多个列的时候则要求必须所有列的值都相同才算 “重复” 6、排序查询
针对查询到的结果进行排序
还是那句话MySql 是一个客户端-服务器结构的程序因此这里的排序也只是针对临时表进行的对于数据库服务器上原始的数据并没有任何顺序上的影响
语法
select 列名 from 表名 order by 列名;
排序的时候依据order by 后面的那个列进行排序
举个例子这个是是不排序之前临时表的顺序 按照英语成绩排序后升序排序的结果是这样的 如果想要得到降序排序则只需要在最后加上 desc 即可 如果 SQL 中没有指定 order by,此时我们的代码中就不应该依赖结果集合临时表的顺序
MySQL并不承诺这个不带order by 的查询结果是有一定的顺序的
order by 后面是可以接多个列的 这个顺序表示 先针对数学进行排序如果数学相同再根据英语进行排序 7、条件查询
指定一个筛选条件把符合条件的结果保留下来不符合的就剔除掉
关系运算符: 注意事项 有些列是可以不填的不填就相当于是NULL NULL参与各种运算运算的结果还是NULL NULL NULL 结果是false NULL NULL 结果是true 逻辑运算符 示例1查询英语不及格的同学的英语成绩 注意理解查询语句执行的过程 1、服务器需要先遍历表中的每一个记录 2、针对当前记录带入条件看是否成立 3、如果条件成立则这一条记录加入结果集并返回给客户端 4、如果条件不成立则这一条记录跳过 条件比较的时候并不只是使用列名和常量比较也可以使用列名和其它列名比较例如
示例2查询语文成绩大于英语成绩的同学 此外条件查询也可以结合一些更复杂的表达式
示例3查询总分小于200的同学 注意当我们在条件中尝试使用别名的时候这个别名是不能被正确识别出来的
MySQL 的 where 条件中无法使用 列 的别名 8、模糊查询
MySQL中提供的模糊查询是相对比较简单的 like
MySQL中提供了两个通配符 % 匹配 0 个 或者 任意个 字符 _ 匹配 1 个任意字符 示例查询姓孙的同学 示例查询名字以孙结尾的同学 其实MySQL进行 like 模糊查询是一个比较低效的操作尤其是针对一些比较长的字符串
因此我们使用模糊查询的时候要慎重 9、空值查询
除了之前讲过的 和 的区别之外它们在使用方法上还有别的不同 可以用于两个列之间的比较 10、分页查询
分页查询limit
针对查询出来的结果进行 截取取出其中的一部分 这个操作中 limit 4 的意思是一次查询最多查询到4条记录
那么如果我们想查询到下一页的记录则应该这样写 其中limit 约束了结果中最多包含几条记录 offset 描述了当前的结果从哪一条开始算也可以当做从下标为4 的记录开始获取 三、修改
语法
update 表名 set 列名 值 where 条件; 进行修改的时候要明确一些重要信息 1、改哪个表 2、改这个表的哪个列 / 哪个行改成什么 3、改这个表的哪些行 示例将孙悟空的数学成绩改成80分
我们可以看到目前孙悟空的数学成绩是78分 那么接下来我们对其进行 update 操作 注意math 80 此处的等号是赋值的意思不再是比较相等了 经过上述的修改之后我们再查询孙悟空的成绩 此时其数学成绩已经成功被修改成了80
注意此处的修改是修改MySQL 服务器保存在硬盘上的数据持久生效的 此外update 也可以一次操作修改多个列
示例将曹孟德的数学成绩变更为 60 分语文成绩变更为 70 分
曹孟德本来的成绩如下 然后使用update 对其两列成绩进行修改 结果如下 此外修改操作也可以搭配 order by 这样的排序操作
示例把总成绩倒数的3位同学数学成绩加上30分
我们现在可以看到总成绩倒数三名的同学是这三位 现在我们要对它们的数学成绩进行加三十分的操作 但是这个时候发生了报错这是因为刘玄德的数学成绩此时是85而此处设定的成绩是3位有效数字如果再加30那么就是四位有效数字了所以这里我们选择只加10分 然后我们便会发现刚才倒数的三位同学的数学成绩都加上了10分
由此得知 select 中支持的条件排序分页对于update来说是同样生效的
update 可以理解成 先查询再修改
注意如果我们在 update 操作的时候没有加其它条件会将所有的行都进行修改 四、删除
delete 直接删除符合条件的行
语法
delete from 表名 where 条件;
示例删除孙悟空的考试成绩
删除前 删除操作 删除后 注意删除是按照行来进行删除的我们无法删除某些列
如果先要删除列可以通过update 把指定条件的行的指定列设为null
同样的如果在delete 的时候没有指定数据就会将整张表的数据都删除掉 效果和删除表差不多但还是略有不同 delete from 删除之后表还在但是表里面的数据没有了 drop table 删除之后表以及表里面的数据都没有了