四.表的增删改查(CURD)
1.新增(Create)
1.新增一条记录-单行全列添加(所添加列必须与建表时一致)
语法: insert into 表名 values (), (), … () ;
建表后,可以一次添加多组数据,由于时全列添加所添加的记录必须要同建表时字段一致,同时在表结构处的Null哪儿显示YES 即可此列添加null值
2.新增一条记录-多行指定列数(所添加的列必须与指定的列一致)
语法: insert into student(指定field) values(field);
此处,name字段即为指定字段,在添加数据时,只需要添加name字段内容即可
2.查找(Retrieve)
对于上面我们新增一条记录后,虽然显示添加成功了,那我们去哪里查看呢? 在MySQL中同样有着对应的查找功能!
1.全列查找
语法: select * from 表名;
其中 select * from 里这个 * 为通配符的意思.
对于全列查询需要慎用,在没有查找限制条件且数据量巨大的情况下,全列查询容易让硬盘IO吃满,从而让后面的人进行访问服务器时无法访问!
2.指定列查询
指定需要查那一列,有一个筛选的过程!
语法: select 列字段,列字段… from 表名;
上述操作中
1)先创建了一张班级表,包含年级,班级,该班学生总数
2)添加了三组数据
3)进行指定列查询, 其中 grade, id 为我们指定需要查询的列,结果为红色圈中所示,查询指定列则会筛选处符合条件的记录,并且以指定的字段为列名
3.查询的表达式包含字段
语法: select … 表达式 from 表名
这是一个表达式包含一个字段(也可为多个字段)并且指定列查询
- grade 为指定字段
- total + 10 为表达式(数学上的算数关系等)加一个字段(此处为10),意为以在学生总数total 的基础上加 每个班 加10人并以该表达式和字段为新结果的列名
4.起别名
在上述表达式包含字段的查询中,最后的结果以该整体字段为该列列名,显得有点突兀,因此我们可以通过起别名的形式来将这个表达式包含字段取一个新的名字来命名该列
语法:select … 表达式 as 别名 from 表名;
通过执行该sql语句后可以看到,total+10该结果集中后新的列名为total_people, total + 10 为表达式
5.去重
去重操作,对某一列中的数据进行去重(去除该列中相同的其余几行)
语法: select distinct 列名 from 表名;
上述的班级表中,存在grade和id相同的班,对其按照grade去重,最终筛选处去重后grade的一列(保留需要去重的唯一 一列)
除了单列去重,也可以多列去重,例如:
需要注意的是:
1)进行多列去重时,需要某行中的两列同时相同才可以去重
6.条件查询(重中之重)
1. 条件查询中使用得基本条件
在进行条件查询之前,需要来认识一下MySQL中一些基本条件
在进行筛选记录时,加入一定的条件进行限制筛选出所需要的记录
2.全列查询加上条件
语法: select * from 表名 where 条件;
上述操作为查询班级表中,班级总人数小于60得记录
3.指定列查询加上条件
语法: select filed(指定字段), filed from 表名 where 条件;
上述操作为查询班级表中 grade 和 id 符合总人数小于 60 得所有记录
4.AND 和 OR 条件查询
创建一张表如下:
先来观察 AND 和 OR 同时存在时得两组示例
1).
从第一组示例不难看出,当AND 和 OR 同时存在时, 先执行了 math > 70 and English > 70 在执行 or Chinese > 80 得到如上记录
2).
从第二组示例中可以看到,在AND 和 OR 同时存在时, 为了避免 AND 和 OR 优先级带来得问题导致条件并非我们想要的, 通常采取括号得形式让其单独处理
7.模糊查询
1).查看当前MySQL所使用得字符集
语法: show variables like ‘%character%’;
MySQL中, 画圈部分默认为Latin字符集,此处由于我更改了配置文件, 因此为utf8
2). 全模糊查询
语法: select …from 表名 where 列名(字段) like ‘%…’;
上述模糊查询意为 查询成绩表中所有名字以老开头得所有记录, % 为通配符,可以匹配一个或多个字符
2). 指定某个位置模糊
语法: select … from 表名 where 列名(字段) like ‘_x’ ;
上述指定位置模糊查询意为 查询成绩表中所有名字中以老开头得两个字得记录
综上所述, 模糊得位置可以用 ’ _ ’ (下划线) 来指定, 也可以用 ’ % ’ 通配符来代表多个字符
8.分页查询
当数据过多时, 有时候只需要一页只需要展示固定条记录, 此时我们便可以采取分页查询, 来规定一次几条记录
语法: select…from 表名 limit N offset M;
第一页
第二页
第三页
通过上述操作, 我们就可以将一组记录分成X页
其中 N 代表了 一页有多少条记录, M 代表了 从第几页开始
9.排序
1.单一排序(只有一个字段进行排序)
语法: select … from 表名 order by 字段(所需排序得) …
例如:将成绩表中 语数英得总分取别名为 total 并将所有人按照总分升序排序
若需要降序,则需在order by 字段后面加上 desc 即可
上述排序中可以发现,无论时在升序(降序)时, NULL总时在第一(倒数第一), 由此可以看出 NULL 是一个非常特别得值, 升序是它是最大值(可以近似理解为无穷大), 降序是它是最小值, 升值比负数还小(可以近似理解为无穷小), 当存在多组值为NULL 进行排序时, 顺序为插入数据时得顺序!
2.多字段排序
语法: select … from 表名 order by filed1 desc, filed 2 , filed3 desc…;
排序优先级按照sql语句顺序执行
例如:将成绩表中查询同学的成绩并依次按照数学降序, 英语降序;
先进行数学排序时, 得到如上结果,下面在数学降序得基础上在进行英语降序
可以看出, 先进行数学降序后, 王五和张三得数学成绩相同, 只有在数学成绩相同时, 此时在进行英语降序排序, 王五和张三得排序收到英语成绩影响, 重新排序得到如上结果
综上所述, 当多字段排序时, 按照sql语句书写顺序执行, 只有当前一个排序结果相同时, 下一个排序字段才会按照此重新排序
3. 修改(Update)
语法: update 表名 set 字段(所需的修改) where/order by…
update 得使用非常灵活, 可以搭配where / order by / limit / 基本条件 同时使用, 因此在上述语法中, 可以按照要求进行自行组合
下面举例一些常见常用得:
1). 将成绩表中张三同学得数学成绩更改为 98.5
2).将成绩表中张三同学得 语文成绩改为80, 英语成绩改为90
3).将总分倒数前三得同学数学成绩扣10分
先将总分倒数前三得同学得成绩筛选出来
在将总分倒数前三得同学数学成绩减10分
对于MySQL得修改功能, 在使用时一定需要谨慎, 防止条件错误带来得错误修改导致后续数据错误
4.删除(Delete)
删除表中不需要的数据
语法: delete from 表名 where / order by / limit …
delete 得使用同update修改功能一样, 使用非常灵活, 同样可以根据自己的需求给定不同得条件进行限制删除表中某些数据
例如: 删除成绩表中总分最小得那个同学
未删除前:
删除后:
对于删除功能, 更是需要谨慎, 并且delete同drop不同, delete 删除得时表中某个数据, 当表中数据均 delete为