欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
表内容操作
插入内容
按顺序插入
指定某些列插入
一次插入多行记录
插入时间
查询表内容
全列查询
指定列查询
指定表达式查询
用as取别名
编辑
去重查询
排序查询order by
条件查询 (关键)
比较运算符
逻辑运算符
练习
基本查询
and和or
范围查询
like 模糊匹配
分页查询
修改表内容
删除表内容
表内容操作
插入内容
按顺序插入
insert into 表名 values(值,值,值.....); 新增(这里列的个数 和 类型 要和表结构 匹配)
SQL中表示字符串可以使用 " 或 '
SQL中类型会尝试自动强转
指定某些列插入
insert into 表名(列名,列名....)values(值,值.....);
一次插入多行记录
insert into 表名 values(值,值....),(值,值....),(值,值....).....; 每个括号代表一行
插入时间
可以插入当前系统时间,使用库函数 now() -->获取当前时刻
查询表内容
全列查询
select * from 表名; 全列查询(查询出这个表的所有行和列) , * 是通配符,可以指代所有的列.
注意: select * 是一个很危险的操作,因为如果表非常大(千万/亿级别的数据量),进行select * 会产生大量的硬盘IO 和网络 IO,很可能会把你的硬盘 /网卡 带宽给吃满. 若是在公司的生产环境下进行 select * ,很可能会使其他用户访问数据库的时候 出现访问失败的情况
指定列查询
select 列名,列名.... from 表名;
为了方便举例,下面创建一个成绩表
下图指定 name和math列输出
指定表达式查询
select 表达式 from 表名; 输出的结果是"零时表",数据库本体(数据库服务器硬盘上的数据)没有任何改变
下图查询的是 语文成绩+10 的结果.
用as取别名
select 表达式 as 别名 from 表名; 这里的as可以省略(但是不建议,因为as省略后,别名就非常容易当成表达式的一部分)
下图输出总成绩 以total 命名
去重查询
select distinct 列名 from 表名; 查询的结果里必须是全部一样才能去重
排序查询order by
select 列名 from 表名 order by 列名; 针对查询结果进行排序,指定按照某个列进行排序,可以指定升序(asc 默认是 升序,可以省略)和 降序(desc) ,select 语句对排序没有任何影响, 在排序之前,顺序是不可预期的
order by可以指定多个列查询,先按照第一个列查询,这列相同的部分 会按照第二列排序.....
条件查询 (关键)
select 列名 from 表名 where 条件; 查询过程中,指定筛选条件,满足条件的就保留,不满足条件的就跳过
比较运算符
逻辑运算符
注意:
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
练习
基本查询
查询英语不及格的同学及英语成绩 ( < 60 )
查询语文成绩好于英语成绩的同学
查询总分在 200 分以下的同学
使用别名时注意: 条件不能用别名,会报错
and和or
查询语文成绩大于80分,且英语成绩大于80分的同学
查询语文成绩大于80分,或英语成绩大于80分的同学
范围查询
where 列名 between ...and ;
查询语文成绩在 [80, 90] 分的同学及语文成绩
用and实现同样的效果
where 列名 in(要查询的值,多个值用 , 隔开); 针对离散的数据
查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
like 模糊匹配
like要搭配通配符一起使用
where 列名 like 通配符;
- % :匹配 0 个或 任意 个的任意字符
- _ : 匹配 1 个特定的字符
like 是一个比较低效的操作,数据库本来就慢,所以开发时使用like 要节制~
通过下列例子理解like 的用法
不要拿= 和null比较,要用<=>或 is null 判断
分页查询
select 列名 from 表名 limit N; N代表限制 n 条记录
limit可以搭配offset使用
select 列名 from 表名 limit N offset M; 表示从下标为M开始记录(从0开始计算) N 条
上面代码可以简写为 select * from exam_result limit 4 , 3 ;
修改表内容
update 表名 set 列名 = 值 , 列名 = 值..... 后面可以加上条件 where /order by/ limit ,如果没有指定任何条件 ,修改的就是所有行. update 同样也是危险操作(真正改的是硬盘上的数据,"持久有效"),
匹配的结果 >= 实际修改的结果
删除表内容
delete from 表名 where 条件 / order by / limit; 将筛选出的行删除, 这也是 危险操作!!!
若没有指定条件,删除的就是这个表的数据,但是这个表还在(空表)