数据库查询(一)

简介: SQL查询教程概览:介绍统计查询(如count(), avg()等,注意空值和distinct的区别)、分组查询(group by和having的应用)、子查询(非关联子查询和比较运算符的使用)及分页查询(limit用于结果限制)。还提及了union、intersect和except操作以及交叉表查询。

一、统计查询

count(属性名),max(属性名),min(属性名):  适用于:数值,字符,日期

avg(属性名),sum(属性名):只用于数值

  • 聚集函数统计时忽略空值
  • 统计时如果希望忽略重复值,则需要在属性前加distinct
  • where中不能使用聚集函数

1.工资的平均值

select avg(salary)

from emp

2.提成的平均值(自动会忽略空值)

select avg(comm_pct)

from emp

3.有多少种提成的值( count:查询属性种有多少个值,不是种,重复值也算)

select count(comm_pct)--错误

from emp


select count(distinct comm_pct)

from emp

4.count(*) : 统计结果有多少行

select count(*) from emp


二、分组查询 :

  • group by 属性名1,属性名2,.......
  • 当group by后有多个属性,表示将查询结果按照属性从左到右的顺序一次分组
  • group by 要写在where之后,order by 之前


1.每个部门的平均工资

select dept_id avg(salary)

from emp

group by dept_id


2.查询2号部门的平均工资

select dept_id avg(salary)

from emp

where dept_id=2;


   select dept_id avg(salary)

   from emp

   where dept_id=2;

如果select子句的属性列表中有聚集函数,则其他属性要么出现在gropy by中要么出现在聚集函数中


3.每个部分每个职位的平均工资

select dept_id,title,avg(salary)

from emp

group by dept_id,title

order by dept_id;


4.查询部门平均工资高于1000的部门及其平均工资

having:用于对分组的筛选,只能跟在group by之后不能单独使用,在分组之后完成筛选

where:用于对元组的筛选


select dept_id,avg(salary)

from emp

where avg(salary)>1500  错误

group by dept_id;



select dept_id,avg(salary)

from emp

group by dept_id

having avg(salary)>1500 ;



完整的select语句顺序写法:

select .....

from...

where

group by

having

order by


三、子查询


1.查询工资最低的员工

select *

from emp

where salary = min(salary) --错误  where 不能使用聚集函数


select *

from emp

where salary =(select min(salary) from emp)


子查询最好不用order by语句

非关联子查询:子查询先于父查询执行,只执行一次


2.查询职位和Molly相同的员工

select *

from emp

where title =(select title from emp where name='Molly')

and name <>'Molly' ×


select *

from emp e1,emp e2

where e1.title=e2.title and e2.name ='Molly' and e1.name<>'Molly'


当有两个Molly时,子查询会报错

=,>,<>=,<=,<>单值比较运算符只能引导返回值为单行的子查询


select *

from emp

where title in(select title from emp where name='Molly')

and name <>'Molly'


select e1.*

from emp e1 inner join emp e2

on e1.title=e2.title

where e2.name='Molly' and e1.name<>'Molly'


2.比2号部门所有员工工资都高的员工

select *

from emp

where salary >(select salary from emp where dept_id=2)   ×


第一种:

select *

from emp

where salary >all(select salary from emp where dept_id=2)


第二种:

select *

from emp

where salary >(select max(salary) from emp where dept_id=2)


3.谁是领导

select *

from emp

where id in select manager_id from emp


4.不是领导

select *

from emp

where id not in (select manager_id from emp) ×


select *

from emp

where id not in (select manager_id

                           from emp where manager_id is not null )


5.部门平均工资比2号部门平均工资高的部门编号和平均工资

select dept_id,avg(salary)

from emp

where avg(salary)>(select avg(salary) from emp where dept_id =2)

group by dept_id   ×


select dept_id,avg(salary)

from emp

group by dept_id

having avg(salary)>(select avg(salary) from emp where dept_id =2)



Union all:保留重复元组

Union:去除结果中重复元组

交:intersect

差:except/minus


分页查询

limit 写在order by之后

limit n,m

n表示从第几个开始取,下标从0开始。n值可以省略,默认表示开始从第0个开始取

m表示取多少个



查询工资最高的前10名:

select *

from emp

order by salary desc

limit 0,10


交叉表查询

派生表查询

相关文章
|
2月前
|
SQL 数据库
LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果
LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果
37 2
|
17天前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
26 6
|
1月前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
30 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
15天前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
27 0
|
1月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
37 2
|
1月前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
23天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
248 1
|
1月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
599 2
|
1月前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
314 1
下一篇
DataWorks