Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.60 KB | None | 0 0
  1. /*
  2. Am ales sa modelez o baza de date pentru o retea de socializare
  3. Baza de date va contine 5 tabele:
  4. users - pentru datele utilizatorilor
  5. following - pentru a retine informatii utilizatorii ce urmaresc activitatea altor utilizatori
  6. photos - pentru a retine informatii despre fotografiile incarcate de utilizatori
  7. comments - pentru a retine comentariile facute de catre utilizatori pentru anumite fotografii incarcate
  8. messages - pentru a retine mesajele scrise de utilizatori
  9.  
  10. */
  11.  
  12. --create database VSilviu_SocialNetwork;
  13. use VSilviu_SocialNetwork;
  14.  
  15. --Tabelul "user" va contine date despre fiecare utilizator
  16. CREATE TABLE users(
  17. id int PRIMARY KEY IDENTITY, --id-ul unic al utilizatorului
  18. name varchar(30) NOT NULL, --numele utilizatorului maxim 30 de caractere
  19. pass varchar(30) NOT NULL, --parola utilizatorului maxim 30 de caractere
  20. dateOfBirth date, -- data de nastere
  21. );
  22.  
  23. ------
  24. CREATE TABLE following(
  25. id int PRIMARY KEY IDENTITY, --id-ul unic pentru fiecare urmarie
  26. followerId int, --id-ul utilizatorului urmaritor
  27. followedId int, --id-ul utilizatorului urmarit
  28. );
  29.  
  30. --Tabelul "messages" contine date despre mesajele utilizatorilor
  31. CREATE TABLE messages(
  32. id int PRIMARY KEY IDENTITY, --id-ul unic pentru fiecare mesaj
  33. userId int, --id-ul utilizatorului ce a scris mesajul
  34. content varchar(1000) -- continutul mesajului, maxim 1000 de caractere
  35. );
  36.  
  37. --Tabelul "photos" contine date despre fotografiile incarcate de utilizator
  38. CREATE TABLE photos(
  39. id int PRIMARY KEY IDENTITY, -- id-ul unic al fiecare fotografii
  40. userId int NOT NULL, -- id-ul utilizatorului ce a incarcat fotografia
  41. fileName varchar(300) NOT NULL, --numele fisierului corespunzator fotografiei
  42. fileSize int -- dimensiunea fisierului
  43. );
  44.  
  45. --Tabelul "comments" contine date despre comentariile adaugate de utilizatori pentru fotgrafiile incarcate
  46. CREATE TABLE comments(
  47. id int PRIMARY KEY IDENTITY, -- id-ul unic al fiecarui comentariu
  48. userId int, -- id-ul utilizatorului ce a comentat la fotografie
  49. content varchar(500), --continutul comentariului, maxim 500 de carcatere
  50. photoId int -- id-ul fotografiei ce contine comentariul
  51. );
  52.  
  53.  
  54. --Inseare date in tabelul users
  55. INSERT INTO users VALUES('Silviu0', 'myPass', '19950611');
  56. INSERT INTO users VALUES('Andrei0', 'myPass', '19950721');
  57. INSERT INTO users VALUES('Cosmin', 'pass123', '19941112');
  58.  
  59. --Inserare date in tabelul following
  60. INSERT INTO following VALUES(1,2); -- utilizatorul cu id-ul 1 il urmareste pe utilizatorul cu id-ul 2
  61. INSERT INTO following VALUES(1,3); -- utilizatorul cu id-ul 1 il urmareste pe utilizatorul cu id-ul 3
  62. INSERT INTO following VALUES(2,3); -- utilizatorul cu id-ul 1 il urmareste pe utilizatorul cu id-ul 3
  63.  
  64. --Inserare date in tabelul "messages"
  65. INSERT INTO messages VALUES(1,'Salutare prieteni');
  66. INSERT INTO messages VALUES(1,'HELLO');
  67. INSERT INTO messages VALUES(2,'HELLO WORLD');
  68.  
  69. --Inserare date in tabelul "photos"
  70. INSERT INTO photos VALUES(2,'myPic.jpg',300);
  71. INSERT INTO photos VALUES(2,'myPic2.jpg',650);
  72. INSERT INTO photos VALUES(2,'myPic2.jpg',650);
  73.  
  74. --Inseare date in tabelul "comments"
  75. INSERT into comments VALUES(1,'Imi place foarte mult fotografia', 1);
  76. INSERT into comments VALUES(1,'As vrea sa vad mai multe fotografii cu tine', 1);
  77. INSERT into comments VALUES(1,'Felicitari', 2);
  78.  
  79. -- Selectarea tutror utilizatorilor care sunt nascuti dupa 1 ianuarie 1995
  80. SELECT * FROM users WHERE dateOfBirth > '19950101';
  81.  
  82. -- Selecteaza numarul urmaririlor
  83. SELECT COUNT(id) FROM following ;
  84.  
  85. -- Selectarea primelor 5 mesaje in ordine alfabetica crescatoare
  86. SELECT TOP(5) * FROM messages ORDER BY content ASC;
  87.  
  88. -- Selectarea dimensiunii totale a fotografiilor incarcate de utilizatorul cu id = 2
  89. SELECT SUM(fileSize) FROM photos WHERE userId=2;
  90.  
  91. -- Selectarea utilizatorilor care au incarcat fotografii cu dimensiuni mai mari de 500
  92. SELECT users.id, users.name, photos.fileName, photos.fileSize FROM users INNER JOIN photos ON users.id = photos.userId WHERE photos.fileSize > 500; -- Selectarea utilizatorilor care au incarcat fotografii cu dimensiuni mai mari de 500
  93.  
  94. -- Selectarea numarului utilizatorilor ce au comentat la fotografia cu id-ul 1
  95. SELECT COUNT(DISTINCT userId) FROM comments WHERE userId='1';
  96.  
  97.  
  98. --########################################## TEMA 2 ################################################################33
  99.  
  100. ALTER TABLE comments ADD CONSTRAINT fk_userId FOREIGN KEY (userId) REFERENCES users(id);
  101. ALTER TABLE following ADD CONSTRAINT fk_followerId FOREIGN KEY (followerId) REFERENCES users(id);
  102. ALTER TABLE following ADD CONSTRAINT fk_followedId FOREIGN KEY(followedId) REFERENCES users(id);
  103. ALTER TABLE photos ADD CONSTRaINT fk_photos_userId FOREIGN KEY(userId) REFERENCES users(id);
  104. ALTER TABLE photos ADD date date; -- adaugarea coloeanei "date" care va retine data cand a fost incarcata o fotografie
  105.  
  106. INSERT INTO comments VALUES(3,'Frumoasa fotografie',1);
  107. SELECT * FROM comments;
  108. SELECT * FROM photos;
  109. SELECT * FROM following;
  110. SELECT COUNT(id) FROM comments GROUP BY userId;
  111. UPDATE photos SET date='20160811' WHERE id=1;
  112. UPDATE photos SET date='20160621' WHERE id=2;
  113. UPDATE photos SET userId=1 WHERE id=3;
  114.  
  115. --Selectarea fotografiilor incarcate de utilizatorul cu id-ul 2 in ordine crescatoare a datei la care au fost adaugate
  116. SELECT * FROM photos WHERE userId = 2 ORDER BY date;
  117.  
  118. --Selectarea tuturor fotografiilor care au numele fisierului incepand cu "my"
  119. SELECT * FROM photos WHERE fileName LIKE 'MY%';
  120.  
  121. --Selectarea tuturor fotografiilor cu dimensiuni cuprinse intre 400 si 700
  122. SELECT * FROM photos WHERE fileSize BETWEEN 400 AND 700;
  123.  
  124. --Selectarea utilizatorilor grupati dupa numarul de urmaritori ordonati crescator dupa numarul de urmaritori
  125. SELECT followedId, COUNT(followedId) as number_of_followers FROM following GROUP BY followedId ORDER BY number_of_followers;
  126.  
  127. --Selectarea utilizatorilor care au incarcat fotografii cu dimensiuni egale cu cea mai mare dimensiune existenta
  128. SELECT users.id, users.name FROM users INNER JOIN photos ON users.id= photos.userId WHERE photos.fileSize = (SELECT MAX(fileSize) from photos);
  129.  
  130. --Selectarea tuturor utilizatorilor urmariti de utilizatorul cu id-ul 2
  131. SELECT users.id, users.name FROM users INNER JOIN following ON users.id = following.followedId WHERE followerId = 2;
  132.  
  133. --Selectarea tuturor utilizatorilor ce il urmaresc pe utilizatorul cu id-ul 3
  134. SELECT users.id, users.name FROM users INNER JOIN following ON users.id = following.followerId WHERE followedId = 3;
  135.  
  136. --Selectarea tuturor utilizatorilor ce au comentat la fotografia cu id-ul 1
  137. SELECT users.id, users.name FROM users INNER JOIN comments ON users.id = comments.userId WHERE comments.photoId = 1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement