目录
一、前言
欢迎大家来到权权的博客~ 欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进哦~
博客主页链接点这里–>:权权的博客主页链接
二、新增(Create)
在student 表中新增数据,此时student表为空。
2.1 单行数据+全列插入
语法:
insert into 表名[(字段1,字段2,字段3)] values(值,值,值);
例如:
插入成功:
2.2 单行数据+全列插入(简写)
语法:
insert into 表名 values(值,值...);-- 不用在表后面指定列,在values列表中按照表的定义字段的顺序设置相应的值。
例如:
2.3 指定列插入
语法:
insert into 表名(指定需要插入的字段) values(值);-- 其他未指定的自动为空。
例如:
2.4 多行插入
语法:
insert into 表名[(指定列..)] values(值,值),(值,值)...
例如:
2.5 插入查询结果
新建一张表,把旧的表中的指定列的数据导入到新表中。
语法:
INSERT INTO table_name [(column [, column ...])] SELECT ...
目标:
把text1的内容复制到text2。
三、查询
3.1 全列查询
语法:
select * from 表名;
例如:查询student 表中的所有记录。
注意:因为在生产环境当中,一个表中的数据量可能会很多很多,有可能达到TB级:
1.当一个查询开始的时候,磁盘开销,网络开销,都是非常紧缺的资源。
2.如果这一条语句开始执行,那么就有可能把服务器资源吃光,其他的程序或者是数据库操作和要等待SQL执行完之后才能继续执行。
3.建议:不加任何限制(结果集的条数)的查询在生产环境不要使用。
初始化数据:
3.2 指定列查询
语法:
select 列名,列名... from 表名;
举例(只查询姓名跟语文成绩):
3.3 查询的结果是一个表达式
数值类型,效果就是让所有的列中都包含一个表达式中的值,他本身并不在我们的真实的表里。
3.3.1 把所有的语文成绩在原本的基础上加一分
3.3.2 列与列之间的计算
3.3.3 表达式的别名
注意:as 关键字可省略,我们表里原来没有总分这一列,所以通过表达式查询出来的结果集是一个临时表返回给我们的,执行完之后临时表就删除了。
3.3.4 结果集中的字段名起别名的语法
select 列名[as]别名,列名[as]别名...from 表名;
举例(修改ID,name,chinese的名字):
3.4去重(distinct)
语法:
select distinct 列名 from 表名;
加上ID后:
加上 ID后虽然English是一样的但是那个id不一样,所以那个distinct不会把他们当作相同的行。
我们再插入一条数据:
注意: 去重的时候,只有所有的列都相同才会被认定为重复记录,去重后记录只保留一条。
3.5 排序(order by)
语法:
slect 列名 from 表名 order by 列名 [ASC][DESC]; -- 默认是升序
3.5.1 排序规则(升序、降序):
1.升序:ASC
对数学成绩进行升序排序:
2.降序:DESC
对数学成绩进行降序排序:
3.没有写排序规则的时候默认为升序排序,强烈建议明确指定排序规则:
3.5.2 NULL排序规则
null排序规则,视为比任何值都小,升序出现在最上面,降序出现在最下面。
3.5.3 使用表达式别名进行排序
3.5.4 注意
MySQL中的null比较特殊:
1.无论和什么值进行计算,返回的值都是null。
2.null始终都判定为false。
3.null的值不是c语言这种编程语言中的0,在MySQL中他就是null。
3.6 条件查询(where)
3.6.1 原理
根据指定的条件,过滤掉不符合条件的记录,把符合条件的记录返回给用户,可以通过一些运算符,比如比较运算符逻辑运算符和Java中的思路是一样的。
3.6.2 比较运算符
3.6.3 逻辑运算符
注意:
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分。
3.6.4 基本查询
查询数学成绩在60分一下的:
3.6.5 and与or
查询数学成绩大于90分和语文成绩大于90分的人;
查询数学成绩大于90分或者语文成绩大于90分的人;
3.6.5 范围查询
1.between and (相当于and):
查询语文成绩在 [90, 100] 分的同学及语文成绩:
2.in (相当于or):
查询数学成绩是 92或者 100 或者 99 分的同学及数学成绩:
3.6.6 模糊查询 --like
– % 匹配任意多个(包括 0 个)字符:
– _ 匹配严格的一个任意字符:
3.6.7 null的查询
语法:is [not] null
3.7 分页查询:LIMIT
前面我们说过不加限制记录条数的查询是不安全的,我们就需要给这些查询加一些限制。
3.7.1语法
-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROMtable_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROMtable_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROMtable_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s
3.7.2 案例
按 id 进行分页,每页 3 条记录,分别显示第 1、2、3 页:
-- 第 1 页
SELECT id, name, math, English, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 0;
-- 第 2 页
SELECT id, name, math, English, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 3;
-- 第 3 页,如果结果不足 3 个,不会有影响
SELECT id, name, math, English, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 6;
第三页的记录s应该取值的公式:
s=(当前页号-1)*每页显示的记录数
四、修改(Update)
4.1语法
UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDERBY ...] [LIMIT ...]
让小肖的语文成绩变成100分:
让数学成绩按照升序排序并取前面3条记录:
把所有英语成绩小于60分的更新为60分:
五、删除(Delete)
5.1语法
DELETE FROM table_name [WHERE ...] [ORDERBY ...] [LIMIT ...]
删除小强的成绩:
删除数学成绩前三的所有同学成绩:
5.2 注意
如果删除的时候不加where条件限制,那整张表的数据都会清空,这是非常危险的,但是这是可以恢复的,每一条执行的SQL语句都会被记录到日志之中,把日志中的操作,再执行一遍基本上可以恢复。
欧耶我学会啦!!!!!