首页 > 数据库 >数据库 - 第三次实验

数据库 - 第三次实验

时间:2024-02-29 14:11:06浏览次数:29  
标签:JOIN 第三次 数据库 u1 send u2 实验 WHERE uid

CREATE VIEW user_friend
AS  
SELECT u2.uid, u2.nickname, f1.note, f1.type  
FROM user u1 JOIN friend f1 ON u1.uid = f1.uid1  
             JOIN user u2 ON u2.uid = f1.uid2  
WHERE u1.uid = 1;

运行SELECT * FROM user_friend;结果:

![[Pasted image 20231114172756.png]]

SELECT u2.nickname,moment.content,moment.post_time
FROM user u1 JOIN friend f1 ON u1.uid = f1.uid1  
             JOIN user u2 ON u2.uid = f1.uid2  
			 JOIN moment ON moment.uid = u2.uid
WHERE u1.uid = 1 AND moment.type IN ('公开','仅好友可见')
ORDER BY moment.post_time DESC;

结果:

SELECT gname, content, sent_time  
FROM message JOIN group_send ON message.mid = group_send.mid  
             JOIN groups ON group_send.gid = groups.gid  
             JOIN joingroup ON joingroup.gid = groups.gid  
WHERE joingroup.uid = 1  
ORDER BY sent_time DESC;

结果:

SELECT uid_sender, content, sent_time  
FROM send NATURAL JOIN message
WHERE uid_receiver = 1 AND status = '待发送'  
ORDER BY uid_sender, sent_time DESC;

结果:

SELECT content, uid_sender  
FROM message NATURAL JOIN send  
WHERE content LIKE '%晚安%' AND  
      uid_receiver IN(1,6) AND
	  uid_sender IN(1,6) AND
      status = '已发送';

结果:

对于第四问:

CREATE INDEX idx_send ON send (uid_sender, uid_receiver);

快了不少。

对于第五问,添加索引:

CREATE INDEX idx_send ON send(uid_sender,uid_receiver);

效果立竿见影!

当数据库表中的数据量较大时,查询操作需要扫描整个表,这将导致查询速度变慢。 而通过创建索引,数据库系统可以直接在索引中查找相关数据,而不需要扫描整个表。

我们在(uid_sender, uid_receiver)这样一个列的组合,建立索引,send表经常访问,索引效率效果良好。

在第一问建立视图的基础之上,进行查询

SELECT count(*)
FROM user_friend JOIN joingroup ON user_friend.uid = joingroup.uid
WHERE gid = 1;

结果:

可以用勾股定理计算两个用户间的直线距离:设我们有两个用户,经纬度分别为(longitude1,latitude1)与(longtitude2,latitude2),那么两个用户间距离即为

\[\sqrt{(longtitude1-longtitude2)^2+(latitude1-latitude2)^2} \]

题目好像有些问题,附近的人应该是平方小于100

SELECT u2.nickname, (u1.longitude - u2.longitude)*(u1.longitude - u2.longitude) + (u1.latitude - u2.latitude)*(u1.latitude - u2.latitude) AS distance_square  
FROM user u1 JOIN user u2 ON u1.uid <> u2.uid  
WHERE u1.uid = 1  
GROUP BY u2.nickname, distance_square  
HAVING distance_square < 100;

a) 将用户 0 与 1 之间互相发送过的信息的发送次数减一。

UPDATE message 
SET shared_count = shared_count - 1  
WHERE mid IN (SELECT mid FROM send
              WHERE uid_receiver IN(0,1) AND
			        uid_sender IN(0,1)
);

结果:

b) 删除 shared _ count 等于 0 的所有信息。

DELETE
FROM send
WHERE mid IN(SELECT mid FROM message
             WHERE shared_count = 0
);

DELETE
FROM group_send
WHERE mid IN(SELECT mid FROM message
             WHERE shared_count = 0
);

DELETE
FROM message
WHERE shared_count = 0;

c) 删除用户 0 与 用户 1 之间的信息发送记录。注意这里删除的是发送信息记录,而不是信息本身。

DELETE
FROM send
WHERE uid_receiver IN (0,1) AND uid_sender IN (0,1);

d) 删除用户 0 与用户 1 之间的好友记录 。

DELETE
FROM friend
WHERE uid1 IN (0,1) AND uid2 IN (0,1);

结果:

标签:JOIN,第三次,数据库,u1,send,u2,实验,WHERE,uid
From: https://www.cnblogs.com/XiaoZhenglld/p/18043581

相关文章

  • Oracle 12C数据库从文件系统迁移到ASM
     查看参数文件位置SQL>showparameterspfileNAMETYPEVALUE-----------------------------------------------------------------------------spfilestring/u01/app/oracle/product/12.......
  • 国产数据库兼容性认证再下两城,极狐GitLab 国产适配更进一步
    近日,极狐GitLab与两大国产数据库TDSQL和人大金仓完成兼容性认证。极狐GitLab在国产化适配、国产化生态建设上有了进一步的发展。极狐GitLab团队分别和TDSQL和人大金仓数据库团队做了严格的测试验证,完成了这两大国产数据库和极狐GitLab企业级一体化DevOps平台的兼容性认......
  • FastAPI系列:fastapi定制的数据库操作库sqlmodel
    官网sqlmodel安装#安装sqlmodel会自动安装pydantic和sqlalchemypipinstallsqlmodel使用#步骤1,创建sqlmodel引擎fromsqlmodelimportcreate_engine#driver://用户名:密码@ip/数据库engine=create_engine("mysql+mysqldb://root:123456@localhost/api")#步骤......
  • DM数据库几种主备模式说明
    前言DM数据库的主备集群主要是由搭建数据守护的方式来实现。DM数据守护(DMDataWatch)的实现原理非常简单:将主库(生产库)产生的Redo日志传输到备库,备库接收并重新应用Redo日志,从而实现备库与主库的数据同步。在此基础下,DM通过一些参数和接口的控制可以实现实时主备、读写分离集群......
  • 数据库 Tips
    数据库Tips时间和日期互转数据库当前时间字符串转时间时间转字符串格式dual表MySQLNOW()STR_TO_DATEDATE_FORMAT%Y-%m-%d%H:%i:%s可选OracleSYSTIMESTAMP、SYSDATETO_TIMESTAMP、TO_DATETO_CHARYYYY-MM-DDHH24:MI:SS必须用PostgreSQLCURRENT_......
  • Mybatis 批量更新 PostgreSQL 数据库,返回更新行数
    1.拼接成1条sql语句,可返回修改行数。PostgreSQL的批量更新原生sql:updatepersonsetname=tmp.name,age=tmp.age,addr=tmp.addr,num=tmp.num,update_time=tmp.update_timefrom(values(1,'关羽',43,'成都',1,'2021-03-2617:32:2......
  • 国产化数据库选型
    背景政府型等企业对视频会议产品有国产化方需求,其中包括国产化服务器、国产化操作系统、国产化数据库、国产化软件等,特别是国产化服务器和国产操作系统、国产化数据库,有特别明确。目前我司已选型国产化服务器为:曙光CPU,海光机器,操作系统为:KyLin-Server-V10-SP1。需求分析原私有......
  • 数据库设计规范 - 阿里
    基于阿里数据库设计规范扩展而来设计规范1.【推荐】字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:不是频繁修改的字段。不是varchar超长字段,更不能是text字段。正例:商品类目名称使用频率高,字段长度短,名称基本一成不变,可在相关联的表中冗余存储......
  • DBeaver 配置postgresSQL离线驱动(全)ps:其他数据库同理
    原文地址:https://blog.csdn.net/wulala517/article/details/1305831931.首先在一台可联网的机器上打开db,在这儿获取驱动作为离线驱动包。依次点击数据库-驱动管理器;搜索框输入你需要修改离线驱动的数据库,我是pg库,以下以pg库为例,输入postgres,左键单击postgresSQL,后点击编辑; 2.......
  • 在K8S中,etcd数据库中数据如何更改?
    在Kubernetes(K8s)中,etcd中的数据更改主要发生在以下几个场景中:创建、更新和删除Kubernetes资源对象:当用户在Kubernetes中创建(POST)、更新(PUT)或删除(DELETE)一个资源对象(如Pod、Service、Deployment等)时,KubernetesAPI服务器会将这些更改转换为对etcd的相应操作。API服务器会将更改......