表的增删改查
CURD: Create,Retrieve,Update,Delete
Create
语法:
INSERT [INTO] table_name
[(column [,column]...)]
VALUE (value_list) [,(value_list)]...
value_list:value,[,value]...
案例:
创建一张学生表
单行数据+全列插入
插入两条记录,value_list数量必须和定义表的列的数量及顺序一致
多行数据+指定列插入
插入否则更新
由于主键或者唯一键对应的值已经存在而导致插入失败
主键冲突:
唯一键冲突
可以选择性的进行同步更新操作语法:
INSERT ...ON DUPLICATE KEY UPDATE
column=value[,column=value]...
替换
主键或者唯一键没有冲突,则直接插入
主键或者唯一键有冲突,则删除后再插入
Retrieve(取回)
语法:
SELECT
[DISTINCT] {*| {column [,column]...}
[FROM table_name]
[WHERE...]
[ORDER BY column [ASC|DESC],...]
LIMIT...
案例:
创建表结构
插入测试数据
SELECT列
全列查询
通常情况下不建议使用*进行全列查询
1.查询的列越多,意味着需要传输的数据量越大
2.可能会影响到索引的使用
指定列查询
指定列的顺序不需要按照定义表的顺序来
查询字段为表达式
表达式包含一个字段
表达式包含多个字段
为查询结果指定别名
语法:
SELECT column [AS] alias_name [...] FROM table_name;
结果去重
可以看到98重复了
去重
WHERE条件
比较运算符
逻辑运算符
英语不及格的同学及其他们的英语成绩<60
语文成绩在【80,90】分的同学及他们的语文成绩
使用and进行条件连接
数学成绩是58或者59或者98或者99分的同学及他们的成绩
使用or进行条件连接
使用in条件
姓孙的 同学
%:匹配任意多个(包括0个)任意字符
匹配严格的一个任意字符
语文成绩好于英语成绩的同学
where条件中比较运算符两侧都是字段
总分在200分以下的同学
语文成绩>80并且不姓孙的同学
孙某同学,否则要求总成绩>200并且 语文成绩<数学成绩 并且 英语成绩>80
结果排序
语法:
ASC为升序
DESC为降序
默认为ASC
注意:没有ORDER BY子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
案例:
查询同学数学成绩,按数学成绩升序显示
注意:
NULL视为比任何值都小,升序出现在最上面,降序出现在最下面
查询同学们各门成绩,一次按照数学降序,英语升序,语文升序的方式显示
查询同学及总分,由高到低
order by子句中可以使用列别名
查询姓孙的同学或者姓曹的同学的数学成绩,结果按数学成绩由高到低显示
筛选分页结果
语法;
起始下标为0
从0开始,筛选n条结果
SELECT ... FROM table_name[WHERE...][ORDER BY...]LIMIT n;
从s开始,筛选n条结果
SELECT... FROM table_name[WHERE...][ORDER BY...]LIMIT s,n;
从s开始,筛选n条结果,比第二种用法更明确,建议使用
SELECT...FROM table_name[WHERE...][ORDER BY...]LIMIT n OFFSET n;
注意;
对未知表进行查询时,最好加上一条LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死,按id分页,每页3条记录,分别显示第1、2.、3页
第2页
update
语法:
UPDATE table_name set column =expr[,column=expr...]
[WHERE...][ORDER BY...][LIMIT...]
对查询到的结果进行列值更新
案例:
将孙悟空同学的数学成绩变更为80分
更新值为为具体值
查看原数据
数据更新
查看更新后的数据
将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分
数据更新
查看更新后数据
将总成绩倒数前三的3为同学的数学成绩加上30分
数据更新,不支持shuxue+=30这种语法
查看更新后数据
将所有同学的语文成绩更新为原来的2倍
delete
删除数据
语法:
DELETE FROM table_name [WHERE...][ORDER BY...][LIMIT...]
删除孙悟空学的考试成绩
查看原数据
删除数据
查看删除结果
删除整张表数据(慎用)
准备测试表
插入测试数据
查看测试数据
删除整表数据
查看删除结果
截断表
语法:
TRUNCATE [TABLE] table_name
注意:这个操作慎用
1.只能对整表操作,不能像DELETE一样针对部分数据操作
2.实际上MySQL不对数据操作,所以比DELETE更快
3.会重置AUTO_INCREMENT项
准备测试表
插入测试数据
截断整表数据,注意影响行数是0,所以实际上没有对数据真正操作
插入查询结果
语法:
insert into table_name[(column[,column...])]select...
案例:
删除表中的重复记录,重复的数据只能有一份
插入测试数据
思路:
创建一张空表no_duplicate_table,结构和duplicate_table一样
将duplicate_table的去重数据插入到no_dupicate_table
通过重命名表,实现原子的去重操作
查看最终结果
聚合函数
案例:
统计班级共有多少同学
使用表达式做统计
group by子句的使用
在select中使用group by子句可以对指定列进行分组查询