MySQL入门(二)
书接上文,在学会了表管理后,就应该开始学习对表内数据的管理了。
数据的增删改
- 添加数据
-- 给指定列添加数据↓ INSERT INTO TableName(列名1,列名2,...) VALUES(值1,值2,...); -- 给全部列添加数据↓ INSERT INTO TableName VALUE(值1,值2,...); -- 批量添加数据↓ INSERT INTO TableName(列名1,列名2,...) VALUES(值1,值2,...), VALUES(值1,值2,...), ...; INSERT INTO TableName VALUE(值1,值2,...), VALUES(值1,值2,...), ...;
- 修改数据
-- 将指定条件的数据修改为指定值↓ UPDATE TableName SET 列名1=值1,列名2=值2,... WHERE 条件; -- 注意:若UPDATE语句没有WHERE条件则会将表中所有数据修改
- 删除数据
-- 将指定条件的数据从表中删除↓ DELETE FROM TableName WHERE 条件; -- 注意:若DELETE语句没有WHERE条件则会将表中所有数据删除
表中数据的查询
查询的基本语法
-- 基础的查询语句结构如下↓
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定;
其中SELECT后的字段列表可以通过AS关键字标注别名
- 条件查询(WHERE)
即WHERE语句后跟条件,条件写法与java条件类似。
SELECT
*
FROM
stu
WHERE
age >= 20 AND age <= 30;
-- 既查询年龄在20~30的stu表中数据
-- 条件写法与java语法的区别
-- 等于不用双等号而是直接用=或者<>
-- null值的比较需要使用IS NULL或者IS NOT NULL,不能使用=和!=
-- BETWEEN...AND...表示在某个范围内开区间
-- IN (...)表示多选一
-- like占位符可用_表示单个字符,%表示多个
- 分组查询(GROUP BY)
将表内数据分组分别进行查询。 分组的目的是分开统计,故需要使用聚合函数进行统计计算。 聚合函数的具体语法如下:
SELECT
聚合函数名(列名)
FROM
表;
-- 聚合函数具体如下5种:
-- count(列名),统计数量(一般不用于有null的列)
-- max(列名),最大值
-- min(列名),最小值
-- sum(列名),求和
-- avg(列名),求均值
-- 注意:所有的聚合函数在计算时都将null值排除在外
分组查询既在GROUP BY后加上分组字段名,HAVING进行条件筛选。 注意:分组后查询的字段为分组字段和聚合函数,其他字段无意义
SELECT
sex,avg(math)
FROM
stu
GROUP BY
sex
HAVING
count(*) > 2;
-- 即根据sex字段分组,返回分组后数据大于两个的math平均值和对应的sex
关于WHERE和HAVING的区别: 首先是执行时间不一样,WHERE是在分组前执行而HAVING是在分组后。 其次是可判断条件不同,WHERE不能使用聚合函数,而HAVING可以。
- 排序查询(ORDER BY)
排序方式: ASC:升序排列(默认值,不指定排序方式既默认) DESC:降序排列
SELECT
*
FROM
stu
ORDER BY
age ASC;
-- 即按照年龄升序排列stu表内所有数据
-- 排序查询可以指定优先级,在第一优先级的值一样的情况下遵循第二优先级进行排序
-- 例如
SELECT
*
FROM
stu
ORDER BY
age ASC,
id DESC;
-- 即按照age升序,若age相同则按照id降序排列
- 分页查询(LIMIT)
若数据太多,一次性展示会造成内存过大,故可以分页返回查询的数据。 基础语法如下:
SELECT
字段列表
FROM
表明
LIMIT
起始索引,查询条目数;
起始索引就是从第几条数据开始查询(偏移量),条目数即返回数据的条数。 MySQL的起始索引从0开始。 起始索引的公式如下: 起始索引=(当前页码-1)*每页显示的条数
SELECT
*
FROM
stu
LIMIT
3,3;
-- 即每页显示3条,第二页
另外:
- 分页查询LIMIT是MySQL的方言
- Oracle分页查询使用ROWNUMBER
- SQL Server分页查询使用的TOP
小结
查询语句的基本语法:
SELECT
字段列表
FROM
表名列表
WHERE
查询条件
GROUP BY
分组字段
HAVING
分组后筛选条件
LIMIT
起始索引,每页的数据条数;
这就是一个最完整的MySQL查询语句。