目录
[1. CRUD](#1. CRUD)
[2. 新增(Create)](#2. 新增(Create))
[2.1 往数据表中插入一条记录](#2.1 往数据表中插入一条记录)
[2.2 指定列插入](#2.2 指定列插入)
[2.3 一次插入多个记录](#2.3 一次插入多个记录)
[3. 查询(Retrieve)](#3. 查询(Retrieve))
[3.1 全列查询](#3.1 全列查询)
[3.2 指定列查询](#3.2 指定列查询)
[3.3 查询字段为表达式](#3.3 查询字段为表达式)
[3.4 查询的时候给列/表达式指定别名](#3.4 查询的时候给列/表达式指定别名)
[3.5 查询时去重](#3.5 查询时去重)
[3.6 排序查询](#3.6 排序查询)
[3.7 条件查询](#3.7 条件查询)
[3.8 范围查询](#3.8 范围查询)
[3.9 模糊查询 like](#3.9 模糊查询 like)
[3.10 NULL 的查询:IS [NOT] NULL](#3.10 NULL 的查询:IS [NOT] NULL)
[3.11 分页查询 limit](#3.11 分页查询 limit)
[4 修改 (Retrieve)](#4 修改 (Retrieve))
[5. 删除(Delete)](#5. 删除(Delete))
1. CRUD
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。
2. 新增(Create)
2.1 往数据表中插入一条记录
insert into 表名 values (值, 值, ......)
into 可加可不加, 但是最好是带上
括号中的值, 它们的类型和数目要和表中的列相匹配
可以插入中文的原因是, 创建数据库时, 使用了支持中文的字符集.
2.2 指定列插入
2.3 一次插入多个记录
在values后面,可以有多个(),多个()之间使用,分割.每一组()就是一条记录(也就是一行)
下面举一个一次插入三条记录的例子
那么一次插入三条记录和分三次, 每次插入一条记录有什么区别呢?
MySQL是一个客户端, 服务器的结构性程序!
3. 查询(Retrieve)
查询语句可以让我们看待表中包含的数据内容
3.1 全列查询
select * from 表名;
* 是通配符, 可以代指任意的列
但是这是一种很危险的操作, 我所查询的表数据很少, 那么如果那个表当中的数据很多呢?就会导致MySQL的服务器一瞬间硬盘的带宽和网络的带宽给吃满了, 那这样别的用户就访问不了MySQL服务器了.
3.2 指定列查询
手动指定要查询的某一列或者某几列~~服务器返回的结果,就只包含想要的数据~~
select 列名, 列名... from 表名;
3.3 查询字段为表达式
查询的同时,也可以进行运算
比如,查询所有同学数学成绩加10分后的效果
加10分的这张表是一张临时表,select操作不管怎么写, 都不会影响到数据库服务器硬盘上存储的原始数据
也可两个列/多个列进行运算
可以看出, 查询结果临时表的列名和当前表达式是一致的. 万一查询的表达式非常复杂,就会导致列名也非常复杂,不利于用户来阅读.
3.4 查询的时候给列/表达式指定别名
select 列名 as 别名 from 表名;
as 是关键字, 可以省略但不建议省略
别名会最终显示在查询结果的临时表中
SQL中,列名和表名都时可以起别名的.也都是使用 as.
3.5 查询时去重
把重复的行,去掉,只保留一份~~
select distinct 列名 from 表名;
distinct后面的列名,也可以是多个.
则要求必须所有的列的值都相同,才算"重复"
3.6 排序查询
针对查询到的结果进行排序
这里的排序,也只是针对临时表进行的, 对于数据库上的原始的数据没有任何顺序上的影响
select 列名 from 表名 order by 列名;
排序的时候, 根据什么来排序, 是由我们自己指定的. 默认的是按照升序排列, 如果是降序, 则要用到desc.
order by还能指定多个列排序~~(order by后面可以写多个列~)
此处是先拿math 这一列进行排序.如果math 相同了,再拿english这一列排序~~
3.7 条件查询
指定一个筛选条件,把符合条件的结果保留下来.不符合的就剔除掉~~
-- 查询英语不及格的同学及英语成绩 ( < 60 )
-- 查询语文成绩好于英语成绩的同学
条件比较的时候,并不只是使用列名和常量比较.也可以使用列名和其他列名比较~~
-- 查询总分在 200 分以下的同学
条件查询, 也可以结合一些复杂的表达式
当我们在条件中,尝试使用别名的时候,这个别名不能被正确识别出来.mysql的 where条件中,无法使用列的别名!!!
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
还有一点
3.8 范围查询
between...and...
-- 查询语文成绩在[80, 90]之间的同学及其语文成绩.
in
-- 查询数学成绩是58或者80或者98或者99分的同学及数学成绩
这里添加了一名诸葛孔明童鞋
3.9 模糊查询 like
% 匹配任意多个(包括 0 个)字符
_ 匹配严格的一个任意字符
查找姓孙的同学
这是全部的同学
孙%是以孙开头的.
%孙匹配以孙结尾的
%孙%则是只要包含孙即可~~
3.10 NULL 的查询:IS [NOT] NULL
查询语文成绩已知的同学的姓名及成绩
3.11 分页查询 limit
针对查询出来的结果,进行截取,取出其中的一个部分~~
一次查询,最多获取到4条记录~~
limit 4
约束了结果中最多包含几条记录
offset 4
描述了当前的结果,从哪一条开始算.这里的offset 4就可以当做从下标为4的记录开始获取.(下标从0开始算)
4 修改 (Retrieve)
update 表名 set 列名=值 where 条件...;
进行修改,要明确一些重要的信息.
1)改哪个表~~
- 改这个表里的哪个列/哪些列,改成什么~~
3)改这个表的哪些行~~
-- 将孙悟空同学的数学成绩变更为 80 分
此处的修改,是修改mysql服务器,保存在硬盘上的数据.(持久生效的)
update 也可以一次操作修改多个列~~
-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
修改操作,也可以搭配 order by这样的排序操作~~
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 10 分
将之前的三个为NULL的数据都删除了
倒数前三的3位同学的成绩
原来的各科成绩
数学加10分后的成绩
update 操作,也是一个危险操作!这个操作的危害,和删库相比,不遑多让~~甚至还犹有过之.删库,所有的数据都没了,能做的操作就是把之前备份的给导入过来~~update修改的条件,没设定好,你也不知道,当前哪些行被改了,哪些没被改, 恢复的成本可能是更高的~~
5. 删除(Delete)
-- 删除孙悟空同学的考试成绩
删除,是按照行来删除的.无法删除某些列~~(要想按照列来删除,可以通过update,把指定条件的行的指定列,设为null)