Thread: Newbie questions

Newbie questions

From
"Frank Morton"
Date:
These are probably simple questions, but I can't find the answer.
A source for finding answers to this type of questions would
be appreciated.

Question #1

If a select might match MANY rows, how can I limit it to say 50?

I thought you could do:

select * from table limit 50;

Question #2

In doing a select, is there a way to ignore if the case of the key?

For example, if I have a table called animals with an id column and
it might contain "dog" or "DOG" or "Dog" and I want to match all
of them, how do I do it, with or without the "like" operator?

I'd like to say:

select * from animals where id='dogs' ignore case;

How do I do this?

Thanks you for your patience.




Re: [SQL] Newbie questions

From
Remigiusz Sokolowski
Date:
> Question #1
>
> If a select might match MANY rows, how can I limit it to say 50?
>
> I thought you could do:
>
> select * from table limit 50;

look at description of cursor in man - there are also examples
begin work;
declare cursor bookmark for
your select statement;
fetch 50 in bookmark;
close bookmark;
commit;B

>
> Question #2
>
> In doing a select, is there a way to ignore if the case of the key?
>
> For example, if I have a table called animals with an id column and
> it might contain "dog" or "DOG" or "Dog" and I want to match all
> of them, how do I do it, with or without the "like" operator?
>
> I'd like to say:
>
> select * from animals where id='dogs' ignore case;

look at operators in docs
~~ - LIKE operator
~* - match(regex), case insensitive operator
I have no idea which is better
    Rem
p.s. I could make some mistakes in this examples - check in amnual or docs
--------------------------------------------------------------------------------
Remigiusz Sokolowski      e-mail: rems@gdansk.sprint.pl
--------------------------------------------------------------------------------



Re: [SQL] Newbie questions

From
Postgres DBA
Date:
About LIMIT:
it is implemented as feature add-on to 6.4 release and could be downloaded
from patch directory on Postgres FTP site.

Al.

On Mon, 14 Dec 1998, Remigiusz Sokolowski wrote:

> > Question #1
> >
> > If a select might match MANY rows, how can I limit it to say 50?
> >
> > I thought you could do:
> >
> > select * from table limit 50;
>
> look at description of cursor in man - there are also examples
> begin work;
> declare cursor bookmark for
> your select statement;
> fetch 50 in bookmark;
> close bookmark;
> commit;B
>
> >
> > Question #2
> >
> > In doing a select, is there a way to ignore if the case of the key?
> >
> > For example, if I have a table called animals with an id column and
> > it might contain "dog" or "DOG" or "Dog" and I want to match all
> > of them, how do I do it, with or without the "like" operator?
> >
> > I'd like to say:
> >
> > select * from animals where id='dogs' ignore case;
>
> look at operators in docs
> ~~ - LIKE operator
> ~* - match(regex), case insensitive operator
> I have no idea which is better
>     Rem
> p.s. I could make some mistakes in this examples - check in amnual or docs
> --------------------------------------------------------------------------------
> Remigiusz Sokolowski      e-mail: rems@gdansk.sprint.pl
> --------------------------------------------------------------------------------
>
>
>
>


Re: [SQL] Newbie questions

From
Herouth Maoz
Date:
At 10:26 +0200 on 14/12/98, Remigiusz Sokolowski wrote:


> > select * from animals where id='dogs' ignore case;
>
> look at operators in docs
> ~~ - LIKE operator
> ~* - match(regex), case insensitive operator
> I have no idea which is better
>     Rem
> p.s. I could make some mistakes in this examples - check in amnual or docs

The like and regexp do a match rather than an equality test.

For an exact equality ignoring case, simply use

SELECT *
FROM animals
WHERE lower( id ) = 'dogs';

Note that this means an index on the id column will NOT be used, because
each value has to be converted to lower before testing. When I needed this
to be an indexed search, I added a column, called, say "lower_id", which
contains the lowercase version of the value in the "id" column. Then I
indexed that column and then you can ask WHERE lower_id = 'dogs' and get a
fast answer.

There is also the possibility of creating a functional index, but I haven't
managed to cause this sort of index to "kick in" on my version of postgres
(6.2.1).

Herouth

--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma



Re: [SQL] Newbie questions

From
Remigiusz Sokolowski
Date:
> > > select * from animals where id='dogs' ignore case;
> >
> > look at operators in docs
> > ~~ - LIKE operator
> > ~* - match(regex), case insensitive operator
> > I have no idea which is better
> >     Rem
> > p.s. I could make some mistakes in this examples - check in amnual or docs
>
> The like and regexp do a match rather than an equality test.
> For an exact equality ignoring case, simply use
>
> SELECT *
> FROM animals
> WHERE lower( id ) = 'dogs';
[..]

So if they do match - I don't need to use with them some wild characters
(* or %)? And second question: Can I use % with = operator?
I know - simple question, but I feel now a little confused - manual
doesn't clear it either - I thought about it, but as long as all works
fine - I haven't needed this knowledge.
    TIA
    Rem
                                   *
                                   /\
-------------------------------------------------------------------*------------
Remigiusz Sokolowski      e-mail: rems@gdansk.sprint.pl        i/   o\i
-----------------------------------------------------------------o/&&\----------
                                 /  * \
    Wesolych Swiat Bozego Narodzenia i                   i/_o   _\i
    Szczesliwego Nowego Roku                o/   O\o
    Marry Christmas and Happy New Year!!!            / i    \
                                  i/____o___\i
                                   ||


Re: [SQL] Newbie questions

From
Herouth Maoz
Date:
At 15:41 +0200 on 15/12/98, Remigiusz Sokolowski wrote:


> So if they do match - I don't need to use with them some wild characters
> (* or %)? And second question: Can I use % with = operator?
> I know - simple question, but I feel now a little confused - manual
> doesn't clear it either - I thought about it, but as long as all works
> fine - I haven't needed this knowledge.

Make the distinction between a MATCH and an EQUALITY. A "match" is
comparing to a pattern, and there can be more than one text that makes the
comparison work. The '=' does not take wildcards - it is an equality test.
It tests *exactly*.

An equality test has an advantage in index usage. Case-insensitive matching
doesn't trigger indices in any case (as far as I know). Case-sensitive
matching triggers them only if the pattern is anchored to the left (That
is, in a LIKE comparison, the pattern doesn't start with % or _, and in
regular expression, it starts with a ^ followed by simple characters).

Herouth

--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma