1 DML增删改表中的数据(重要)
1.1 添加数据
- 语法:insert into 表名(列名1,列名2,...,列名n)values(值1,值2,...,值n);
- 注意事项:1)列名和值要一一对应; 2)若表名后不定义列名,则默认给所有列添加值; 3)除了数字类型,其他类型需要使用引号(单双均可)引起来;
1.2 删除数据
- 语法:delete from 表名[where 条件];
- 注意事项:1)若不加条件,则删除表中所有记录; 2)若要删除所有记录,有两种方法: --delete from 表名;但不推荐使用,效率低,有多少记录就会执行多少次操作; --truncate table 表名; 推荐使用,效率高,先删除表,在创建一张一样的表;
1.3 修改数据
- 语法:update 表名 set 列名1=值1, 列名2=值2,...,[where 条件];
- 注意事项:1)若不加任何条件,则将表中记录全部修改;--很危险的操作
2 DQL查询表中的记录(重要)
2.1 语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
2.2 基础查询
1)多个字段的查询
- 语法:select 字段名1,字段名2,...,字段名n from 表名;
- 注意:要查询所有字段,可以使用 * 代替字段列表;
2)去除重复:加 distinct 关键字
3)计算列:一般可以使用四则运算来计算列的值,一般只会进行数值型的计算; ifnull(表达式1,表达式2),表达式1表示哪个字段需要判断是否为null,表达式2表示如果该字段为null后的替换值;
4)起别名:as关键字或者省略as,直接在字段名后 空格 新名字
【举例】:
代码语言:javascript复制CREATE TABLE student (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','
杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩
',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
SELECT *FROM student;
SELECT NAME, age FROM student;
SELECT address FROM student;
-- 去除重复结果集
SELECT DISTINCT address FROM student;
-- 计算math 和english的分数之和
SELECT NAME,math,english,math english FROM student;
-- 如果有NULL参与的运算,计算结果都为NULL
SELECT NAME,math,english,math IFNULL(english,0) FROM student;
-- 起别名
SELECT NAME,math,english,math IFNULL(english,0) AS 总分 FROM student;
SELECT NAME,math 数学,english 英语,math IFNULL(english,0) 总分 FROM student;
2.3 条件查询
1)where子句后跟条件
2)运算符:
- >、 <、 <=、 >=、 =、 <>
- BETWEEN...AND
- IN(集合)
- LIKE
- IS NULL
- and 或 &&
- or 或 ||
- not 或 |
【举例】:条件语句的使用
代码语言:javascript复制-- 查询年龄大于等于20岁
SELECT *FROM student WHERE age >= 20;
-- 查询年龄等于20岁
SELECT *FROM student WHERE age = 20;
-- 查询年龄不等于20岁
SELECT *FROM student WHERE age != 20;
SELECT *FROM student WHERE age <> 20;
-- 查询年龄大于等于20,小于等于30
SELECT *FROM student WHERE age >= 20 AND age <= 30;
SELECT *FROM student WHERE age BETWEEN 20 AND 30;
-- 查询20岁、19岁、25岁的人员信息
SELECT *FROM student WHERE age=20 OR age=19 OR age=25;
SELECT *FROM student WHERE age IN(20,19,25);
-- 查询 英语成绩为空的
SELECT *FROM student WHERE english = NULL; -- NULL不能使用=或!= 进行判断
SELECT *FROM student WHERE english IS NULL;
-- 查询 英语成绩不为空的
SELECT *FROM student WHERE english IS NOT NULL;
3)LIKE模糊查询
模糊查询,首先了解占位符的概念:_表示单个任意字符,%表示多个任意字符。
【举例】:模糊查询的使用
代码语言:javascript复制-- 查询班级中姓马的人
SELECT *FROM student WHERE NAME LIKE "马%";
-- 查询第二个字是化的人
SELECT *FROM student WHERE NAME LIKE "_化%";
-- 查询姓名是三个字的人
SELECT *FROM student WHERE NAME LIKE "___";
-- 查询姓名中包含德的人
SELECT *FROM student WHERE NAME LIKE "%德%";
2.4 排序查询
- 语法:order by 子句,如order by 字段1,排序方式1,字段2,排序方式2...
- 排序方式:ASC,升序,默认的; DESC:降序;
- 注意:若有多个排序条件,当前面的条件值一样时,才会判断第二条件;
SELECT *FROM student ORDER BY math ASC; -- 默认排序方式为升序
SELECT *FROM student ORDER BY math DESC;
-- 按照数学成绩升序排名,若成绩一样,则按照英语成绩排名
SELECT *FROM student ORDER BY math ASC,english ASC;
2.5 聚合函数
聚合函数是将一列数据作为一个整体,进行纵向的计算,MySQL中的常用聚合函数如下:
- count:计算个数 1)一般选择非空的列:主键; 2)count(*);
- max:计算最大值
- min:计算最小值
- sum:计算和
- avg:计算平均值
-- 计算个数
SELECT COUNT(english)FROM student;
SELECT COUNT(IFNULL(english,0))FROM student;
SELECT COUNT(id)FROM student;
-- 计算最大值,最小值
SELECT MAX(math)FROM student;
SELECT MIN(math)FROM student;
-- 计算累加和
SELECT SUM(english)FROM student;
-- 计算平均值
SELECT AVG(english)FROM student;
注意:聚合函数的计算排除NULL值; 解决方案:1)选择不包含非空的列进行计算; 2)IFNULL 函数;
2.6 分组查询
- 语法:group by 分组字段
- 注意:1)分组之后查询的字段:分组字段、聚合函数,不能写其他字段(没有意义); 2)where和having的区别? *where在分组之前进行限定,若不满足条件,不参与分组,having在分组之后进行限定,若不满足结果,不会被查询出来; *where后不可以跟聚合函数,having可以进行聚合函数的判断;
【举例】:分组查询的使用
代码语言:javascript复制-- 按照性别分组,查询男、女同学的平均分,人数
SELECT sex, AVG(math),COUNT(id) FROM student GROUP BY sex;
-- 按照性别分组,查询男、女同学的平均分,人数,分数低于70的不参与分组
SELECT sex, AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
-- 按照性别分组,查询男、女同学的平均分,人数,分数低于70的不参与分组,分组之后人数要大于2人
SELECT sex, AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id)>2;
-- 另一写法,写别名
SELECT sex, AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数>2;
2.7 分页查询
- 语法:limit 开始的索引,每页查询的条数;
- 公式:开始的索引 = (当前页码-1)*每页显示的条数;
- 注意:limit是一个MySQL的“方言”,不同数据库实现的方式不一样;
-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
-- 公式:开始的索引 = (当前页码-1)*每页显示的条数;
SELECT * FROM student LIMIT 6,3; -- 第3页
本文为博主原创文章,转载请注明出处!