select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
1)多个字段的查询
2)去除重复:加 distinct 关键字
3)计算列:一般可以使用四则运算来计算列的值,一般只会进行数值型的计算; ifnull(表达式1,表达式2),表达式1表示哪个字段需要判断是否为null,表达式2表示如果该字段为null后的替换值;
4)起别名:as关键字或者省略as,直接在字段名后 空格 +新名字
【举例】:
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;
1)where子句后跟条件
2)运算符:
【举例】:条件语句的使用
-- 查询年龄大于等于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模糊查询
模糊查询,首先了解占位符的概念:_表示单个任意字符,%表示多个任意字符。
【举例】:模糊查询的使用
-- 查询班级中姓马的人
SELECT *FROM student WHERE NAME LIKE "马%";
-- 查询第二个字是化的人
SELECT *FROM student WHERE NAME LIKE "_化%";
-- 查询姓名是三个字的人
SELECT *FROM student WHERE NAME LIKE "___";
-- 查询姓名中包含德的人
SELECT *FROM student WHERE NAME LIKE "%德%";
SELECT *FROM student ORDER BY math ASC; -- 默认排序方式为升序
SELECT *FROM student ORDER BY math DESC;
-- 按照数学成绩升序排名,若成绩一样,则按照英语成绩排名
SELECT *FROM student ORDER BY math ASC,english ASC;
聚合函数是将一列数据作为一个整体,进行纵向的计算,MySQL中的常用聚合函数如下:
-- 计算个数
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 函数;
【举例】:分组查询的使用
-- 按照性别分组,查询男、女同学的平均分,人数
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;
-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
-- 公式:开始的索引 = (当前页码-1)*每页显示的条数;
SELECT * FROM student LIMIT 6,3; -- 第3页
本文为博主原创文章,转载请注明出处!