数据库实验2

create table USER_(UID int primary key,
NAME char(14) not null,
SEX char(2),
BYEAR int,
CITY char(20));

 

create table LABEL_(LID int primary key,

LNAME char(20) not null);

create table MBLOG_(BID int primary key,
TITLE char(40)not null,
UID int ,
PYEAR int,
PMONTH int,
PDAY int,
CONT char(400),
foreign key(UID) references USER_(UID)
);


create table B_L(BID int,
LID int,
primary key(BID,LID),
foreign key(BID)references MBLOG_(BID),
foreign key(LID)references LABEL_(LID) );

 

create table FOLLOW(UID int ,
UIDFLED int,
primary key(UID,UIDFLED),
foreign key(UID) references USER_(UID),
foreign key(UIDFLED)references USER_(UID)
);

 

create table FRIENDS(UID int ,
FUID int,
primary key(UID,FUID),
foreign key(UID) references USER_(UID),
foreign key(FUID) references USER_(UID),

);

 

create table SUB(UID int ,
LID int,
primary key(UID,LID),
foreign key(UID) references USER_(UID),
foreign key(LID) references LABEL_(LID),
);

 

create table THUMB(UID int,
BID int,
primary key(UID,BID),
foreign key(UID) references USER_(UID),
foreign key(BID) references MBLOG_(BID),

);

create table TOPDAY(TYEAR int,
TMONTH int,
TDAY int,
BID int,
TNO int,
primary key(TYEAR,TMONTH,TDAY,TNO),
foreign key(BID) references MBLOG_(BID),
);



 往表中插入数据

use WeiBo_DataBase;
go
insert into MBLOG_(BID,TITLE,UID,PYEAR,PMONTH,PDAY,CONT)values(500,'',3,2019,5,5,'cxk');
insert into MBLOG_ values(500,'CXK',42,2019,5,5,'鸡你太美');

delete from MBLOG_ where BID=500;  //把刚刚插入的哪一行给删除了

select * from MBLOG_ where BID=500; 

 

update MBLOG_ set TITLE ='律师函'where BID=500;

 use WeiBo_DataBase;

use WeiBo_DataBase;
go
CREATE TRIGGER tgr_THUMB_insteadOf3
on THUMB
instead of insert
as
declare @UID int,@BID int;
select @UID = UID,@BID =BID FROM inserted X
if(@UID IN (SELECT Y.UID FROM MBLOG_ Y ,THUMB X where Y.BID=X.BID AND Y.UID = X.UID))
begin
    PRINT '博文作者不能点赞自己的博文!'
    PRINT '插入/更新 点赞关系失败!'
    ROLLBACK
end

//创建触发器

//检验触发器

insert into THUMB values(36,3);

 

 

    DROP TRIGGER tgr_THUMB_insteadOf ; //删除触发器

 

Select * from sysobjects where xtype='TR' //显示触发器的具体信息

 

//1,张三

  


先插入一点数据

insert into FOLLOW VALUES (1,2);
insert into FOLLOW VALUES (1,3);
insert into FOLLOW VALUES (1,4);
insert into FOLLOW VALUES (1,17);

insert into FOLLOW VALUES (1,21);
insert into FOLLOW VALUES (1,23);
insert into FOLLOW VALUES (1,44);

update USER_
SET BYEAR=2007
where UID=17;
update USER_
SET BYEAR=2007
where UID=23;

USE WeiBo_DataBase;
GO
select BID,TITLE,NAME from USER_,MBLOG_ x where USER_.UID = x.UID and not exists /* 2 */
    (select * from thumb y where x.BID=y.BID) order by title; 

 

 

USE WeiBo_DataBase;
go
select * from TOPDAY x where x.BID in(
                                    select z.BID from MBLOG_ z
                                    where z.UID in(
                                    select y.UID from USER_ y
                                    where     y.BYEAR>2000 AND y.CITY='武汉'
                                    ));

 

 

USE WeiBo_DataBase;
go
select UID 
from USER_ U
where  NOT EXISTS
(
SELECT *
FROM SUB X
WHERE NOT EXISTS
(
SELECT * 
FROM LABEL_ Y
WHERE U.UID=X.UID AND Y.LID=Y.LID
));

 

 5.

USE WeiBo_DataBase;
go
SELECT UID,BYEAR,CITY 
FROM USER_ X
WHERE  X.BYEAR<1970 OR X.BYEAR>2010;

//一个判定条件

USE WeiBo_DataBase;
go
SELECT UID,BYEAR,CITY
FROM USER_ X
WHERE X.BYEAR NOT BETWEEN 1970 AND 2010 ;

 

6.

USE WeiBo_DataBase; go
select CITY,COUNT(*) from USER_ group by CITY;

 

 7.

USE WeiBo_DataBase;
go
select CITY,BYEAR,COUNT(CITY) num 
FROM USER_
GROUP BY CITY,BYEAR
order by CITY, num desc;

8)查找被点赞数超过10的博文ID号;

USE WeiBo_DataBase;
go
select BID ,COUNT(UID) TIMES
FROM THUMB
GROUP BY BID having COUNT(UID)>10;

 

 9.查找被2000年后出生的用户点赞数超过10的博文ID号;

USE WeiBo_DataBase;
GO
select X.BID ,count(Y.BID)
from MBLOG_ X,THUMB Y,USER_ Z

group by X.BID having Z.BYEAR>2000 AND count(Y.BID)>10 AND Z.UID=X.UID;

10

11

12)查找标题中包含了“最多地铁站”和“_华中科技大学”两个词的博文基本信息;

USE WeiBo_DataBase;
go
select * from MBLOG_
where TITLE like '最多地铁站%'
union
select * from MBLOG_
where TITLE like '华中科技大学';

13 查找所有相互关注的用户对的两个ID号,要求不能使用嵌套查询

USE WeiBo_DataBase;
go
select X.UID,y.UID from FOLLOW X,FOLLOW Y
where  X.UIDFLED = Y.UID and X.UID = Y.UIDFLED and X.UID<Y.UID;

14 查找好友圈包含了5号用户好友圈的用户ID;

use WEIBO;
go
select X.UID 
from FRIENDS X
where X.UID=5 and not exists (
select *
from FRIENDS Y
where not exists (
select * 
from  FRIENDS Z
where X.FUID = Z.FUID and Y.UID = Z.UID
));

 

15)查找2019年4月20日每一篇头条博文的ID号、标题以及该博文的每一个分类ID,要求即使该博文没有任何分类ID也要输出其ID号、标题;

USE WEIBO;
GO
SELECT X.BID,X.TITLE,Y.LID 
FROM MBLOG_ X ,B_L Y
WHERE PYEAR=2019 AND PMONTH = 4 AND PDAY =20 AND X.BID=Y.BID;

 

16)查找至少有3名共同好友的所有用户对的两个ID号。

 

USE WEIBO;
GO
select X.UID,Y.UID,count(*)'共同好友'
FROM FRIENDS X, FRIENDS Y
WHERE X.FUID=Y.FUID AND X.UID<Y.UID
group by X.UID,Y.UID
having count(*)>=3;

 

 

 

17)创建视图:查阅DBMS内部函数,创建一个显示当日热度排名前十的微博信息的视图,其中的属性包括:博文ID、博文标题、发表者ID、发表者姓名、被点赞数。

USE WEIBO;
go
create view IS_DBMS
as 
    select  x.BID,x.TITLE,x.UID,z.NAME,count(a.BID) 被点赞数  from MBLOG_ x,TOPDAY y, USER_ z,THUMB a where x.BID=y.BID and x.uid = z.UID and a.BID = x.bid 
    and y.TDAY = datepart(day,getdate()) and y.TMONTH =datepart(MONTH,getdate()) and y.TYEAR = datepart(YEAR,getdate())  group by  x.BID,x.TITLE,x.UID,z.NAME ;

 

 

use WEIBO;
go
select count(X.BID),count(Z.BID)
from TOPDAY X,USER Y,THUMB Z,MBLOG_ A
where Z.BID = X.BID and A.BID=X.BID and Y.

 

 

 

  

 

 

posted @ 2019-05-14 16:14  Stephen_A  阅读(273)  评论(0编辑  收藏  举报