ihush pon 3.6.2019 16:34

-ako te to zanima, ako učiš.. tad si urpavo ti taj koji to treba riješiti.

btw, SQL .. je sql, nevažno postgre odnosno velike baze mogu imati svoje fičere-razlike, no jezik je isti.. kao što auto može imati 4-5-6-više brzina, 'isto je'.

evo ti ''ugrubo'' hint :))

select * from * where * on .. e to je join.. tj kriterij i što s čime spajaš, dodaješ, tražiš samo što je u obje tablice-kriterija ili je kriterij prva-druga itd.. ako to ne znaš, tad si zalutao.

 

+ prijedlog, za učenje, isprobavanje.. mislim/možda je najzgodnije win, ms-office-access baza, za učenje sql-a, ogroman knowhow-msdn baza s primjerima, server, VisualStudio za c-java-bilošto.. i tad ne moraš više tražiti jer tad imaš sve moguće primjere, klikaš-vidiš.. dok je samo stvar sintaxe-prilagodbe nekoj konkretnoj bazi-platformi ili programskom jeziku, npr connect string, nakon čega je 99% identično. Oracle, IBM.. ili postgree, sam skjuel ili platforma-alati, kad to svladaš-vidiš, tad počneš na 'pravilan' način razmišljati o relacijskim bazama i upitima, tad počneš razumijevati i tad znaš..

ihush pon 3.6.2019 21:44

nije važno u kojem programskom jeziku, sve je to sql .. sintaxa uz sitne varijacije dok connectstring ovisi o samoj bazi npr ms-access-mdb ili ibm-db itd..

ako znaš sql znaš ga na svim platformama, odnosno, samo provjeriš-pogledaš primjer kako se nešto u nekom konkretnom jeziku napravi, npr c-c#-python-java-neštodeseto.. ili visualbasic/bilo što iz VSa ili bilo koja platforma uz razlike koje mogu zezati kao npr UNC path i tri ili dva beksleša.. npr win-lin...

southy uto 4.6.2019 17:22

Ovi operatori open(), next() i close() se koriste za manipuliranje datasetom u programskom jeziku po izboru, a ne SQL-u, dok u SQL-u imaš samo upit. Znači, odaberi nešto što ti odgovara (Python, PHP ili što već imaš ponuđeno). Vidi primjer korištenja na https://www.datacamp.com/community/tutorials/tutorial-postgresql-python

 

Što se tiče komentara da SQL je SQL mogu se složiti sa time ako se kaže ANSI-SQL je SQL, no različite "ekstenzije" SQL (PL/SQL na Oracle, T-SQL na MS) donose dodatne mogućnosti koje nisu dio ANSI standarda. Štoviše, već između PostgreSQL i MySQL postoji cijeli niz statementa koji su međusobno nekompatiblini. ANSI SQL je osnova, ali ako želiš koristiti to efikasno na nekoj platformi korisno je iskoristiti sve mogućnosti.

Bobobo-bo Bo-bobo sri 5.6.2019 22:11

Ne mogu ništa naći o tom open/next/close iterator modelu pa zbog jednostavnosti koristim Pythonove generatore:

 

from collections import defaultdict, namedtuple

Tuple = namedtuple('Tuple', ['ID', 'attributes'])

def table_scan(collection):
    for item in collection:
        yield item

def nested_loop(left_collection, right_collection):
    for left in left_collection:
        for right in right_collection:
            if left.ID == right.ID:
                yield Tuple(left.ID, left.attributes + right.attributes)

def hash_join(left_collection, right_collection):
    hash_table = defaultdict(list)
    for left in left_collection:
        hash_table[left.ID].append(left)

    for right in right_collection:
        for left in hash_table[right.ID]:
            yield Tuple(left.ID, left.attributes + right.attributes)

 

Primjeri korištenja:

table_1 = (Tuple(1, ['a', 'A']), Tuple(2, ['b', 'B']), Tuple(2, ['c', 'C']), Tuple(3, ['d', 'D']))
table_2 = (Tuple(1, ['x']), Tuple(2, ['y']), Tuple(4, ['z']))

for row in table_scan(table_1):
    print(row)
# Tuple(ID=1, attributes=['a', 'A'])
# Tuple(ID=2, attributes=['b', 'B'])
# Tuple(ID=2, attributes=['c', 'C'])
# Tuple(ID=3, attributes=['d', 'D'])

for row in nested_loop(table_1, table_2):
    print(row)
# Tuple(ID=1, attributes=['a', 'A', 'x'])
# Tuple(ID=2, attributes=['b', 'B', 'y'])
# Tuple(ID=2, attributes=['c', 'C', 'y'])

for row in hash_join(table_1, table_2):
    print(row)
# Tuple(ID=1, attributes=['a', 'A', 'x'])
# Tuple(ID=2, attributes=['b', 'B', 'y'])
# Tuple(ID=2, attributes=['c', 'C', 'y'])