sql语句分类,DQL(data query language)数据库查询语言
查询关键字:select
SQL语法
SELECT
字段列表
FROM
表名列表
where
查询条件
GROUP BY
分组字段列表
having
分组后条件列表
ORDER BY
排序字段列表
LINMIT
分页
count,max,min,avg,sum
聚合函数
DQl-基本查询
1,查询多个字段(关键字SELECT)
SELECT 字段1,字段2,字段3,字段4 FROM 表名; SELECT *FROM 表名;
2.设置别名(不是必须的AS可以省略)
SELECT 字段1[AS 别名],字段2[AS 别名], FROM 表名
3.去除重复数据(关键字DISTINCT)
SELECT DISTINCT 字段列表 FROM 表名
实战训练
1.数据准备(创建表和添加数据)
CREATE TABLE emp ( ID INT COMMENT '编号', WORK_NO VARCHAR(10) COMMENT '工号', NAME VARCHAR(10) COMMENT '姓名', GENDER CHAR(1) COMMENT '性别', AGE TINYINT UNSIGNED COMMENT '年龄', ID_CARD CHAR(18) COMMENT '身份证号', WORK_ADDRESS VARCHAR(50) COMMENT '工作地址', ENTRY_DATE DATE COMMENT '入职时间' ) COMMENT '员工表';
INSERT INTO TB_EMPLOYEE (ID, WORK_NO, NAME, GENDER, AGE, ID_CARD, WORK_ADDRESS, ENTRY_DATE) VALUES (1, '1', '柳岩', '女', 20, '123456789012345678', '北京', '2000-01-01'), (2, '2', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01'), (3, '3', '韦一笑', '男', 38, '123456789012345670', '上海', '2005-08-01'), (4, '4', '赵敏', '女', 18, '123456789012345670', '北京', '2009-12-01'), (5, '5', '小昭', '女', 16, '123456789012345678', '上海', '2007-07-01'), (6, '6', '杨逍', '男', 28, '12345678901234567X', '北京', '2006-01-01'), (7, '7', '范瑶', '男', 40, '123456789012345670', '北京', '2005-05-01'), (8, '8', '黛绮丝', '女', 38, '123456789012345670', '天津', '2015-05-01'), (9, '9', '范凉凉', '女', 45, '123456789012345678', '北京', '2010-04-01'), (10, '10', '陈友谅', '男', 53, '123456789012345670', '上海', '2011-01-01'), (11, '11', '张士诚', '男', 55, '123456789012345670', '江苏', '2015-05-01'), (12, '12', '常遇春', '男', 32, '123456789012345670', '北京', '2004-02-01'), (13, '13', '张三丰', '男', 88, '123456789012345678', '江苏', '2020-11-01'), (14, '14', '灭绝', '女', 65, '123456789012345670', '西安', '2019-05-01'), (15, '15', '胡青牛', '男', 70, '12345678901234567X', '西安', '2018-04-01'), (16, '16', '周芷若', '女', 18, NULL, '北京', '2012-06-01');
如果说表之前创建的名字一样那么我们就要删除以前的表或者改个名字
drup table 表名
查询需求
1.查询指定字段,name,workno,age 返回
SELECT name,workno,age from 表名
2.查询所有字段并返回
SELECT *FROM 表名
3查询所有员工的工作地址,起别名
SELECT WORK_ADDRESS '工作地址' FROM tb_employee
4.查询公司员工的上班地址(不要重复)
SELECT DISTINCT WORK_ADDRESS FROM tb_employee
条件查询(WHERE)
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
比较运算符
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
BETWEEN... AND.... 在某个范围之内(含最小值,最大值)
IN(...) 在in之后的列表中的值多选一
LIKE 占位符 模糊匹配(_匹配单个字段,% 匹配任意字符)
IS NULL 是null 逻辑运算符
AND 或 && 并且(多个条件同时成立)
OR 或 || 或者(多个条件任意一个成立)
NOT 或 ! 非,不是
实战训练
1.查询年龄等于88的员工(为了方便观看使用select*平时不建议用)
SELECT * FROM emp where age=88;
2.查询年龄小于20的员工信息
SELECT * FROM emp where age<20;
3.查询年龄小于等于20的员工信息
SELECT * FROM emp where age<=20;
4.查询没有身份证号的员工信息
SELECT * FROM emp where idcard IS null;
5,查询有身份证的员工信息
SELECT * FROM emp where idcard IS NOT null;
6.查询年龄不等于88的员工信息
SELECT * FROM emp where age!=88;
7.查询年龄在15岁(包含)到20岁(包含)的员工信息
SELECT * FROM emp where age>=15 and age<=20; SELECT * FROM emp where age BETWEEN 15 and 20 (between 左边是最小值右边是最大值)
8.查询性别为 女 且年龄小于25岁的员工信息
SELECT * FROM emp where GENDER='女' and age<25;
9.查询年龄等于18 或 20 或 40的员工信息
SELECT * FROM emp where age=18 OR age=20 OR age=40; SELECT * FROM emp where age in(18,20,40);
10.查询姓名为两个字的员工信息
SELECT * FROM emp where name like '__' (下划线_为单个字段,两个字为两个字段所以是两个下划线)
11.查询身份证号最后一位是x的员工
SELECT * FROM emp where idcard like '%X'
聚合函数
1.介绍
将一列数据作为整体,进行纵向计算
2.常见的聚合函数
count 统计数量 avg 平均值 max 最大值 min 最小值 sum 求和
语法
SELECT 聚合函数(字段列表) FROM 表名
注意:null 值不参与所有聚合函数运算
实战训练
1.统计该企业员工数据
SELECT count(*) FROM emp
2.统计该企业员工的平均年龄
SELECT avg(age) FROM emp
3.统计该企业员工的最大年龄
SELECT max(age) FROM emp
4.统计该企业员工的最小年龄
SELECT min(age) FROM emp
5.统计西安地区员工的年龄之和
SELECT sum(age) FROM tb_employee WHERE WORK_ADDRESS='西安'
分组查询(GROUP BY)
语法(括号里面可以不写)
SELECT 字段列表 FROM 表名 [where条件] GROUP BY 分组字段名 [having 分组过滤条件];
where 和having的区别
1.执行时机不同,where在分组前进行条件过滤,不满足where条件则不参与分组,having是在分组后进行过滤
2.判断条件不同,where不能使用聚合函数,而having可以使用聚合函数
实战练习
1.根据性别分组,统计男员工和女员工的数量
SELECT GENDER,count(1) FROM emp GROUP BY GENDER
2.根据性别分组,统计男员工和女员工的平均年龄
SELECT GENDER,AVG(AGE) FROM emp GROUP BY GENDER;
3.查询年龄小于45岁的员工,并根据工作地址分组,获取员工数量大于3的工作地址
SELECT WORKADDRES,count(*) FROM emp where age<45 GROUP BY WORKADDRES HAVING count(*)>=3
注意事项
1.执行顺序:where>聚合函数>having
2.分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段将毫无意义
排序查询(ORDER BY)
语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式
2.排序方式
ASC :升序(默认) Desc :降序
注意:如果是多字段进行排序,当第一个字段值相同时,第二个字段才会进行排序
实战训练
1.根据年龄对公司员工进行升序排序
SELECT * FROM emp order by age asc
2.根据入职时间,对员工进行降序排序
SELECT * FROM emp order by entrydata desc
3.根据年龄对公司的员工进行升序排序,年龄相同,在安装入职时间进行降序排序
SELECT * FROM emp order by age,entrydata desc
分页查询(LIMIT)
语法
SELECT 字段列表 FROM 表名 limit 起始索引,查询记录数;
注意:
1.起始索引从0开始,起始索引=(查询页码-1)*每页查询记录数
2.分页查询是数据库方言,根据数据库不同,分页查询关键字不一样,MySQL是LIMIT
3.如果查询是从第一页数据开始,起始索引可以不写,直接简写 limit 10;
实战练习
1.查询第一页的员工数据,每页显示10条数据
SELECT*FROM emp limit 10;
2.查询第二页的员工数据,每页显示10条数据
SELECT*FROM emp limit 10,10;
综合实战
1.查询年龄为22,21,22,23岁的女性员工信息
SELECT *FROM emp WHERE GENDER='女' AND age In(20,21,22,23);
2.查询性别为男,并且年龄在20-30岁之间以内的姓名为三个字的员工
SELECT *FROM tb_employee WHERE GENDER='男' AND age BETWEEN 20 and 30 and name LIKE '___';
3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
SELECT GENDER,count(*) FROM tb_employee WHERE AGE<60 GROUP BY GENDER;
4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按照年龄进行升序排序,如果年龄相同按照入职时间进行降序排序
SELECT NAME,AGE,ENTRY_DATE FROM tb_employee WHERE AGE<=35 ORDER BY age,ENTRY_DATE desc;
5.查询性别为男,且年龄在20-40岁之间(包含)以内的5个员工信息,对查询的结果按照年龄升序排序,年龄相同按照入职时间进行升序排序
SELECT *FROM tb_employee WHERE GENDER='男' AND AGE BETWEEN 19 and 40 ORDER BY AGE,ENTRY_DATE DESC limit 5
@第七片海