MySQL <3>

x33g5p2x  于2021-11-09 转载在 Mysql  
字(2.4k)|赞(0)|评价(0)|浏览(557)

针对这张表来操作

新增数据 Create

单行数据 全列插入

insert (into) [ 表名 ] values (对应的字段内容);
新增即:插入数据
插入的字段数目和类型需要和表结构中要求的一致

插入完成后,**查看数据:**select * from [ 表名 ];

" * " 表示一个通配符,意思是将所有列都查找出来

多行数据 指定列插入

insert (into) [ 表名 ] ( 指定要插入的列 ) values (对应的字段内容);

数目和类型都要对应,且指定的列都需在表头中存在
没有被插入的列,默认被填充为 NULL

查询数据 Retrieve 🔺

SQL 中最复杂的就是 查找

创建考试成绩表 & 插入测试数据:

1.全列查询

select * from [ 表名 ];

这样的查询方式仅限于在测试环境中使用,千万不要在生产环境的服务器上执行这样的SQL,因为生产环境压力本来就大,服务器数据量非常多,一旦执行 select* 操作,可能就会给生产环境的服务器造成很大的负担
故:一般不建议使用全列查询,查询的列越多,意味着需要传输的数据量越大,可能会影响到索引的使用

2.指定列查询

select [ 列名] from [ 表名 ];

3.查询的列为表达式

针对查到的列进行一定的表达式计算

例1: 查找所有同学的总成绩

例2: 查找所有同学的语文成绩,并在基础上 + 10 分

4.查询字段指定别名

as 可以省略

5.去重查找 distinct

去重查找,得到的结果的表的行数可能和原来不一样

插入一条能够重复的数据~

去重:

也可以指定多列来去重:

所有的 select 操作都不会对原来的表造成任何改变,基于原来的表,生成结果表

6.排序操作 order by

例1: 查找所有同学的信息,并且按照数学成绩 升序排序

例2: 查找所有同学的信息,并且按照数学成绩 降序排序

例3: 查找所有同学的信息,并且按照总成绩 降序排序

例4: 查找所有同学的信息,并且按照总成绩(使用别名) 降序排序

例5: 查找所有同学的信息,按照多个列来降序排序
先按照语文成绩降序排序,再按照数学成绩降序排序,最后按照英语成绩降序排序

(列越靠前,优先级越高)
如果语文成绩一样,按照数学成绩排序
如果语文和数学成绩一样,再按照英语成绩排序

**补充:**null 值被认为是最小的

7.条件查询🔺 where

最终结果的行数可能不一样

比较运算符:

运算符说明
>,>=,<,<=大于,大于等于,小于,小于等于
= (比较相等)等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>(比较相等)等于,NULL 安全,例如 NULL <=> NULL 的结果是 true(1)
!= 或 <>不等于
between A0 and A1范围匹配,[A0,A1],如果 a0 <= value <= a1,返回 true(1)
IN (option , …)当前值在 ( ) 的若干选项中匹配任意一个,就返回 true(1)
is NULL是 NULL
is not NULL不是 NULL
like模糊匹配,% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符:

运算符说明
and(逻辑与)多个条件必须都为 TRUE(1),结果才是 TRUE(1)
or(逻辑或)任意一个条件为 TRUE(1), 结果为 TRUE(1)
not(逻辑取反)条件为 TRUE(1),结果为 FALSE(0

例1: 查询数据中语文成绩为 null 的记录

错误方法: null = null ,结果是 false

正确操作1:

正确操作2:

例2: 查询数学成绩不及格的同学

例3: 查询语文成绩比英语成绩好的同学

例4: 查询总成绩在200分以下的同学

**注意:**在 where 中不能使用别名

例5: 查询语文成绩 和 英语成绩 均 >80 分的同学

例6: 查询语文成绩 > 80 或者 数学成绩 > 90 分的同学

例7: 查询语文成绩在 [80,90] 之间的同学

例8: 查询数学成绩是 98.8 或者 50.1 的同学

例9: 查询所有姓 小 的同学

例10: 查询所有语文成绩 > 90 的同学

例11: 查询姓 小 且 语文成绩 > 60 的同学

多个条件在一起联合生效时,一般要求哪个条件能过滤掉的数据多(剩下的数据少),就把该条件放在左侧

补充:

  • and 和 or 如果同时出现的话,and 的优先级更高一些,因此推荐加上括号~
  • MySQL 中,如果针对 NULL,进行比较、算术运算,值都为 NULL
  • like 操作要搭配通配符来使用
    %:匹配任意个任意字符
    _ :匹配一个任意字符
  • 模糊查询效率相对较低,一般不太建议使用 like
    like 不仅仅能针对字符串进行匹配,也可以针对数字进行匹配
  • 复杂条件查询的时候,存在一个最左原则

8.分页查询 limit

上边的所有 select 操作,除了条件查找之外,剩下的都是不应该在生产服务器上直接执行的
最保险的就是加上分页查找,相当于把查找结果只选取其中的一小部分来作为结果

例1: 查找总分前三名同学

例2: 查找总分排名 4 ~ 6 名的同学

若 limit 后面数字过大,超出记录的数目,返回结果不会有任何错误:

若 offset 后面数字过大,得到的结果可能是一个空的结果:

修改数据 Update

update [ 表名 ] set [ 列名 ] = [ 修改的值 ],[ 列名 ] = [ 修改的值 ] where [ 筛选条件 ];

update 每次修改几行记录是不确定的,具体取决于 where 中的条件,得看 where 条件过滤之后剩下几条记录

例1: 把哈哈的数学成绩改成 66.6

若不加任何 where 的限定条件,则会把所有的记录都进行修改

把哈哈的数学成绩改成 88.8

例2: 把 大大小 的数学成绩 改成 50,语文改成 70

例3: 把所有同学的语文成绩 -10 分

例4: 把总成绩倒数的三名同学的 数学成绩 +10分

删除数据 Delete

delete from [ 表名 ] where [ 筛选条件 ];

删除所有记录:

删除操作非常危险!!一旦数据被删了,通过常规手段是无法恢复的
数据库都会支持一些 “权限” 控制,例如:有些数据,只能读不能改;有些数据,能读能改,不能删除

相关文章