DML主要是对数据进行增(insert)删(delete)改(update)操作。
like模糊查询
1.给指定列添加数据
NSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
2.给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2,…);
3.批量添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件];
注意:
- 修改语句中如果不加条件,则所有记录都将被修改!
- 像上面的语句中的中括号,表示在写sql语句中可以省略这部分
1.将张三的性别改为女
update stu set sex = '女' where name = '张三';
2.将张三的生日改为 1999-12-12 分数改为99.99
update stu set birthday = '1999-12-12', score = 99.99 where name = '张三';
3.注意:如果update语句没有加where条件,则会将表中所有数据全部修改
update stu set sex = '女'; -- 表中的所有人的性别都将被修改为女
DELETE FROM 表名 [WHERE 条件];
1.删除张三记录
delete from stu where name = '张三';
2.删除stu表中所有的数据
delete from stu;
查询的完整语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定
1.查询多个字段
SELECT 字段1,字段2,字段3 FROM 表名;
SELECT * FROM 表名; -- 查询所有数据
2.去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
3.起别名
AS: AS 也可以省略
select name,math as 数学成绩,english as 英文成绩 from stu;
SELECT 字段列表 FROM 表名 WHERE 条件列表;
1.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
2.查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select * from stu where age >= 20 && age <= 30;
select * from stu where age >= 20 and age <= 30;
select * from stu where age BETWEEN 20 and 30;
3.查询入学日期在’1998-09-01’ 到 ‘1999-09-01’ 之间的学员信息
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
4.查询年龄等于18岁的学员信息
select * from stu where age = 18;
5.查询年龄不等于18岁的学员信息
select * from stu where age != 18;
select * from stu where age <> 18;
6.查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22;
select * from stu where age in (18,20 ,22);
7.查询英语成绩为 null的学员信息
null值的比较不能使用 = 或者 != 。需要使用 is 或者 is not
select * from stu where english = null; -- 这个语句是不行的
select * from stu where english is null;
select * from stu where english is not null;
模糊查询使用like关键字,可以使用通配符进行占位:
(1)_ : 代表单个任意字符
(2)% : 代表任意多个字符
1.查询姓’马’的学员信息
select * from stu where name like '马%';
2.查询第二个字是’花’的学员信息
select * from stu where name like '_花%';
3.查询名字中包含 ‘德’ 的学员信息
select * from stu where name like '%德%';
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
上述语句中的排序方式有两种,分别是:
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
1.查询学生信息,按照年龄升序排列
select * from stu order by age;
2.查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;
3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc , english asc;
将一列数据作为一个整体,进行纵向计算。
如何理解呢?假设有如下表,需求让我们求表中所有数据的数学成绩的总和。这就是对math字段进行纵向求和。
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
SELECT 聚合函数名(列名) FROM 表;
注意:null 值不参与所有聚合函数运算
1.统计班级一共有多少个学生
select count(id) from stu;
select count(english) from stu;
上面语句根据某个字段进行统计,如果该字段某一行的值为null的话,将不会被统计。所以可以在count() 来实现。 表 示所有字段数据,一行中也不可能所有的数据都为null,所以建议使用 count(*)
select count(*) from stu;
2.查询数学成绩的最高分
select max(math) from stu;
3.查询数学成绩的最低分
select min(math) from stu;
4.查询数学成绩的总分
select sum(math) from stu;
5.查询数学成绩的平均分
select avg(math) from stu;
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
1.查询男同学和女同学各自的数学平均分
select sex, avg(math) from stu group by sex;
2.查询男同学和女同学各自的数学平均分,以及各自人数
select sex, avg(math),count(*) from stu group by sex;
3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex, avg(math),count(*) from stu where math > 70 group by sex;
4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
where 和 having 区别:
分页查询是将数据一页一页的展示给用户看。
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
注意: 上述语句中的起始索引是从0开始
1.从0开始查询,查询3条数据
select * from stu limit 0 , 3;
2.每页显示3条数据,查询第2页数据
select * from stu limit 3 , 3;
3.每页显示3条数据,查询第3页数据
select * from stu limit 6 , 3;
从上面的练习推导出起始索引计算公式:
起始索引 = (要查询的页码 - 1) * 每页显示的条数
1.数据库、数据表创建时先确定是否存在,再创建。
CREATE DATABASE IF NOT EXISTS 数据库名称;
2.删除数据库先判断再删除
DROP DATABASE IF EXISTS 数据库名称;
3.使用指定数据库
USE 数据库名称;
4.查看当前所在数据库
SELECT DATABASE();
1.查询当前数据库下所有表名称
SHOW TABLES;
2.查询表结构
DESC 表名称;
3.创建表
CREATE TABLE 表名 (
字段名1 数据类型1,
字段名2 数据类型2,
…
字段名n 数据类型n
);
注意:最后一行末尾,不能加逗号
4.删除表
DROP TABLE IF EXISTS 表名;
5.修改表名
ALTER TABLE 表名 RENAME TO 新的表名;
-- 将表名student修改为stu
alter table student rename to stu;
6.添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
-- 给stu表添加一列address,该字段类型是varchar(50)
alter table stu add address varchar(50);
7.修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
-- 将stu表中的address字段的类型改为 char(50)
alter table stu modify address char(50);
8.修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
-- 将stu表中的address字段名改为 addr,类型改为varchar(50)
alter table stu change address addr varchar(50);
9.删除列
ALTER TABLE 表名 DROP 列名;
-- 将stu表中的addr字段 删除
alter table stu drop addr;
数值、时间与日期、字符串
alter table stu add address varchar(50);
7.修改数据类型
```mysql
ALTER TABLE 表名 MODIFY 列名 新数据类型;
-- 将stu表中的address字段的类型改为 char(50)
alter table stu modify address char(50);
8.修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
-- 将stu表中的address字段名改为 addr,类型改为varchar(50)
alter table stu change address addr varchar(50);
9.删除列
ALTER TABLE 表名 DROP 列名;
-- 将stu表中的addr字段 删除
alter table stu drop addr;
数值、时间与日期、字符串