forked from michaelchen523/allianceDatabase
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AllianceQueries.sql
249 lines (194 loc) · 5.34 KB
/
AllianceQueries.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/*
Bring up category names
*/
SELECT *
FROM Category_Names;
/*
Given ID
Find category name
*/
SELECT Name
FROM Categories
WHERE ID = 1;
/*
1. find resources based on category
1. sorted by rating <- order by and avg
2. show rating, name, and description
Order by rating
implementation:
1) join resourse and categories to filter via category (name join resource)
2) join newly joined table 'resource' and reviews to get avg score
*/
#Housing
SELECT rev.rating, res.name, res.description, res.Address_State AS State,
res.Address_City AS City, res.Address_Zip AS Zip, res.Address_Street AS Street,
res.Address_Number AS Num
FROM (
SELECT *
FROM Resource
NATURAL JOIN (
SELECT ID
FROM Categories
WHERE Name = 'Housing' #put in category name
) categories
) res
NATURAL LEFT JOIN (
SELECT ID, AVG(Rating) AS rating
FROM Reviews
GROUP BY ID
) rev
ORDER BY rev.rating DESC;
/*
search by name
*/
SELECT rev.rating, res.name, res.description, res.Address_State AS State,
res.Address_City AS City, res.Address_Zip AS Zip, res.Address_Street AS Street,
res.Address_Number AS Num
FROM (
SELECT *
FROM Resource
WHERE name = 'Beloved' #insert name here
) res
NATURAL LEFT JOIN (
SELECT ID, AVG(Rating) AS rating
FROM Reviews
GROUP BY ID
) rev
ORDER BY rev.rating DESC;
/*
2. find filtering options based on category
ex: housing
*/
SELECT COLUMN_NAME AS filter_ops
FROM INFORMATION_SCHEMA.COLUMNS
/*
exchange Housing for each table name
*/
WHERE TABLE_NAME = 'Housing'
AND COLUMN_NAME != 'ID';
/*
Acess phone number
*/
SELECT Phone_Number
FROM Phone_Numbers
WHERE ID = 3; #input resource ID
/*
edit every attribute of a resource (including sub cat)
*/
UPDATE Resource
SET Name = '', Address_State = '', Address_City = '', #new info
Address_Zip = 123, Address_Street = '', Address_Number = 123,
Website = '', Non_Citizen = 1, Documentation = 0, Eligibility = '',
Description = ''
WHERE ID = 1; #ID of resource
UPDATE Phone_Numbers
SET Phone_Number = '1234'
WHERE ID = 1;
UPDATE Housing_Type_Multi#category name
SET Housing_Type_Multi = 'Group'#attribute names
WHERE ID = 1; #ID of resource
/*
given resource ID, show every attribute all info
*/
#housing
SELECT *
FROM (
SELECT *
FROM
Housing_Type_Multi
NATURAL LEFT JOIN
Housing_Serve_
Multi
UNION
SELECT *
FROM
Housing_Type_Multi
NATURAL RIGHT JOIN
Housing_Serve_Multi
) type
NATURAL RIGHT JOIN
Housing
NATURAL LEFT JOIN
Phone_Numbers
NATURAL JOIN
Resource
WHERE ID = 1; #INSERT ID HERE
/*
add a resource
*/
/*
3. based on filtering selections, produce resources
ex: housing, gender = female
implementation:
1) filter out within the housing table to find female
2) join filtered housing with resource to get name/ description (name filter)
3) join newly created 'filter' with review to get avg score
*/
SELECT rev.avg_rating AS Rating, res.name AS Name, res.description AS Description, res.Address_State AS State,
res.Address_City AS city, res.Address_Zip AS Zip, res.Address_Street AS Street, res.Address_Number AS Num
FROM (
SELECT *
FROM Resource
NATURAL JOIN (
SELECT ID
FROM Housing
NATURAL LEFT JOIN (
SELECT ID #might need to fix
FROM
Housing_Type_Multi
NATURAL LEFT JOIN
Housing_Serve_Multi
WHERE Housing_Serve_Multi = 'Homeless' AND Housing_Type_Multi = 'Shelter' #insert subcategory filters
UNION
SELECT ID
FROM
Housing_Type_Multi
NATURAL RIGHT JOIN
Housing_Serve_Multi
WHERE Housing_Serve_Multi = 'Homeless' AND Housing_Type_Multi = 'Shelter' #insert subcategory filters
) subCat
WHERE Gender = 'Female' #insert category filters
) category
WHERE Non_Citizen = 0 #insert resource filters
) res
NATURAL LEFT JOIN (
SELECT ID, AVG(Rating) AS avg_rating
FROM Reviews
GROUP BY ID
) rev
ORDER BY rev.avg_rating DESC;
/*
See favorites
Given: username
Pull: name, description, rating address
*/
SELECT rev.avg_rating AS Rating, res.name AS Name, res.description AS Description, res.Address_State AS State,
res.Address_City AS city, res.Address_Zip AS Zip, res.Address_Street AS Street, res.Address_Number AS Num
FROM (
SELECT *
FROM (
SELECT ID
FROM User_Favorites
WHERE Username = 'SonikaF' #insert username here
) favs
NATURAL JOIN Resource
) res
NATURAL LEFT JOIN (
SELECT ID, AVG(Rating) AS avg_rating
FROM Reviews
GROUP BY ID
) rev
ORDER BY rev.avg_rating DESC;
/*
editing a resource
*/
UPDATE Resource
SET Name = 'foobar', Creator_Username = 'SonikaF', Address_State = 'GA', Address_City = 'Atlanta', Address_Zip = 1234, #put data which is to be updated here
Address_Street = 'Peachtree', Address_Number = '5', Website = null, Non_Citizen = 1, Documentation = 0,
Eligibility = 'not you', Description = 'poop'
WHERE ID = 1; #Put ID of resource to edit here
UPDATE Phone_Numbers
SET Phone_Number = '1234'
WHERE ID = 1;
UPDATE Housing
SET