MySql学习笔记(三)—— DDL、DQL

好久不见. 提交于 2019-12-05 11:22:08

DML:增删改表中数据

1、添加数据:

insert into 表名(列名1,列名2,…,列名n)values(值1,值2,…,值n)

INSERT INTO stu2(id,NAME,age) VALUES(1,'张无忌',18);

注意:
(1)列名和值要一一对应,类型也要对应
(2)表名后不定义列名,默认给所有列添加值

INSERT INTO stu2 VALUES(2,'赵敏',17,99.9,NULL,NULL);

(3)除了数字类型,其他类型要用引号引起来

2、删除数据:

Delete from 表名where 【条件】;

DELETE FROM stu2 WHERE id=1;

(1)若不写条件,则删除表中所有数据,表中有多少条记录,他就会执行几次,就算是为了删除所有数据,也不建议用,因为效率太低;
(2)Truncate table stu2;—删除表,再创建一个一摸一样的空表
(3)删除表中所有记录的方法:

delete from 表名;--不推荐使用,有多少条记录就会执行多少次删除操作
truncate table stu2;--推荐使用,先删除表,再创建一张一样的空表

3、修改数据:
Update 表名 set 列名1=值1,列名2=值2,。。。。where 条件;

UPDATE stu2 SET age=20 WHERE id =1;
UPDATE stu2 SET age=18,score=100 WHERE id=2;

注意:如果不加任何条件,将修改表中所有记录;

DQL:查询表中的记录
1、语法:

Select 
	字段列表
From
	表名列表
Where
	条件列表
Group by
	分组字段
Having
	分组之后的条件
Order by
	排序
Limit
	分页限定	

2、基础查询

(1)多个字段的查询

SELECT NAME,age FROM student2;

在这里插入图片描述
查询所有字段,可以使用*来替代字段列表(不建议使用)

(2)去除重复(distinct)

SELECT DISTINCT address FROM student2;

(3)计算列

可使用四则运算计算一些列的值(一般只会进行数值型的计算)

Ifnull(表达式1,表达式2):
表达式1:那个字段需要判断是否为null
表达式2:表达式1的字段为null后的替换值

SELECT NAME,math,english,math+english FROM student2;

在这里插入图片描述

SELECT NAME,math,english,math+IFNULL(english,0) FROM student2;

在这里插入图片描述
(4)起别名(As:as也可以省略)

SELECT NAME,math,english,math+IFNULL(english,0) AS 总分 FROM student2;(用空格代表as也行)

在这里插入图片描述
3、条件查询
(1)where 子句后跟条件

SELECT * FROM student2 WHERE english IS NOT NULL;

在这里插入图片描述
(2)运算符查询
<、>、 <=、 >= 、=、 <>、!=
Between …and
In(集合)
Like:模糊查询(占位符:_:单个任意字符;%:多个任意字符)
Isnull

-- 查询年龄大于20
SELECT * FROM student2 WHERE age > 20;
-- 查询年龄大于等于20小于等于30范围内的
SELECT * FROM student2 WHERE age >=20 && age<=30;  -- 不推荐&&
SELECT * FROM student2 WHERE age >=20 AND age<=30;
SELECT * FROM student2 WHERE age BETWEEN 20 AND 30; -- 包含20和30
-- 查询22岁,19岁,25岁的信息
SELECT *FROM student2 WHERE age=22 OR age=19 OR age=25;
SELECT *FROM student2 WHERE age IN (22,18,30);
-- 查询没有英语成绩的
SELECT *FROM student2 WHERE English IS NULL; -- null 不能用=或则!=
-- 查询英语成绩不是null的
SELECT * FROM student2 WHERE english IS NOT NULL;

(3)模糊查询

-- 查询姓马的有那些?
SELECT * FROM student2 WHERE NAME LIKE '马%';
-- 查询第二个字符是化的人
SELECT * FROM student2 WHERE NAME LIKE '_化%';
-- 查询姓名是三个字的人
SELECT * FROM student2 WHERE NAME LIKE '___';
-- 查询姓名中包含马的人
SELECT * FROM student2 WHERE NAME LIKE '%马%';

4、排序查询
语法:order by 子句

	Order by 排序字段1 排序方式1,排序字段2 排序方式2

排序方式:
ASC:升序,默认的
Desc:降序,

SELECT * FROM student2 ORDER BY math; -- 排序方式;
SELECT * FROM student2 ORDER BY math DESC; -- 排序方式;
-- 按照数学成绩排名,如果数学成绩一样,则按照英语成绩排名
SELECT * FROM student2 ORDER BY math ASC , english ASC;

注意:当有多个排序条件时,只有第一条件一样时才会使用第二条件

5、聚合函数:将一列数据作为一个整体,进行纵向的计算

(1)count:计算个数

a、一般选非空的列:主键
b、Count(*)

SELECT COUNT(NAME) FROM student2;

注意:聚合函数的计算会排除NULL的值
解决方案:a、选择非空的列进行计算;b、ifnull函数

(2)max:计算最大值
(3)min:计算最小值
(4)sum:计算和
(5)avg:计算平均值

SELECT COUNT(NAME) FROM student2;
SELECT COUNT(IFNULL(english,0)) FROM student2;
SELECT COUNT(*) FROM student2;
SELECT MAX(math) FROM student2;
SELECT MIN(math) FROM student2;
SELECT SUM(math) FROM student2;
SELECT AVG(math) FROM student2;

6、分组查询
语法:group by 分组字段;

注意:

(1)分组查询的字段只能是:分组字段或者聚合函数

(2)Where与having的区别?

Where 在分组之前进行限定,如果不满足则不参与分组,Having 在分组之后进行限定,如果不满足结果,则不会被查询出来;where 后不可以跟聚合函数的判断,having后可以跟聚合函数的判断

-- 按照性别分组,分别查询男女同学的平均分
SELECT sex, AVG(math) FROM student2 GROUP BY sex;
-- 按照性别分组,分别查询男女同学的人数,平均分
SELECT sex, COUNT(math), AVG(math) FROM student2 GROUP BY sex;
-- -- 按照性别分组,分别查询男女同学的人数,平均分,分数低于70分不参与分组
SELECT sex, COUNT(math), AVG(math) FROM student2 WHERE math>70 GROUP BY sex;
-- 按照性别分组,分别查询男女同学的人数,平均分,分数低于70分不参与分组,人数大于2个人
SELECT sex, COUNT(math), AVG(math) FROM student2 WHERE math>70 GROUP BY sex HAVING COUNT(id)>2;
SELECT sex, COUNT(math) 人数, AVG(math) FROM student2 WHERE math>70 GROUP BY sex HAVING 人数>2;

7、分页查询
(1)语法:limit 开始的索引,每页查询的条数;
(2)公式:开始的索引 = (当前页面-1)*每页显示的条数

SELECT * FROM student2 LIMIT 0,3;-- 第一页
SELECT * FROM student2 LIMIT 3,3;-- 第二页
SELECT * FROM student2 LIMIT 6,3;-- 第二页

(3)limit是一个MySql的‘方言’

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!