Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 11.91 KB | None | 0 0
  1. 1.  Utworzyć trzy tabele:
  2. --Zadanie 1a
  3. CREATE TABLE dom(
  4. id_domu NUMERIC(5) PRIMARY KEY,
  5. miasto VARCHAR(40) NOT NULL,
  6. ulica VARCHAR(60) NOT NULL,
  7. metraz NUMERIC(5,2) NOT NULL,
  8. cena_proponowana NUMERIC (9,2));
  9.  
  10.  
  11.  
  12. --Zadanie 1b
  13. CREATE TABLE klient(
  14. id_klienta NUMERIC (5) PRIMARY KEY,
  15. imie VARCHAR(16) NOT NULL,
  16. nazwisko VARCHAR(40) NOT NULL,
  17. miasto VARCHAR(40) NULL,
  18. ulica VARCHAR(60) NULL);
  19.  
  20.  
  21. --zadanie 1c
  22. CREATE TABLE transakcja (
  23. --identity(1,1) to autonumeracja od 1 co 1
  24. id_transakcji NUMERIC(5) IDENTITY(1,1) PRIMARY KEY,
  25. cena_uzyskana NUMERIC (9,2) NOT NULL,
  26. data_transakcji DATE NOT NULL,
  27. id_klienta_fk NUMERIC(5) FOREIGN KEY (id_klienta_fk)
  28. REFERENCES klient(id_klienta),
  29. id_domu_fk NUMERIC(5) FOREIGN KEY (id_domu_fK)
  30. REFERENCES dom(id_domu));
  31.  
  32. --zadanie 2. wypelnic tabele po 5 wierszy
  33. INSERT INTO dom VALUES
  34. (1,'Sopot','Armii Krajowej 1',90.1,1200000),
  35. (2,'Gdańsk','Grunwaldzka 10',17,200000),
  36. (3,'Gdynia','Morska 13',70.2,NULL),
  37. (4,'Warszawa','Marszałkowska 8',30.5,1000000),
  38. (5,'Lądek Zdrój','Słowackiego 10',135.92,50000);
  39.  
  40. INSERT INTO klient VALUES
  41. (1,'Jan','Nowak','Gdynia','Zwycięstwa 4'),
  42. (2,'Marcin','Lewandowski','Radom','Kolejowa 1'),
  43. (3,'Anna','Kwiatkowska','Łódź','Dworcowa 3'),
  44. (4,'Piotr','Wiśniewski','Londyn','Victoria Street 5'),
  45. (5,'Katarzyna','Ostrowska','Katowice','Górnicza 8');
  46.  
  47. INSERT INTO transakcja
  48. (id_klienta_fk, id_domu_fk, cena_uzyskana, data_transakcji)
  49. VALUES
  50. (1,1,1100000, getdate()),
  51. (1,2,180000, getdate()),
  52. (2,3,300000,'2017-10-02'),
  53. (3,4,900000,'2017-08-25'),
  54. (3,5,110000,'2017-03-12');
  55.  
  56. SELECT COUNT(*) FROM dom;
  57. SELECT COUNT(*) FROM klient;
  58. SELECT COUNT(*) FROM transakcja;
  59.  
  60. --3.    Wyświetlić wszystkie domy.
  61. SELECT *FROM dom;
  62.  
  63. --4.    Wyświetlić imiona i nazwiska klientów w porządku alfabetycznym rosnącym według nazwy miasta.
  64.  
  65. SELECT imie,nazwisko,miasto FROM klient
  66. ORDER BY miasto;
  67.  
  68. --5.    Wyświetlić ulice i miasta dla domów  w porządku alfabetycznym malejącym według metrażu.
  69. SELECT ulica, miasto,metraz FROM dom
  70. ORDER BY metraz DESC;
  71.  
  72. --6.    Wyświetlić wszystkie domy o metrażu mniejszym niż 200 metrów.
  73. SELECT *FROM dom WHERE metraz<100;
  74.  
  75. --7.    Wyświetlić wszystkie transakcje jakie miały miejsce, wyświetlając wszystkie dane o klientach, domach i transakcjach bez wartości kluczy obcych i głównych.
  76. SELECT k.imie, k.nazwisko,k.miasto,k.ulica,
  77. d.miasto,d.ulica,d.metraz,d.cena_proponowana,
  78. t.cena_uzyskana,t.data_transakcji
  79. FROM klient k, dom d, transakcja t
  80. WHERE t.id_klienta_fk=k.id_klienta
  81. AND t.id_domu_fk=d.id_domu;
  82. -- !! POWYŻSZE TO ILOCZYN KARTEZJAŃSKI !! --
  83.  
  84. --8.    Wyświetlić miasta, nazwiska oraz imiona klientów, sortując według miasta malejąco i według nazwiska rosnąco oraz imienia malejąco.
  85. SELECT miasto AS 'Miejscowośc',
  86. nazwisko AS 'Nazwisko Klienta', imie AS 'Imię Klienta' , nazwisko + ' ' + imie AS 'Nazwisko i imię'
  87. FROM klient
  88. ORDER BY miasto DESC, nazwisko, imie DESC;
  89.  
  90. --9. Wyświetlić wszystkich klientów, którzy mieszkają w Gdyni.
  91. SELECT * FROM klient WHERE miasto = 'Gdynia'
  92.  
  93. --10. Wyświetlić cenę proponowaną wszystkich domów znajdujących się w Gdańsku.
  94. SELECT cena_proponowana, miasto
  95. FROM dom
  96. WHERE miasto = 'gdańsk'
  97.  
  98. --11. Wyswietlić ceny proponowane domów, które znajdują się na ulicach Grunwaldzkiej i Toruńskiej w Gdańsku.
  99. SELECT cena_proponowana, miasto, ulica
  100. FROM dom
  101. WHERE (ulica LIKE 'Grunwaldzka%' OR ulica LIKE 'Toruńska%')
  102. AND miasto ='Gdańsk'
  103.  
  104. --12. Wyświetlić ceny proponowane wszystkich domów w miastach Gdańsk i Gdynia, w porządku malejącym według ceny proponowanej.
  105. SELECT cena_proponowana, miasto
  106. FROM dom
  107. --where miasto='Gdańsk' or miasto='Gdynia'
  108. WHERE miasto IN('Gdańsk','Gdynia')
  109. ORDER BY cena_proponowana DESC;
  110.  
  111. --13. Wyświetlić wszystkie miasta w których znajdują się domy dostępne w sprzedaży, nie duplikując nazw miast.
  112. SELECT DISTINCT miasto
  113. FROM dom
  114. WHERE id_domu NOT IN (SELECT id_domu_fk FROM transakcja);
  115.  
  116. INSERT INTO dom VALUES
  117. (7,'Wejherowo','Pomorska',30,160000)
  118.  
  119. --14. Wyświetlić wszystkie transakcje domów, których cena uzyskana kształtuje się w zakresie pomiędzy 200000 a 500000 złotych.
  120. SELECT * FROM transakcja
  121. WHERE cena_uzyskana BETWEEN 200000 AND 500000
  122.  
  123. --15. Wyświetlić wszystkie transakcje dla których identyfikator domu jest mniejszy niż 15.
  124. SELECT * FROM transakcja
  125. WHERE id_domu_fk<15;
  126.  
  127. --16. Wyświetlić wszystkie transakcje dla których identyfikator domu jest równy 4, 13 lub 19.
  128. SELECT * FROM transakcja
  129. WHERE id_domu_fk IN(4,13,19);
  130.  
  131. --17. Wyświetlić wszystkie domy dla których nie podano ceny proponowanej.
  132. SELECT * FROM dom
  133. WHERE cena_proponowana IS NULL;
  134.  
  135. --18. Wyświetlić wszystkie domy dla identyfikatora powyżej 2, których nazwa ulicy zawiera literę w.
  136. SELECT * FROM dom
  137. WHERE id_domu>2 AND ulica LIKE '%w%';
  138.  
  139. --19. Wyświetlić nazwiska wszystkich osób, które dokonały transakcji zakupu domu.
  140. SELECT nazwisko FROM klient
  141. WHERE id_klienta IN (SELECT id_klienta_fk FROM transakcja)
  142.  
  143. --20. Zakładając dodatkowy podatek na zakup nieruchomości w wysokości 15% wyświetlić listę proponowanych cen powiększoną o tę wartość.
  144. SELECT *, cena_proponowana*1.15 AS 'cena po podatku' FROM dom
  145.  
  146. --21. Rozbudować poprzednie zapytanie wyświetlając trzy kolumny – cena bez podatku, cena z podatkiem, wartość podatku.
  147. SELECT cena_proponowana,cena_proponowana*1.15 AS 'cena po podatku', cena_proponowana*0.15 AS 'wartosc podatku' FROM dom
  148.  
  149. --22. Obliczyć średnią cenę proponowaną metra kwadratowego domu.
  150. SELECT CAST(round(avg(cena_proponowana/metraz),2)AS money) AS 'srednia cena m2' FROM dom
  151.  
  152. --23. Wyświetlić tylko te transakcje, które miały miejsce w 2017 roku, podając nazwę miasta, imię i nazwisko klienta oraz cenę proponowaną i uzyskaną.
  153. SELECT k.imie, k.nazwisko, d.miasto, d.cena_proponowana, t.cena_uzyskana, t.data_transakcji
  154. FROM dom d, klient k, transakcja t
  155. WHERE d.id_domu=t.id_domu_fk AND k.id_klienta=t.id_klienta_fk AND YEAR(t.data_transakcji)=2017
  156.  
  157. --24. Zakładając, że domy poniżej 50 metrów będą traktowane jako dwupokojowe, do 100 metrów trzypokojowe a powyżej czteropokojowe, dodać kolumnę liczba pokoi, która obok pełnych informacji o domu poda jego wielkość w pokojach (odpowiednio dwupokojowy, trzypokojowy, czteropokojowy).
  158. SELECT *,
  159. CASE
  160. WHEN metraz<50 THEN 'dwupokojowe'
  161. WHEN metraz<100 THEN 'trzypokojowe'
  162. ELSE 'czteropokojowe'
  163. END AS 'Liczba pokoi'
  164. FROM dom;
  165.  
  166. --25. Wyświetlić wszystkie transakcje sprzedaży domów, które miały miejsce poza Trójmiastem.
  167. SELECT * FROM transakcja t, dom d
  168. WHERE d.id_domu=t.id_domu_fk
  169. AND d.miasto NOT IN ('Gdańsk','Gdynia','Sopot')
  170.  
  171. --26. Wyświetlić w dwóch kolumnach – w pierwszej identyfikatory oraz w drugiej kolumnie imiona i nazwiska klientów.
  172. SELECT id_klienta AS 'Identyfikator', imie+ ' ' + nazwisko AS 'Imię i Nazwisko'
  173. FROM klient
  174.  
  175. --27. Wyświetlić identyfikatory wszystkich niesprzedanych domów.
  176. SELECT id_domu FROM dom d
  177. WHERE id_domu NOT IN (SELECT id_domu_fk FROM transakcja)
  178.  
  179. /*insert into transakcja values
  180. (380000,getdate(),6,6)
  181. select * from dom where id_domu not in (select id_domu_fk from transakcja)
  182. select * from transakcja*/
  183.  
  184. --28. Wyświetlić transakcje klientów, których nazwiska rozpoczynają się na literę A, B, C, D, E, F lub G.
  185. --Zadanie 28. SOLUTION ONE
  186. SELECT * FROM transakcja t, klient k
  187. WHERE t.id_klienta_fk=k.id_klienta AND
  188. (nazwisko LIKE 'A%'
  189. OR nazwisko LIKE 'B%'
  190. OR nazwisko LIKE 'C%'
  191. OR nazwisko LIKE 'D%'
  192. OR nazwisko LIKE 'E%'
  193. OR nazwisko LIKE 'F%'
  194. OR nazwisko LIKE 'G%'
  195. )
  196.  
  197. --ZADANIE 28 SOLUTION TWO
  198. SELECT * FROM transakcja t, klient k
  199. WHERE t.id_klienta_fk=id_klienta AND LEFT(nazwisko,1) BETWEEN 'A' AND 'G'
  200.  
  201. --29. Wyświetlić w kolumnie o nazwie wartość różnicę w postaci wartości bezwzględnej, pomiędzy ceną proponowaną a uzyskaną, dodając kolumny zawierające nazwy miast domów, ich identyfikatory oraz ulice.
  202. SELECT d.miasto,d.id_domu, d.ulica, abs(d.cena_proponowana-t.cena_uzyskana) AS 'Wartość' FROM transakcja t, dom d
  203. WHERE d.id_domu=t.id_domu_fk
  204.  
  205. --ZADANIE 30
  206. SELECT * FROM transakcja t, dom d
  207. WHERE d.id_domu=t.id_domu_fk AND
  208. cena_uzyskana-cena_proponowana>0
  209.  
  210. --ZADANIE 31
  211. SELECT data_transakcji AS 'Data transakcji', CAST(getdate() AS DATE) AS 'Dzisiaj' , datediff(MM,data_transakcji,getdate()) AS 'Różnica w miesiącach' FROM transakcja
  212.  
  213. --ZADATE 32
  214. SELECT COUNT(id_transakcji) AS 'Liczba transakcji' FROM transakcja
  215.  
  216. --ZADANIE 33
  217. SELECT CAST(cena_proponowana AS VARCHAR) AS 'Wartość' FROM dom
  218.  
  219. --ZADANIE 34
  220. SELECT SUM(cena_uzyskana) AS 'Suma transakcji' FROM transakcja
  221.  
  222. --ZADANIE 35
  223. SELECT MIN(cena_uzyskana) AS 'Cena minimalna' FROM transakcja
  224.  
  225. --ZADANIE 36
  226. SELECT MAX(cena_uzyskana) AS 'Cena maksymalna' FROM transakcja
  227.  
  228. --ZADANIE 37
  229. SELECT miasto, ulica, CAST(round(MAX(t.cena_uzyskana/d.metraz),2) AS money) AS 'Cena maksymalna m2' FROM transakcja t, dom d
  230. WHERE d.id_domu=t.id_domu_fk
  231. GROUP BY miasto,ulica
  232.  
  233. --ZADANIE 38
  234. SELECT miasto,  CAST(round(avg(cena_proponowana),2)AS money) FROM dom
  235. GROUP BY miasto
  236.  
  237. --ZADANIE 39
  238. SELECT datename(dy,data_transakcji) FROM transakcja
  239.  
  240. --ZADANIE 40
  241.  
  242. SELECT datename(DW,data_transakcji) AS 'dzien tygodnia'
  243. INTO #dzien_tygodnia
  244. FROM transakcja
  245. SELECT * FROM #dzien_tygodnia
  246.  
  247. --ZADANIE 41
  248. SELECT [Dzien tygodnia], COUNT(*) AS 'liczba transakcji'
  249. FROM #dzien_tygodnia
  250. GROUP BY [dzien tygodnia];
  251.  
  252. --ZADANIE 42
  253. SELECT k.id_klienta, SUM(t.cena_uzyskana) AS 'cena sum uzyskanych'
  254. FROM klient k,transakcja t
  255. WHERE k.id_klienta=t.id_klienta_fk
  256. GROUP BY k.id_klienta
  257.  
  258. --ZADANIE 43
  259. SELECT miasto,
  260. round(AVG(cena_uzyskana/metraz),5) AS 'Średnia'
  261. FROM transakcja, dom
  262. GROUP BY miasto
  263. --ZADANIE 43
  264. SELECT d1.miasto,
  265. round(AVG(d1.cena_proponowana/d1.metraz),-4) AS 'Średnia',
  266. d2.miasto,
  267. round(AVG(d2.cena_proponowana/d2.metraz),-4) AS 'Średnia'
  268. FROM dom d1, dom d2
  269. GROUP BY d1.miasto, d2.miasto
  270. HAVING round(AVG(d1.cena_proponowana/d1.metraz),-4) <> round(AVG(d2.cena_proponowana/d2.metraz),-4) AND d1.miasto<d2.miasto
  271.  
  272. --ZADANIE 44
  273.  
  274. SELECT miasto, nazwisko
  275. FROM klient
  276. WHERE miasto LIKE 'Gd%';
  277.  
  278. --ZADANIE 45
  279. SELECT nazwisko, data_transakcji, metraz
  280. FROM klient LEFT JOIN transakcja ON klient.id_klienta=transakcja.id_klienta_fk
  281. LEFT JOIN dom ON transakcja.id_domu_fk=dom.id_domu
  282.  
  283. SELECT nazwisko, data_transakcji, metraz
  284. FROM klient RIGHT JOIN transakcja ON klient.id_klienta=transakcja.id_klienta_fk
  285. LEFT JOIN dom ON transakcja.id_domu_fk=dom.id_domu
  286.  
  287. SELECT nazwisko, data_transakcji, metraz
  288. FROM klient JOIN transakcja ON klient.id_klienta=transakcja.id_klienta_fk
  289. LEFT JOIN dom ON transakcja.id_domu_fk=dom.id_domu
  290.  
  291. --ZADANIE 46 v1
  292. SELECT DISTINCT d1.miasto, d2.miasto
  293. FROM dom d1, dom d2
  294. WHERE LEFT(d1.miasto,2)=LEFT(d2.miasto,2)
  295. AND d1.miasto<d2.miasto
  296.  
  297. --ZADANIE 46 v2
  298. SELECT DISTINCT d1.miasto, d2.miasto
  299. FROM dom d1, dom d2
  300. WHERE SUBSTRING(d1.miasto,1,2)=SUBSTRING(d2.miasto,1,2)
  301. AND d1.miasto<d2.miasto
  302.  
  303.  
  304. --ZADANIE 47
  305. SELECT * FROM dom
  306. WHERE metraz> ALL
  307. (SELECT metraz FROM dom WHERE miasto = 'Sopot' );
  308.  
  309. --ZADANIE 48
  310. SELECT d.*, k.nazwisko
  311. FROM dom d, klient k, transakcja t
  312. WHERE k.id_klienta=t.id_klienta_fk
  313. AND d.id_domu=t.id_domu_fk
  314. AND k.id_klienta IN
  315. (SELECT id_klienta FROM dom d, klient k, transakcja t
  316. WHERE k.id_klienta=t.id_klienta_fk AND d.id_domu=t.id_domu_fk
  317. GROUP BY id_klienta
  318. HAVING COUNT(*)>=2)
  319.  
  320. --ZADANIE 49
  321. SELECT d.*, k.*
  322. FROM dom d, klient k, transakcja t
  323. WHERE k.id_klienta=t.id_klienta_fk
  324. AND d.id_domu=t.id_domu_fk
  325. AND k.id_klienta IN
  326. (SELECT id_klienta FROM dom d, klient k, transakcja t
  327. WHERE k.id_klienta=t.id_klienta_fk AND d.id_domu=t.id_domu_fk
  328. GROUP BY id_klienta
  329. HAVING COUNT(*)=2)
  330.  
  331. --ZADANIE 50
  332. SELECT * FROM transakcja
  333. WHERE cena_uzyskana>(SELECT avg(cena_uzyskana) FROM transakcja)
  334.  
  335. --ZADANIE 50
  336. SELECT * FROM dom
  337. WHERE id_domu<(SELECT MIN(id_domu) FROM dom WHERE miasto='Sopot')
  338.  
  339. --ZADANIE 51
  340. SELECT datename(dw,data_transakcji) AS 'Dzień tygodnia' FROM transakcja
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement