数据查询语言(DQL)
DQL(Data Query Language)数据查询语言
- 用来查询数据库中表的记录(数据)。关键字:select等
create table student(
id int,
name varchar(10),
age int,
score double(4,1),
birth date,
insert_time timestamp
);
添加三行数据
create table employee(
id int, -- 员工编号
name varchar(20),-- 姓名
gender char(1),-- 性别
age int,-- 年龄
work_years int,-- 工龄
dp varchar(20),-- 部门
birth date,-- 生日
salary double(8,2) -- 工资
);
添加三行数据
-
完整的查询语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
1.多个字段查询
select 字段名1,字段名2... from 表名;
注意: 如果查询所有字段,则可以使用*来替代字段列表。
-
去除重复
关键字 distinct 直接放在select后面
-
四则运算
create table stu( id int, math double(4,1), english double(4,1) );
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算) ifnull(表达式1,表达式2): null参与的运算,计算结果都为null 表达式1:哪个字段需要判断是否为null 表达式2: 该字段为null后的替换值。
案例:计算学员的英语和数学成绩和
select math,english,ifnull(math,0)+ifnull(english,0) from stu;
-
起别名
字段名 后写关键字 as 或省略as 直接用空格
随堂测试:
1.查询员工表中所有员工的姓名和工资
2.查询所有员工的部门,并去重
3.员工表添加'津贴'这一列
4.给每个员工加上600的津贴
5.查询员工的姓名,总工资(工资和津贴之和)
-- 随堂测试答案:
-- 3.员工表添加'津贴'这一列
ALTER TABLE emp ADD bonus DOUBLE(6,2);
ALTER TABLE emp ADD column bonus DOUBLE(6,2);
-- 4.给每个员工加上600的津贴
UPDATE emp SET bonus =600;
-- 5.查询员工的姓名,总工资(工资和津贴之和)
SELECT NAME 姓名,(IFNULL(salary,0)+bonus) 总工资 FROM emp;
2. 条件查询
条件查询需要用到where语句,where必须放到from语句表的后面
支持如下运算符
运算符 | 说明 |
---|---|
= | 等于 |
<>或!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between … and …. | 两个值之间,等同于 >= and <= |
is null | 为null(is not null 不为空) |
and && | 并且 |
or | 或者 |
in | 包含,相当于多个or(not in不在这个范围中) |
not | not可以取非,主要用在is 或in中 |
like | like称为模糊查询,支持%或下划线匹配 %匹配任意个字符 下划线,一个下划线只匹配一个字符 |
- 案例
-- 创建表
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,'柳岩',25,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
-- 查询年龄大于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 name, english FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=)
SELECT name, english FROM student WHERE english IS NULL;
-- 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
SELECT * FROM student WHERE NOT english IS NULL;
随堂测试:
1.查询工资在1000-3000之间的员工 (3种方式)
2.查询没有工资的员工
3. 模糊查询
-
使用关键字 like
通配符: _ 匹配一个字符 % 匹配0-n个字符
-
案例
-- 查询姓马的有哪些? like SELECT * FROM student WHERE NAME LIKE '马%'; -- 查询姓名第二个字是化的人 SELECT * FROM student WHERE NAME LIKE "_化%"; -- 查询姓名是3个字的人 SELECT * FROM student WHERE NAME LIKE '___'; -- 查询姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%';
随堂测试: 1.员工表中新增多名员工: 小马 ,野马,汗血宝马,斗气化马,种马,马如风,马到成功 2.查询员工表中姓名为两个字的员工 3.查询员工表中以'马'开头的,姓名为两个字的员工 4.查询员工表中以'马'结尾的员工 5.查询员工表中姓名包含'马'的员工