数据库——sql数据查询

在这里插入图片描述

单表查询

-- 查询全部数据
select * from 表名;
-- 查询部分字段
select 字段1[,字段2,...] from 表名;
-- 简单的条件查询
select *|字段1[,字段2,...]  from 表名
where 条件表达式;

where后的条件表达式:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1)去重

-- 当查询的字段有多个时,必须所有的字段完全相同才被认为是重复记录
-- 默认情况下是all
select distinct|all 字段列表 from 表名;

在这里插入图片描述

2)排序

-- 单字段排序,仅按照一个指定的字段进行升序asc或降序desc排序,默认asc
select *|字段列表  from 表名
order by 字段名 [asc|desc];
-- 多字段排序,先按照字段1进行排序,当字段1相等时,再按照字段2进行排序,依次类推下去
select *|字段1[,字段2,...]  from 表名
order by 字段1 [asc|desc] [字段2 [asc|desc],...]
-- 注意:系统将null看作最小的值

3)限量
可以限定记录的数量,也可以限定从哪一条记录开始

限量查询数据

-- 默认偏移量为0,而第一条记录的偏移量为0
select *|字段1[,字段2,...]  from 表名
limit [偏移量,] 记录数;
-- 注意:记录数表示限定的最大记录数量,当大于实际记录数量时,以实际为准

限量更新数据

update 表名 set 字段1=1[,字段2=2,...]
 [where 条件表达式]
 [order by 字段1 [asc|desc] [字段2 [asc|desc],...]] -- 按顺序更新
limit [偏移量,] 记录数;

限量删除数据

delete from 表名
 [where 条件表达式]
 [order by 字段1 [asc|desc] [字段2 [asc|desc],...]] -- 按顺序更新
limit [偏移量,] 记录数;

在这里插入图片描述

4)分组与聚合函数
在这里插入图片描述

select 查询选项列表 from 表名
[where 条件表达式]
group by 字段名1 [order by [asc|desc]] [,字段名2 [order by [asc|desc] ],...]
having 条件表达式;
;
/*
注意:
1.group by 字段名表示按照指定的字段进行分组;
2.查询选项只能是指定的分组字段或者非分组字段的聚合函数后;
3.mysql 默认情况下对分组字段进行升序排序,group by的分组排序是否需要order by(与版本有关) ,最好加上order by
4.多分组统计:按字段1分组后,再按字段2分组,相对于组内再分组,依次类推下去,最后得到一个个小组,每个小组数据进行统计
5.having与where两者的作用对象不同,where子句作用于基表或视图,从中选择满足条件的元组,而having短语作用于组,从中选择满足条件的组。 另外注意where与having的位置,以及where后的条件表达式中不能有聚合函数,而having后的条件表达式中可以有。

*/

在这里插入图片描述
在这里插入图片描述
常用聚合函数

函数名描述
count()返回参数字段的数量,count(字段名),不统计null记录,但是count(*),统计的是符合条件的记录总数,故记录中某字段为null也不影响
sum()返回参数字段的总和
avg()返回参数字段的平均值
max()返回参数字段的最大值
min()返回参数字段的最小值
group_concat()返回参数字段的连接字符串

注意:在聚合函数括号内的参数前加上distinct表示对不重复的记录进行相关操作,缺省为all。

5)别名

select 字段 [as] 别名 from 表名 [as] 表别名

6)数学函数

select 函数;

在这里插入图片描述
单表查询总结

在这里插入图片描述
在这里插入图片描述

多表查询

联合查询UNION

在保证多个select语句的查询字段数相同的情况下,合并多个查询的结果

select ....
union [all|distinct] select...
[union [all|distinct] select...];
/*
all表示保留所有的记录,distinct是默认值可省略,表示去掉重复的记录
若select语句涉及到排序限量等操作,需要用()将整个select语句括起来 
*/

连接查询

在这里插入图片描述
\quad 正确的查询方式是:以两表中相互关联的字段作为查询条件进行查询。

1)内连接
根据匹配条件,返回表1与表2所有匹配的记录

select 查询选项列表 from1
[inner] join2
on 匹配条件;

2)左连接
用于返回左表中的所有记录,以及右表中符合连接条件的记录。当左表的某行记录在右表中没有匹配的记录时,右表中相关记录设为NULL

select 查询选项列表 from1
left [outer] join2
on 匹配条件;

3)右连接
用于返回右表中的所有记录,以及左表中符合连接条件的记录。当右表的某行记录在左表中没有匹配的记录时,左表中相关记录设为NULL

select 查询选项列表 from1
right [outer] join2
on 匹配条件;

4)全连接
其结果是在内连接查询的基础上还显示左右两边互不匹配的数据。写法:左连接查询 UNION 右连接查询

select 查询选项列表 from1 left join2 on 匹配条件
union
select 查询选项列表 from1 right join2 on 匹配条件

嵌套查询

-- 当from后的数据源是子查询时必须为其设置别名
select 字段列表 from (select 语句) as 别名

子查询

在这里插入图片描述

\quad where子查询有带比较运算符,in,exist,all,any关键字的子查询

1)带比较运算符
在这里插入图片描述
在这里插入图片描述
2)带关键词in

where 条件判断 in (select语句);

3)带关键词exists
\quad 当子查询语句返回记录时,exists表达式为true,此时执行前面的查询语句。子查询语句没有返回任何记录时,exists语句为false,不执行前面的查询语句。

where exists(子查询语句); --子查询语句有结果则exists(子查询语句)返回1,否则返回0
where not exists(子查询语句); --与exists相反

在这里插入图片描述

在这里插入图片描述
4)带关键词any,all

where 表达式 比较运算符 all(子查询语句); 
-- 给定的判断条件只有符合子查询结果中的每条记录,结果才返回1,否则返回0
where 表达式 比较运算符 any(子查询语句); 
-- 给定的判断条件只要符合子查询结果中的任一记录,结果返回1,否则返回0

在这里插入图片描述

复制表

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

判断查询

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 数据库定时任务是指在数据库中设置一个自动运行的任务,根据设定的时间间隔定期执行某个操作。当需要对某个字段进行定时更新时,可以通过编写SQL语句并使用定时任务实现自动更新某个字段的功能。 首先,需要创建一个定时任务,可以使用数据库自带的定时任务工具或者操作系统的定时任务功能。在定时任务中,可以指定一个时间间隔,比如每隔一小时执行一次。 然后,在定时任务中编写SQL语句,用于更新要操作的字段。可以使用UPDATE语句来更新某个字段的值。例如,假设要更新一个表中的某个字段,可以使用以下SQL语句: ``` UPDATE 表名 SET 字段名 = 新值 WHERE 条件; ``` 其中,表名是要更新的表的名称,字段名是要更新的字段的名称,新值是要更新的字段的新值,条件是限定更新的条件。 接着,将编写好的SQL语句插入到定时任务中,并设置好定时任务的执行时间间隔。定时任务会在指定的时间间隔内自动执行,根据SQL语句更新相应的字段。 需要注意的是,定时任务更新字段时,需要确保定时任务的执行时间不会影响数据库的正常运行,避免对数据库的性能产生负面影响。 通过以上步骤,就可以实现使用SQL设置定时任务,每隔一段时间自动更新某个字段的功能。定时任务会按照设定的时间间隔自动执行SQL语句,更新对应字段的值,从而实现自动化更新的效果。 ### 回答2: 数据库定时任务可以使用SQL设置每隔一段时间自动更新某个字段。一种常见的方法是使用数据库的定时任务功能,比如MySQL中的事件(Event)或者PostgreSQL中的定时器(Timer)。下面以MySQL事件为例,详细说明如何实现。 首先,我们需要创建一个事件,来执行自动更新操作。可以使用以下SQL语句创建一个名为"update_event"的事件: ```mysql CREATE EVENT update_event ON SCHEDULE EVERY 1 HOUR DO UPDATE 表名 SET 字段名 = 新值 WHERE 条件; ``` 上述SQL语句中,我们创建了一个名为"update_event"的事件,它每隔1小时就会执行一次。在"DO"后的语句中,我们使用"UPDATE"命令来更新指定的表和字段。可以根据需要修改表名、字段名和条件等内容。 接下来,可以使用以下语句启用事件调度器: ```mysql SET GLOBAL event_scheduler = ON; ``` 这样,在启用事件调度器后,事件"update_event"将会按照预定的时间间隔自动执行更新操作。 需要注意的是,具体的实现方式依赖于所使用的数据库管理系统,不同的数据库可能有不同的语法和设定。还要考虑到数据量的大小和性能的影响,以及定时任务的具体需求,选择合适的定时任务方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yun_gao_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值