SQL语句——不断更新中。。。

本文详细介绍了SQL的基础操作,包括增删改查,以及更高级的技巧如分页、内连接、三表联查等,同时探讨了存储过程、触发器的使用,适合初学者及进阶学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常规

增:INSERT INTO 表名 SET (b,...)VALUES(@B,...)

删:DELETE  FROM 表 WHERE...

改:Update 表 SET b=@B  WHERE...

查:Select 信息 FROM 表 WHERE...

 

温故知新

MYSQL语句分页——limit

Select * from table limit m,n

//m 记录开始index 从0开始 表示第一条记录
//n 表示取出几条 从m+1条开始

另外一种函数帮助分页:row_number()over()...用start 和end 参数打辅助

 Select row_number()over(order by id desc)as name,* from 表名A
//查出按照降序把id排列(从表A里面) 行序号从0开始列名是name 所有信息

select  *from 上面查到的信息  where name between @star and @end
//上面的表的结果中,想要的start 和end 序号之间的内容


综合一下:
with tempt as 
(select ROW_NUMBER() over(order by id desc)as row,*from news )

select * from tempt where row between @start and @end 

存储过程

内连接:两个表如下,要取出这个教育类下的所有新闻,要对把表进行内连接:

category表 
id name
7教育

 

news表    
idtitlecontentcreateTimecaId
211112019/1/157
222222019/1/167
233332019/1/177
244442019/1/187

 

inner join 按照caId取出新闻
idtitlecontentcrteateTimecaIdname
211112019/1/157教育
222222019/1/167教育
233332019/1/177教育
244442019/1/187教育
-- =============================================
-- Author:		牛腩
-- Create date: 2019年1月4日
-- Description:	根据类别ID取出该类别下的所有新闻
-- =============================================
ALTER PROCEDURE [dbo].[news_SelectByCaId]
@caid int	
AS
BEGIN
	--根据类别ID取出该类别下的所有新闻
	select n.id ,n.title,n.crteateTime, n.content,c.[name] ,n.caId from news n
	--内连接 表名c on n外键=c主键 and 类别id=选择的类别id
	inner join category c on n.caId=c.id and caId=@caid
	--按照时间降序排序
	order by n.crteateTime  desc
END

 三表联查:

内连接,并条件判断

SELECT
  * 
FROM
  tn_phonefic p
  INNER JOIN tn_user_record ur ON ( NOT p.id = ur.phonefic_id )
  INNER JOIN tn_user_set us ON ur.user_id = us.user_id 
WHERE
  ur.user_id = 1 
  AND p.id != ur.phonefic_id 
  AND ur.type = 2
  ORDER BY
  IF( us.is_random =1, RAND( ) ,p.id ) 
LIMIT 3 

判断表的字段不为空

Where 
....
AND (b.word_picture1 is not null or  b.word_picture1 <>'' )
            AND (b.word_picture5 is not null or  b.word_picture5 <>'' )
            AND (b.audio is not null or  b.audio <>'' )
...
//具体如下,两个表联查
 SELECT
          DISTINCT a.user_id,a.word_id,a.word,a.phonefic_id,a.phonefic,a.type,a.status,
          b.audio,
          b.word_picture1,
          b.word_picture5
        FROM
          `tn_user_record` AS a,
          tn_word AS b
        WHERE
          a.word_id = b.id
            AND (b.word_picture1 is not null or  b.word_picture1 <>'' )
            AND (b.word_picture5 is not null or  b.word_picture5 <>'' )
            AND (b.audio is not null or  b.audio <>'' )
            AND a.user_id = '26GnCMN2FwSmn1c7bZmXWe'
            AND a.`status` = 0
            AND a.is_delete = 0
            AND a.type = 1
order by word_id;

 小知识点:

create 和alter

在创建存储过程的时候是create,如果需要修改,在修改之后把它改为alter,就可以找到你修改后的存储过程了。

exec news_SelectByCaId

exec 存储过程名字:表示执行当前存储过程语句,排查存储过程建立过程中的错误

触发器:

需要用到临时表存储

create trigger[trigCategory]
 on category 
 for DELETE
as 
begin 
    --定义一个临时变量
	declare @caId int 
	---在临时表deleted中找到要删除的id
	select @caId = id from deleted
	--删除这个ID类别下的所有评论
	delete comment where newsId in(select news.Id from news where caId =@caId )
	---删除这个ID类别下的所有新闻
	delete news where caId =@caId 
	---删除这个ID类别
	delete category where id =@caId 
end 

小毛驴意识到基础知识的重要性,特意提醒我的主人认真学习,不断更新

其实昨天在分享会上提到的分页limit在我们的数据库自考书上就有,我们早就接触过,只是不记得了,所以要不断颗粒归仓。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

邢美玲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值