一、什么是CRUD?
CRUD既mysql数据库的增加删除修改删除。
Insert语句 (增加数据)、Update语句 (更新数据)、Delete语句 (删除数据)、Select语句(查找数据)
二、Insert语句 (增加数据)
使用 INSERT 语句向表中插入数据。
INSERT INTO table_name [(column [, column...])] VALUES (value [, value...]);
- 插入的数据应与字段的数据类型相同。
- 数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
- 在values中列出的数据位置必须与被加入的列的排列位置相对应。
- 字符和日期型数据应包含在单引号中。
- 插入空值:不指定或insert into table value(null)
- 如果要插入所有字段可以省写列列表,直接按表中字段顺序写值列表
- Insert语句练习
练习:使用insert语句向employee表中插入三个员工的信息。
字段名
字段类型
id
整形
name
字符串型
gender
字符串型
birthday
日期型
salary
浮点型
entry_date
日期型
resume
大文本型
Tip:mysql中文乱码
- mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。
- client是客户端使用的字符集。
- connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
- database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
- results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
- server是服务器安装时指定的默认字符集设定。
- system是数据库系统使用的字符集设定。(utf-8不可修改)
show variables like'character%'; set names gbk;临时修改当前CMD窗口和mysql的通信编码字符集
- 通过修改my.ini 修改字符集编码
三、 Update语句 (更新数据)
使用 update语句修改表中数据。
UPDATE tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
四、 Delete语句 (删除数据)
使用 delete语句删除表中数据。
- delete from tbl_name [WHERE where_definition]
- 如果不使用where子句,将删除表中所有数据。
- Delete语句不能删除某一列的值(可使用update)
- update table_name set 字段名='';
- 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
- drop table table_name;
- 同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
外键约束
- 删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。
五、Select语句(查找数据)
- Select语句(1)
基本select语句
SELECT [DISTINCT] *|{column1, column2. column3..}FROM table;
select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。
from指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
练习:
查询表中所有学生的信息。
查询表中所有学生的姓名和对应的英语成绩。
过滤表中重复数据。distinct去重
- Select语句(2)
- 在select语句中可使用表达式对查询的列进行运算
SELECT * |{column1|expression, column2|expression,..}
FROM table;
- 在select语句中可使用as语句
SELECT column as 别名 from 表名;
练习
在所有学生分数上加10分特长分显示。
统计每个学生的总分。
使用别名表示学生总分。
- Select语句(3)
使用where子句,进行过滤查询。练习:
查询姓名为XXX的学生成绩
查询英语成绩大于90分的同学
查询总分大于200分的所有同学
- Select语句(4)
在where子句中经常使用的运算符
比较运算符
> < <= >= = <>
大于、小于、大于(小于)等于、不等于
between ...and...
显示在某一区间的值
in(set)
显示在in列表中的值,例:in(100,200)
like ‘张pattern’
模糊查询%_
is null
判断是否为空
select * from user where id is null
ifnull(原值,替代值)
如果原值为null,则使用代替值
select ifnull(score,0) from exam;
逻辑运算符
and
多个条件同时成立
or
多个条件任一成立
not
不成立,例:where not(salary>100);
Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’;
Select语句(4)练习
查询英语分数在 80-100之间的同学。
查询数学分数为75,76,77的同学。
查询所有姓张的学生成绩。
查询数学分>70,语文分>80的同学。
- Select语句(5)
使用order by 子句排序查询结果。
SELECT column1, column2. column3..
FROM table;
order by column asc|desc
Order by 指定排序的列,排序的列既可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序(默认)、Desc 降序
ORDER BY 子句应位于SELECT语句的结尾。
练习:
对语文成绩排序后输出。
对总分排序按从高到低的顺序输出
对姓李的学生成绩排序输出
- 聚集函数-count
count(列名)返回某一列,行的总数
Select count(*)|count(列名) from tablenam [WHERE where_definition]
练习:
统计一个班级共有多少学生?
统计数学成绩大于90的学生有多少个?
统计总分大于250的人数有多少?
- 聚集函数-SUM
Sum函数返回满足where条件的行的和
Select sum(列名){,sum(列名)…} from tablename[WHERE where_definition]
练习:
统计一个班级数学总成绩?
统计一个班级语文、英语、数学各科的总成绩
统计一个班级语文、英语、数学的成绩总和
统计一个班级语文成绩平均分
注意:sum仅对数值起作用,否则会报错。
注意:对多列求和,“,”号不能少。
- 聚集函数-AVG
AVG函数返回满足where条件的一列的平均值
Select avg(列名){,avg(列名)…} from tablename [WHERE where_definition]
练习:
求一个班级数学平均分?
求一个班级总分平均分?
- 聚集函数-MAX/MIN
Max/min函数返回满足where条件的一列的最大/最小值
Select max(列名)from tablename [WHERE where_definition]
练习:
求班级最高分和最低分(数值范围在统计中特别有用)
- Select语句(6)分组操作
使用group by 子句对列进行分组
SELECT column1, column2. column3..
FROM table
group by column having ...
练习:对订单表中商品归类后,显示每一类商品的总价
- 使用having 子句 对分组结果进行过滤
练习:查询购买了几类商品,并且每类总价大于100的商品
- where和having区别:where在分组前进行条件过滤,having在分组后进行条件过滤。使用where的地方都可以用having替换。但是having可以使用分组函数,而where后不可以使用。