一、数据库表准备

三个表:(1)QQUser用户表、(2)BaseInfo基本信息表、(3)Relation关系表


二、各表的约束条件

1 QQ密码不得少于6位;
2 在线状态的值必须位0,1,2 0表示在线,1表示离线,2表示隐身
3 用户等级默认值为0
4 性别允许为空值,但如果输入值就必须位0或1 0表示男,1表示女
5 年龄必须在1-100的整数
6 用户关系只能是数字0,1 0表示好友,1表示黑名单人物
三、表间关系

四、查询数据

(1)查询QQ号码为的用户的所有好友信息,包括QQ号码,昵称,年龄
SELECT r.RelationQQID as 好友QQ号,b.NickName as 昵称,b.Age as 年龄
from Relation as r
inner join BaseInfo as b
on b.QQID = r.QQID and r.QQID = 123
where r.RelationStatus = 0

–(2)查询当前在线用户的信息
select b.QQID as QQ号,NickName AS 昵称,Sex as 性别,age as 年龄,Province as 省份,City as 城市
from BaseInfo as b,QQUser as q
where q.OnLine = 0 and q.QQID = b.QQID
或者
select q.QQID AS qq号,b.NickName as 昵称,b.Address as 地址
from QQUser as q
inner join BaseInfo as b
on q.QQID = b.QQID and q.OnLine = 0

–(3)查询武汉市、年龄在-25岁的在线用户的信息。(信息表baseinfo、用户表user)
select q.QQID as QQ号,NickName AS 昵称,Sex as 性别,age as 年龄,Province as 省份,City as 城市
from BaseInfo as b,QQUser as q
where q.QQID = b.QQID and b.City = ‘武汉’ and b.Age between 18 and 25

–(4)查询昵称为’小张’的用户信息
select * from BaseInfo where NickName = ‘小张’

–(5)查询qq号码为的用户好友中每个省份的总人数,人数按大到小的排序。
select b.Province as 省份,COUNT() as 人数
from BaseInfo as b,Relation as r
where b.QQID = 123 and r.RelationQQID = b.QQID
group by b.Province
ORDER BY COUNT(
) DESC

–(6)查询至少有10天未登录QQ账号的用户信息,包括QQ号码,最后一次登录时间,登记,昵称和年龄,并按时间的降序排列。
select q.QQID,q.LastLogTime as 上次登录时间,b.NickName as 昵称 ,b.age as 年龄
FROM QQUser AS q,BaseInfo as b
where q.QQID = b.QQID and datediff(DD,q.LastLogTime,GETDATE())>= 10
order by q.LastLogTime desc

–(7)查询qq号码为123的好友中等级为1级以上的月老级用户信息。
select r.RelationQQID as 好友QQ号,b.NickName as 昵称,q.Level as 等级
from Relation as r
inner join BaseInfo as b
on r.QQID = 123 and r.RelationStatus = 0 and r.QQID = b.QQID
inner join QQUser as q
on r.RelationQQID = q.QQID and q.Level >=1

–(8)查询QQ号码为的好友中隐身的用户信息。
select r.RelationQQID as QQ号,b.NickName as 昵称,b.Age as 年龄
from Relation as r
inner join BaseInfo as b
on r.QQID = 123 and r.RelationStatus = 0 AND b.QQID = r.RelationQQID
inner join QQUser as q
on q.QQID = r.RelationQQID and q.OnLine = 2

–(9)查询好友超过个的用户QQ号码及其好友总数
select QQID as QQ号,COUNT() as 好友数量
from Relation
where RelationStatus = 0
group by QQID
having COUNT(
) >=1

–(10)查询被当作黑名单人物次数排名前的用户
select top 2 RelationQQID,COUNT() as 黑名单次数
from Relation
where RelationStatus = 1
group by RelationQQID
order by COUNT(
) desc

五、修改数据

(1)假设我的QQ号码为,今天我隐身登录(在线,离线,隐身)
update QQUser set OnLine = 2,LastLogTime = GETDATE() where QQID = 123

–(2)假设我的qq号码为,修改我的昵称为"被淹死的鱼",地址为"解放中路号院室"
update BaseInfo set NickName = ‘被淹死的鱼’,Address = ‘解放中路号院室’

– (3)假设我的QQ号为,将我的好友拖进黑名单(好友,黑名单人物)
update Relation set RelationStatus = 1 where QQID = 123 and RelationQQID = 234;

– (4) 为了提高QQ用户聊天的积极性,把等级小于2级的用户等级都提升1个级别。
update QQUser set Level = Level +1 where Level < 2

– (5)管理员将超过天没有登录过的QQ锁定,将等级值设置为-1
update QQUser set Level = -1 where DATEDIFF(DD,LastLogTime,GETDATE())> 30

– (6) 为了奖励用户,将好友数量超过的用户等级提升个级别
update QQUser set Level = Level + 1
where QQID in (select QQID from Relation where RelationStatus = 0
group by QQID having COUNT(*) > 1)

– (7)把QQ号码为234的用户的好友"被淹死的鱼"拖进黑名单
update Relation set RelationStatus = 1
where QQID = 234
and RelationQQID in(select QQID from BaseInfo where NickName = ‘被淹死的鱼’)
and RelationStatus = 0

六、删除数据

(1)把QQ号为123的用户的黑名单中的用户删除。
delete from Relation where QQID = 123 and RelationStatus = 1;

–(2) qq号码为的用户多次在QQ中发布违法信息,造成了很坏的影响,因此管理员将其删除。
– 删除关系表中的信息
delete from Relation where QQID = 345 or RelationQQID = 345;
– 信息表中删除
delete from BaseInfo where QQID = 345
–用户表中删除
delete from QQUser where QQID = 345

– (3)管理员将超过天没有登录过的QQ删除
– 思路先从用户表中查询超过天未登录过的qq号
select QQID from QQUser where DATEDIFF(DD,LastLogTime,GETDATE())>30
–3.1 删除relation表中的数据
delete from Relation
where QQID in(select QQID from QQUser where DATEDIFF(DD,LastLogTime,GETDATE())>30 )
OR RelationQQID IN(select QQID from QQUser where DATEDIFF(DD,LastLogTime,GETDATE())>30 )
----3.2 删除BaseInfo表中的数据
DELETE FROM BaseInfo WHERE QQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DAY,LastLogTime,GETDATE())>=30)
----3.3 删除QQUser表中的数据
DELETE FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=30

SQL server数据库项目案例:QQ数据库管理(QQ用户表,基本信息表和关系表,QQ好友和黑名单人物设置)相关推荐

  1. 如何使用Visual Studio创建SQL Server数据库项目

    目录 背景 介绍 创建新的SQL Server数据库项目 发布以在SQL Server中创建新数据库 结论 背景 数据库在任何应用程序中都扮演着最重要的角色,当表.视图.存储过程的数量增加时,项目管理 ...

  2. 管家婆SQL SERVER数据库修复案例

    管家婆SQL SERVER数据库修复案例 [数据库故障描述] 用户在使用过过程中,由于突然断电,造成数据无法读取.DBCC检测数据库提示以下错误 消息211,级别23,状态51,第1 行 可能发生了架 ...

  3. 【数据库数据恢复】Sql Server数据库数据恢复案例

    数据库数据恢复环境: 5块2T硬盘组建RAID5: 划分LUN供windows服务器使用: Sql Server2008数据库: 存储空间有三个逻辑分区. 数据库故障: 数据库文件丢失,涉及到5个数据 ...

  4. 如何将数据从Excel文件导入SQL Server数据库

    There are many ways to import data from an Excel file to a SQL Server database using: 有多种方法可以使用以下方法将 ...

  5. SQL Server 数据库之SQL Server 数据库的安全设置

    SQL Server 数据库的安全设置 1. 概述 2. 更改登录用户验证方式 3. 创建与删除登录用户 4. 创建与删除数据库用户 5. 设置服务器角色权限 5.1. **查看角色属性** 5.2 ...

  6. python怎么导入sql数据库,##使用python将excel表中数据导入sql server数据库

    如何用python将excel数据导入到postgresql数据库中 把excel表格另存为csv文件 python将exce文件含有多个sheet同时l导入sqlserver数据库 需要使用xlrd ...

  7. Java案例:利用JDBC访问SQL Server数据库

    Java案例:利用JDBC访问SQL Server数据库 1.以sa为登录名连接数据库服务器 2.附加选课数据库Xk,如下图所示: 3.启动Eclipse,创建Java项目TestDB

  8. Java案例:连接SQL Server数据库,显示学生表记录

    Java案例:连接SQL Server数据库,显示学生表记录 演示利用JDBC连接SQL Server数据库,在Java GUI窗口里显示表记录. 一.运行效果 二.实现步骤 1.项目结构图

  9. 【服务器数据恢复】使用碎片拼接方法恢复SQL Server数据库的数据恢复案例

    服务器数据恢复环境: 某公司一台DELL服务器,作为WEB服务器使用,安装的Windows Server操作系统,配置了SQL Server数据库: 采用了Xen Server虚拟化系统: 底层是通过 ...

最新文章

  1. DataGridView设置单元格的提示内容ToolTip详解
  2. Android核心分析 之一分析方法论探讨之设计意图
  3. RESTful设计原则和样例(开发前后台接口)
  4. Python----面试题(二)
  5. 买写真送手机系列 小米9王源限量版预售将在这些小米之家开启
  6. linux下find用法 find -name *.so -exec ll {} \;
  7. squid的sarg安装跟配置,版本2.3.5
  8. eclipse常见问题配置
  9. 技术实力 gw4c20b型2.0t汽油发_自动挡轻客B型房车底盘,大通与依维柯哪家强?...
  10. Axure RP9授权码(亲测有效)
  11. 木瓜移动:到底什么样的跨境SaaS服务商才是卖家更好的选择?
  12. Spring Boot整合Redis---学习09
  13. 软件测试需求分析方法
  14. DNSPOD实现DDNS动态域名解析功能
  15. 三小时学会css(菜鸟教程精华版)【中】
  16. NVDIMM原理与应用之一:基本原理
  17. java web前端哪个城市,Java Web 是前端还是后端
  18. 一张图看懂华为2019年关键业务进展
  19. FBX导入错误 :ImportFBX Errors:
  20. 这几个一键文字转语音的方法你可不能错过

热门文章

  1. Linux 周期性计划任务 crontab
  2. transform的使用方法
  3. linux网络编程 copymemory,在VB6中用CopyMemory拷贝字符串的种种猫腻(一)
  4. 3.4为什么不用FFmpeg命令行来录制
  5. 基于STM32单片机的函数信号发生器原理图PCB
  6. 《北漂的京城巡回礼》
  7. 软件工程 软件交互设计 习题
  8. oracle 定义atp规则,[转载]ATP新积分规则详解
  9. 个人简历中英双语词汇对照资料[推荐收藏]
  10. Vue.js前端部署