ďťż
 
Co mowi standard o instrukcji "select * from tabela" ? ďťż
 
Co mowi standard o instrukcji "select * from tabela" ?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Co mowi standard o instrukcji "select * from tabela" ?



Edward - 30-06-2006 00:08
Co mowi standard o instrukcji "select * from tabela" ?
  Witam,

Oczywiscie szukalem po sieci odpowiedzi ale nie znalazlem.
Na szybko wiec zainstalowalem 40tude i pytam Was, proszac o pomoc
z ponizszym problemem.

Powiedzmy ze mam tabele:
create table Tabela1 (
Pole1 int
,Pole2 int
)

Jak sie zachowa instrukcja: "select * from Tabela1"?
W jakiej kolejnosci zostana zwrocone poszczegolne pola tabeli?
Czy to prawda ze standard SQL (nie wiem czy jakis konkretny czy wszystkie)
nie zapewnia, ze w pierwszej kolumnie zostanie zwrocone Pole1 a w drugiej
Pole2 ?
Czy to prawda, ze moze byc tak, ze jednym razem zwroci w pierwszej kolumnie
Pole1 a innym razem Pole2?
I czy to prawda, że dlatego nie powinno sie sotsowac zapisu "select * from
Tabela1", tylko zawsze powinno sie wymieniac poszczegolne wszystkie pola w
tabeli ? ("select Pole1, Pole2 from Tabela1") ???

pozdrawiam i licze na konkretne odpowiedzi (w razie odpowiedzi twierdzacych
na poszczegolne pytania, prosilbym o skierowanie mnie do wiarygodnego
zrodla wiedzy na ten temat)

z gory dziekuje za jakakolwiek pomoc

Edward





Brzezi - 30-06-2006 00:08

  co do glownego pytania nie wiem, ale...

> I czy to prawda, że dlatego nie powinno sie sotsowac zapisu "select * from
> Tabela1", tylko zawsze powinno sie wymieniac poszczegolne wszystkie pola w
> tabeli ? ("select Pole1, Pole2 from Tabela1") ???

select * ... nie oznacza ze nie mozesz sie odwolywac bezwzglednie do pol po
ich nazwie, przeciez kazda kolumna ma swoja nazwe, nawet jak podasz *, wiec
przy wyciaganiu danych pobieraj je po nazwie, a nie po indeksie, nie bedzie
problemu...

Pozdrawiam
Brzezi
--
[ E-mail: brzezi@enter.net.pl ][ brzezi:~# uptime ]
[ Ekg: #3781111 ][ 23:59:02 up 7 days, 11:22, 3 users, ]
[ LinuxUser: #249916 ][ load average: 0.96, 0.67, 0.68 ]




Edward - 30-06-2006 00:08

  Dnia 29 Jun 2006 22:00:45 GMT, Brzezi napisał(a):

> select * ... nie oznacza ze nie mozesz sie odwolywac bezwzglednie do pol po
> ich nazwie, przeciez kazda kolumna ma swoja nazwe, nawet jak podasz *, wiec
> przy wyciaganiu danych pobieraj je po nazwie, a nie po indeksie, nie bedzie
> problemu...
>

To wiem ze tak jest, ale to nie w tym problem.
Co powiesz np. o takiej sytuacji:

create table Tabela2 (
Pole1 int
,Pole2 int
)
insert into Tabela2
select * from Tabela1

?? poza tym musze znac odpowiedz na moje pytania,
a nie jak sobie radzic w poszczegolnych sytuacjach :)




Lucyna Witkowska - 01-07-2006 00:57

  Edward <edwardek@poczta.onet.pl> napisał:
> Oczywiscie szukalem po sieci odpowiedzi ale nie znalazlem.
> Na szybko wiec zainstalowalem 40tude i pytam Was, proszac o pomoc
> z ponizszym problemem.

> Powiedzmy ze mam tabele:
> create table Tabela1 (
> Pole1 int
> ,Pole2 int
> )

> Jak sie zachowa instrukcja: "select * from Tabela1"?
> W jakiej kolejnosci zostana zwrocone poszczegolne pola tabeli?
> Czy to prawda ze standard SQL (nie wiem czy jakis konkretny czy wszystkie)
> nie zapewnia, ze w pierwszej kolumnie zostanie zwrocone Pole1 a w drugiej
> Pole2 ?

No nie, jakis porzadek musi byc. Kolejnosc na liscie SELECT jest
zachowana w wyniku.

> Czy to prawda, ze moze byc tak, ze jednym razem zwroci w pierwszej kolumnie
> Pole1 a innym razem Pole2?

:-) Nie.

> I czy to prawda, że dlatego nie powinno sie sotsowac zapisu "select * from
> Tabela1", tylko zawsze powinno sie wymieniac poszczegolne wszystkie pola w
> tabeli ? ("select Pole1, Pole2 from Tabela1") ???

W Oracle SELECT * zwraca kolumny w kolejnosci podanej w chwili tworzenia
obiektu. Wiarygodne źródło: ORACLE SQL Reference.

Powinno sie jednak wymieniac kolumny, zeby uniezaleznic SELECT od zmian
struktury tabeli, a takze zmiejszyc koszty przez wyciecie przesylania
niepotrzebnych danych.

> pozdrawiam i licze na konkretne odpowiedzi (w razie odpowiedzi twierdzacych
> na poszczegolne pytania, prosilbym o skierowanie mnie do wiarygodnego
> zrodla wiedzy na ten temat)

Mam nadzieje, ze moja odpowiedz jest konkretna ;-)

Pozdrowienia,
LW





Szczepan Marchewka - 01-07-2006 00:57

  Z tego, co pamietam, to standard rzeczywiscie nie narzuca kolejnosci kolumn,
ale chyba wszystkie systemy baz danych stosuja jakis konkretny porzadek
kolumn (wg kolejnosci kolumn przy tworzeniu tabeli). Teoretycznie powinno
sie unikac "SELECT * FROM tabela" ze wzgledu na przenosnosc miedzy roznymi
bazami danych i ich wersjami (moglyby stosowac rozne sortowanie kolumn),
ale to chyba tylko teoretycznie.

Natomiast moim zdaniem absolutnie niemozliwe jest, by zdarzylo sie, ze raz
takie zapytanie zwroci Pole1, Pole2, a innym razem Pole2, Pole1. To to by
bylo czyste szalenstwo ze strony producenta bazy danych.

Szczepan@Marchewka.info.pl
-----
In the beginner's mind there are many possibilities,
but in the expert's mind there are few.
(Shunryu Suzuki 1905-1971)




Artur Gancarz - 06-07-2006 00:20

  Użytkownik Edward napisał:
> Witam,
>
> Oczywiscie szukalem po sieci odpowiedzi ale nie znalazlem.
> Na szybko wiec zainstalowalem 40tude i pytam Was, proszac o pomoc
> z ponizszym problemem.
>
> Powiedzmy ze mam tabele:
> create table Tabela1 (
> Pole1 int
> ,Pole2 int
> )
>
> Jak sie zachowa instrukcja: "select * from Tabela1"?
> W jakiej kolejnosci zostana zwrocone poszczegolne pola tabeli?
> Czy to prawda ze standard SQL (nie wiem czy jakis konkretny czy wszystkie)
> nie zapewnia, ze w pierwszej kolumnie zostanie zwrocone Pole1 a w drugiej
> Pole2 ?
> Czy to prawda, ze moze byc tak, ze jednym razem zwroci w pierwszej kolumnie
> Pole1 a innym razem Pole2?

Widzisz, w standardzie SQL jest również taka opcja jak wpisywanie do
tabeli wartości bez podania nazw kolumn, np.:

insert into tabela1 values(34,564,3245,3454);

Z góry wtedy wpisujący musi wiedzieć, jaka jest kolejność kolumn, bo
inaczej dane by wpisywał "przypadkowo". Jest to pośrednia odpowiedź na
twoje pytanie: kolejność jest zawsze taka sama - taka jak przy tworzeniu
obiektu. Istotne jest również i to, że przy modyfikacji struktury tabeli
masz możliwość podawania np. przy dodawaniu kolumny gdzie ona ma się
znaleźć (jej kolejność), np:

alter table tabela1 add column imie_drugie char(15) AFTER imie;

W tym przypadku koniecznie struktura tabeli ma być taka, ze kolumna
"imie_drugie" ma się znaleźć po kolumnie "imie". Jest też opcja FIRST.
Bez podania parametru kolumna zostanie dodana na końcu.

> I czy to prawda, że dlatego nie powinno sie sotsowac zapisu "select * from
> Tabela1", tylko zawsze powinno sie wymieniac poszczegolne wszystkie pola w
> tabeli ? ("select Pole1, Pole2 from Tabela1") ???

Pola podaje się z powodu nieco innego, często chcesz danych tylko z
kilku kolumn, a zapytanie jest "skomplikowane" i łączy wiele tabel, zaś
w wyniku dostałbyć np. 30 kolumn, a których interesuje cię tylko 5.
Reszta danych tylko "zatyka" łącze (przy założeniu że server-SQL i
client-SQL są na różnych komputerach) lub "zajmuje" czas procka, a
najważniejsze, że nie mieści się na ekranie i nie jesteś tego w stanie
przeczytać (3-5 krotne zawinięcie wiersza dla mnie jest nie do
"rozpracowania").

> pozdrawiam i licze na konkretne odpowiedzi (w razie odpowiedzi twierdzacych
> na poszczegolne pytania, prosilbym o skierowanie mnie do wiarygodnego
> zrodla wiedzy na ten temat)
>
> z gory dziekuje za jakakolwiek pomoc
>
> Edward

Mam nadzieję, że byłem konkretny

Artur Gancarz




Edward - 07-07-2006 02:21

  Dnia Thu, 29 Jun 2006 23:53:19 +0200, Edward napisał(a):

Dziekuje wszystkich za odpowiedzi. Bardzo mi to pomoglo i wiele wyjasnilo.
Najistotniejsze jest to ze producent bazy danych czesto okresla
jaka jest kolejnosc pol (mnie interesowal MS Server i znalazlem w
dokumentacji MS w internecie wyraznie napisane, ze kolejnosc pol jest taka
jaka zostala zdefiniowana w tabeli lub w perspektywie).
To co napisal Pan Artur tez jest bardzo wazne - oznacza to ze,
standard moze nie narzuca w jakim porzadku maja byc wyswietlane pola,
ale przyjmuje ze jakis narzucony porzadek zawsze producent bazy danych
zrobi/powininen zrobic.

pozdrawiam
Edward
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [help] Illustrator CS - =?ISO-8859-2?Q?znikn=B1=B3_Selection_?==?ISO-8859-2?Q?Tool_=28V=29?= [mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu. =?iso-8859-2?q?select_sum_i_dwie_tabele..._b=B3=EAdna_agregac ja?= =?iso-8859-2?Q?=5BMySql=5D_-_select_po_5_rekordow_mniejssych_i_wi=EAkszych?= =?iso-8859-2?Q?=5BMySql=5D_Select_wed=B3ug_nazwy_pola?= =?ISO-8859-2?Q?[mysql]_Nie_potrafi=EA_zgrupowa=E6_selecta_(proste)?= =?ISO-8859-2?Q?[MS_SQL]_update_wielu_p=F3l_na_raz_z_selecta?= Wstawianie nowego wiersza w przypadku jego braku podczas SELECT w PostgreSQL [pgsql] jak =?ISO-8859-2?Q?zrobi=E6_taki_select_=3F?= [MySql] Select, polskie znaki i duze oraz małe litery
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lisinski.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com