SQL–02数据表数据的增删改查
**图形化工具:**使用cmd页面看起来不简洁,而且很容易出错,所以我们使用图形化工具,Navicat,傻瓜式安装。
也可以使用一个小一点的软件heidisql,这个占空间比Navicat小,而且功能也齐全。如下所示。
DML数据表中数据操作(增删改)
1.增加一条数据
INSERT INTO tb_user(id,username,password) values(1,"第一个","qwers");
这个意思是说,向tb_user表中的id,username,password,三个字段添加数据分别是1,第一个,qwers。记住括号里面的字段也可以不全写完。但是记得要一一对应,而且数据的内型也要对应。
在heidisql工具里面的图片上面标注的1上面点击,有一个白框,在哪里写入sql语句,然后进行选中语句,再点击2步骤,就执行。下方无报错。就说明插入进去了。在执行**select * from tb_user;**意思是说查询tb_user这个表里面的数据。
tips:给所有列添加的时候,可以省去中间括号的字段名。写成这样.
INSERT INTO tb_user values(1,"第一个","qwers");
添加多行数据的方法。记得最后一个不要写逗号。如下所示添加了三行数据。
INSERT INTO tb_user values(
1,
"第一个",
"qwers"
),(
2,
"第二个",
"qwers"
),(
3,
"第三个",
"qwers"
);
2.修改数据
UPDATE tb_user SET PASSWORD='zxcv' WHERE username='第一个';
将tb_user表中的username字段是‘第一个’的行,其中的password字段修改为’zxcv’.
修改多条如下。中间使用逗号隔开。
UPDATE tb_user SET PASSWORD='zxcv',username='修改的' WHERE id=1;
tips:如果update语句没有加条件,就会使得表中所有数据全部都修改。
3.删除数据
DELETE FROM tb_user WHERE username='修改的';
将tb_user表中所有的username字段数据为“修改的"的行删去。
同上,一定要加where条件,不然会删除所有数据。
DML(查询数据)
查询数据有很多种查询,本篇讲述基础查询,条件查询(select),排序查询(order by),分组查询(group by),分页查询(limit)。
这里准备了一个学生表,让我们练习查询。插入了五条数据。
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
age INT,
sex VARCHAR(10),
score DOUBLE(5,2),
bitrh DATE
);
INSERT INTO student(id,NAME,age,sex,score,birth)
VALUES(1,'张三',20,'男',32,'2000-02-12'),
(2,'李四',22,'女',40,'2000-01-01'),
(3,'王五',23,'女',35,'2000-05-21'),
(4,'麻子',21,'男',32,'2000-12-03'),
(5,'小黑',20,'男',36,'2000-10-07');
1.基础查询
查询age,sex字段的所有内容,这里的字段可以修改为多个。
select age,sex from student;
查询所有的数据,用星号代替。
select * from student;
去除查询字段里面的相同数据,同意的数据会保留一次。
select distinct age from student;
查询的字段修改名字,只在查询页面修改,不修改数据表的
select age as 年龄,sex as 性别 from student;
2.条件查询
查询student表中age字段大于等于20的行
SELECT * FROM student WHERE age>=20;
查询student表中age字段大于20小于23的行
SELECT * FROM student WHERE age >=20 AND age<=23;
SELECT * FROM student WHERE age BETWEEN 20 AND 23;
查询student表中age字段等于20的行
SELECT * FROM student WHERE age =20;
查询student表中age字段不等于20的行
SELECT * FROM student WHERE age!=20;
SELECT * FROM student WHERE age<>20;
查询student表中age字段等于20活着的等于21的行
SELECT * FROM student WHERE age=20 OR age=21;
SELECT * FROM student WHERE age IN(20,21);
查询student表中age字段为空的行
SELECT * FROM student WHERE age IS NULL;
查询student表中age字段为空的行
SELECT * FROM student WHERE age IS not NULL;
模糊查询,查询name字段第一个字符是张的行
SELECT * FROM student WHERE NAME LIKE '张%';
模糊查询,查询name字段第二个字符是三的行
SELECT * FROM student WHERE NAME LIKE '_三%';
模糊查询,查询name字段带张的行
SELECT * FROM student WHERE NAME LIKE '%张%';
在模糊查询中,_代表单个任意字符,%代表多个任意字符,多也可以是0个
3.排序查询
ASC是默认的。 ASC升序 DESC降序
根据年龄升序排序
SELECT * FROM student ORDER BY age;
根据年龄降序排序
SELECT * FROM student ORDER BY age DESC;
根据年龄降序排序,如果年龄一样,根据分数升序排序。--如果是多个排序,只有前边的数值一样,才会根据第二条件进行排序
SELECT * FROM student ORDER BY age desc,score asc;
4.分组查询
count(列名)–统计数量,max(列名)–最大值,min(列名)–最小值,sum(列名)–求和,avg(列名)–平均值
聚合函数
查询表中有多少行,统计的列名不能为空值,空值不会计算
SELECT COUNT(id) FROM student;
查询分数最高的数值
SELECT MAX(score) FROM student;
查询分数最低的数值
SELECT Min(score) FROM student;
查询分数平均的数值
SELECT avg(score) FROM student;
查询男女同学各自的平均分
SELECT sex,AVG(score) FROM student GROUP BY sex;
查询男女同学各自的平均分,并且计算人数
SELECT sex,AVG(score),COUNT(*) FROM student GROUP BY sex;
查询男女同学各自的平均分,并且计算人数,并且分数要大于32才能参与计算
SELECT sex,AVG(score),COUNT(*) FROM student WHERE score >32 GROUP BY sex;
查询男女同学各自的平均分,并且计算人数,并且分数要大于32才能参与计算,并且显示人数大于2的组
SELECT sex,AVG(score),COUNT(*) FROM student WHERE score >32 GROUP BY sex having count(*)>2;
5.分页查询
查询第一页的数据,每页显示三条。
SELECT * FROM student LIMIT 0,3;
查询第二页的数据,每页显示三条。
SELECT * FROM student LIMIT 3,3;
查询第三页的数据,每页显示三条。
SELECT * FROM student LIMIT 6,3;
起始索引计算=(当前页码-1)*每页显示的条数。
6.分组查询
查询第一页的数据,每页显示三条。
SELECT * FROM student LIMIT 0,3;
查询第二页的数据,每页显示三条。
SELECT * FROM student LIMIT 3,3;
查询第三页的数据,每页显示三条。
SELECT * FROM student LIMIT 6,3;
起始索引计算=(当前页码-1)*每页显示的条数。
今天也完成了。:)