
本文共 2482 字,大约阅读时间需要 8 分钟。
数据库查询是数据库操作的核心技能之一,主要用于从数据库中获取所需数据。在实际应用中,数据库执行DQL(Data Query Language)语句不会修改数据,而是将结果集返回给客户端。下文将详细介绍数据库查询的基本原理、关键语法和实际应用案例。
1. 基本查询
在数据库中执行查询操作的第一步是使用SELECT
语句。该语句用于定义要 retrieval 的数据 columns,指定要从哪个 table 中查询。
1.1 全选查询
查询所有表字段,可以通过使用*
来表示所有列。
select * from stu;
1.2 特定列查询
如果需要只查询特定的列,可以在查询列表中明确指定这些 column。
select sid, sname, age from stu;
2. 条件查询
在实际应用中,往往需要根据特定条件筛选查询结果。WHERE
子句用于定义这些筛选条件。常用的比较运算符包括>、>=、<、<=、!=、<>、=等
。
2.1 conditions
查询性别为“女”,年龄小于等于50岁的学生。
select * from stu where gender = 'female' and age <= 50;
2.2 OR条件
查询学号为s_1001
或姓名为LiuSD
的学生。
select * from stu where sid = 's_1001' or sname = 'LiuSD';
2.3 IN条件
查询学号为s_1001
、s_1003
或s_1004
的学生。
select * from stu where sid in('s_1001', 's_1003', 's_1004');
2.4 NOT IN条件
查询学号不在s_1001
、s_1003
、s_1004
中的学生。
select * from stu where sid not in('s_1001', 's_1003', 's_1004');
2.5 NULL值查询
查询年龄为空的记录。
select * from stu where age is null;
2.6 范围查询
查询年龄在20岁到40岁之间的学生。
select * from stu where age between 20 and 40;
2.7 非男性查询
查询所有非男性的学生。
select * from stu where gender != 'male';
3. 模糊查询
在实际业务场景中,对于特定字符进行模糊匹配常常是必需的。LIKE
子句用于实现这一功能。使用通配符_
和%
可以对字段进行部分匹配。
3.1 特定字符开头或结尾
查询姓名以“z”开头的学生。
select * from stu where sname like 'z%';
3.2 包含特定字符
查询姓名中包含“a”字符的学生。
select * from stu where sname like '%a%';
4. 字段控制查询
在某些场景下,为了保护敏感信息或限制结果的数据量,可以对查询结果的字段进行限制。
4.1 去重复记录
对于 emp table 中可能存在的重复记录,可以使用DISTINCT
去重。
select distinct sal from emp2;
4.2 计算字段值
查询月薪加上佣金的总和,并处理可能的 Null 值。
select ifnull(sal, 0) + ifnull(comm, 0) as total from emp2;
4.3添加列别名
在结果列中为计算结果字段命名。
select ifnull(sal, 0) + ifnull(comm, 0) as total from emp2;
5. 排序
为了方便数据查看和分析,可以对查询结果进行排序。ORDER BY
子句用于定义排序依据。
5.1 按年龄升序排序
查询所有学生按年龄升序排列。
select * from stu order by age;
5.2 多层排序
查询雇员按月薪降序排列,月薪相同则按员工编号升序排列。
select * from emp2 order by sal desc, empno;
6. 聚合函数
聚合函数是数据处理的重要工具,用于对多个数据进行归类计算。
6.1 COUNT函数
统计表中记录的总数。
select count(*) as cnt from emp2;
6.2 SUM和AVG函数
计算所有雇员月薪和,并计算平均工资。
select sum(sal) from emp2;select avg(sal) from emp2;
6.3 MAX和MIN函数
查询部门最大和最小工资。
select max(sal), min(sal) from emp2;
7. 分组查询
在需要对数据进行分组统计时,可以使用GROUP BY
子句。having
子句用于对分组后的结果进一步筛选。
7.1 分组查询
查询每个部门的工资总和。
select sum(sal), deptno from emp2 group by deptno;
7.2 过滤分组结果
查询工资总和大于9000的部门编号和总工资。
select deptno, sum(sal) as totalSal from emp2 group by deptno having totalSal > 9000;
7.3 多列分组
统计每个部门的男女生人数。
select gradename, gender, count(*) from stu group by gradename, gender;
8. 限制
LIMIT
子句用于限制结果的显示行数或起始位置。
8.1 限定起始行和显示行数
从第3行开始显示接下来的10行数据。
select * from emp2 limit 3, 10;``]通过以上方法,数据库查询可以灵活地满足不同的数据需求。熟练掌握这些查询技巧,可以显著提升工作效率和数据分析能力。
发表评论
最新留言
关于作者
