数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:
- SELECT <字段名表>
- FROM <表或视图名>
- WHERE <查询条件>
1. 基础查询
查询表的基本操作
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
1. 多个字段的查询
- select 字段名1,字段名2… from 表名;
-- 查询姓名和年龄
SELECT
NAME, -- 姓名
age -- 年龄
FROM
student; -- 学生表
- 如果查询所有字段,则可以使用*来替代字段列表
SELECT * FROM student;
2. 去除重复
distinct
-- 去除重复的结果集
SELECT DISTINCT address FROM student;
SELECT DISTINCT NAME,address FROM student;
3. 计算列
- 一般可以使用四则运算来计算一些列数值型的值。
-- 计算 math 和 english 分数和
SELECT NAME,math,english,math + english FROM student;
ifnull
(表达式1,表达式2):如果有null
参与运算,计算结果都为null
参数:
- 表达式1:哪个字段需要判断是否为null
- 表达式2:如果该字段为null后的替换值。
-- 如果有null参与运算,计算结果都为null
SELECT NAME,math,english,math + IFNULL(english,0) FROM student;
4. 起别名
- as:as也可以省略
-- 起别名
SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student;
SELECT NAME 姓名,math 数学,english 英语,math + IFNULL(english,0) 总分 FROM student;
5. 代码演示
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,55),
(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 DISTINCT address FROM student;
SELECT DISTINCT NAME,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. 条件查询
where
子句后跟条件
1. 运算符
- < 、<= 、>= 、= 、<>
-- 查询年龄大于20
SELECT * FROM student WHERE age > 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;
2. BETWEEN…AND
-- 查询年龄大等于20 小等于30
SELECT * FROM student WHERE age >= 20 && age <= 30;
SELECT * FROM student WHERE age >= 20 AND age <= 30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
3. IN( 集合)
-- 查询年龄22, 18,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25;
SELECT * FROM student WHERE age IN (22,18,25);
4. 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 '%德%';
5. IS NULL
-- 查询因英语成绩为null的信息
SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = 和 != 判断
SELECT * FROM student WHERE english IS NULL;
-- 查询因英语成绩不为null的信息
SELECT * FROM student WHERE english IS NOT NULL;
6. and 或 &&
-- 查询年龄大等于20 小等于30
SELECT * FROM student WHERE age >= 20 && age <= 30;
SELECT * FROM student WHERE age >= 20 AND age <= 30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
7. or 或 ||
-- 查询年龄22, 18,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25;
SELECT * FROM student WHERE age IN (22,18,25);
8. not 或 !
-- 查询因英语成绩为null的信息
SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = 和 != 判断
SELECT * FROM student WHERE english IS NULL;
-- 查询因英语成绩不为null的信息
SELECT * FROM student WHERE english IS NOT NULL;
9. 代码演示
SELECT * FROM student;
-- 查询年龄大于20
SELECT * FROM student WHERE age > 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 && age <= 30;
SELECT * FROM student WHERE age >= 20 AND age <= 30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 查询年龄22, 18,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25;
SELECT * FROM student WHERE age IN (22,18,25);
-- 查询因英语成绩为null的信息
SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = 和 != 判断
SELECT * FROM student WHERE english IS NULL;
-- 查询因英语成绩不为null的信息
SELECT * FROM student WHERE english IS NOT NULL;
-- 查询姓马的有哪些
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE '_化%';
-- 查询姓名是三个字的人
SELECT * FROM student WHERE NAME LIKE '___';
-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';