1                        Introdução ao PostgreSQL              1-Comandos DML – Data Manipulation Language                ...
2DescriçãoO comando SELECT retorna linhas de uma ou mais tabelas. O processamento geral docomando SELECT está descrito aba...
3aliásUm nome substituto para o item da cláusula FROM contendo o aliás. O aliás é utilizado paraabreviar, ou para eliminar...
4De forma inversa, RIGHT OUTER JOIN retorna todas as linhas da junção, mais uma linhapara cada linha da tabela à direita s...
5Cada coluna referenciada na condição deve referenciar sem ambigüidade uma coluna deagrupamento, a menos que a referência ...
6O resultado do operador INTERSECT não contém nenhuma linha duplicada, a menos que aopção ALL seja especificada.Usando ALL...
7especificada, ASC é assumido por padrão. Como alternativa, pode ser especificado o nome deum operador de ordenação especí...
81.2 – Funções Internas com o Comando Select  1.2.1 – Funções de Strings Concatenação de Strings - dois || (pipes)SQL> SEL...
9LTRIM - (string text, chars text) - Remove os caracteres chars da esquerdaLTRIM(abssssremova, abs) - - remova   Like e %S...
10 Função date_part (retorna double)SQL> SELECT DATE_PART(day, TIMESTAMP 2001-02-16 20:38:40);Resultado: 16 (day é uma str...
11Exemplo:SQL> SELECT DATE 10/05/2002 - DATE 10/05/2001; -- Retorna a quantidade de dias- -entre as duas datasPara este ti...
125) Mostrar todos os dados dos equipamentos fornecidos neste mêsSQL> SELECT *FROM equipamentoWHERE extract ( month from d...
139) Montar uma lista dos softwares instalados em cada equipamento do tipo   Computador no seguinte formato : Número Patri...
1414) Montar uma lista de todos os computadores com mais de 1GB de memória   RAM que possuem softwares do tipo Ferramenta ...
Upcoming SlideShare
Loading in …5
×

Sql basico postgresql_v12

334 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
334
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sql basico postgresql_v12

  1. 1. 1 Introdução ao PostgreSQL 1-Comandos DML – Data Manipulation Language Comandos1.1 - Comando SelectExtraído da Documentação do PostgreSQL 8.0.0Projeto de Tradução para o Português do Brasil (http://sourceforge.net/projects/pgdocptbr/)The PostgreSQL Global Development GroupCopyright © 1996-2005 por The PostgreSQL Global Development Group 2005Tradução de Halley Pacheco de OliveiraSINTAXE :SELECT [ ALL | DISTINCT [ ON ( expressão [, ...] ) ] ]* | expressão [ AS nome_de_saída ] [, ...][ FROM item_do_from [, ...] ][ WHERE condição ][ GROUP BY expressão [, ...] ][ HAVING condição [, ...] ][ { UNION | INTERSECT | EXCEPT } [ ALL ] seleção ][ ORDER BY expressão [ ASC | DESC | USING operador ] [, ...] ][ LIMIT { contador | ALL } ][ OFFSET início ][ FOR UPDATE [ OF nome_da_tabela [, ...] ] ]onde item_do_from pode ser um entre:[ ONLY ] nome_da_tabela [ * ] [ [ AS ] aliás [ ( aliás_de_coluna [, ...] ) ] ]( seleção ) [ AS ] aliás [ ( aliás_d aliás_de_coluna [, ...] ) ]nome_da_função ( [ argumento [, ...] ] ) [ AS ] aliás [ ( aliás_de_coluna [, ...] |definição_de_coluna [, ...] ) ]nome_da_função ( [ argumento [, ...] ] ) AS ( definição_de_coluna [, ...] )item_do_from [ NATURAL ] tipo_de_junção item_do_from [ ON condição_de_junção | USING (coluna_de_junção [, ...] ) ] SQL Básico – Prof. Antonio Guardado - 052012
  2. 2. 2DescriçãoO comando SELECT retorna linhas de uma ou mais tabelas. O processamento geral docomando SELECT está descrito abaixo:1. Todos os elementos da lista FROM são computados; cada elemento na lista FROM é umatabela real ou virtual. Quando é especificado mais de um elemento na lista FROM, é feita umajunção cruzada entre estes elementos (Consulte a Cláusula FROM abaixo).2. Se for especificada a cláusula WHERE, todas as linhas que não satisfazem a condição sãoeliminadas da saída (Consulte a Cláusula WHERE abaixo).3. Se for especificada a cláusula GROUP BY, a saída é dividida em grupos de linhas quecorrespondem a um ou mais valores. Se a cláusula HAVING estiver presente, são eliminadosos grupos que não satisfazem à condição especificada(Consulte a Cláusula GROUP BY e a Cláusula HAVING abaixo).4. As linhas de saída reais são computadas utilizando as expressões de saída do comandoSELECT para cada linha selecionada (Consulte a Lista do SELECT abaixo).5. Usando os operadores UNION, INTERSECT e EXCEPT podem ser combinadas as saídasde vários comandos SELECTpara formar um único conjunto de resultados. O operador UNION retorna todas as linhaspresentes em um ou nos dois conjuntos de resultados. O operador INTERSECT retorna todasas linhas presentes nos dois conjuntos de resultados.O operador EXCEPT retorna as linhas presentes no primeiro conjunto de resultados mas nãono segundo. Em todos estes três casos as linhas duplicadas são eliminadas, a menos queALL seja especificado (Consulte a Cláusula UNION,a Cláusula INTERSECT e Cláusula EXCEPT abaixo).6. Se for especificada a cláusula ORDER BY, as linhas retornadas são classificadas segundoa ordem especificada. Se a cláusula ORDER BY não for especificada, as linhas sãoretornadas na ordem em que o sistema considerar mais rápido de produzir (Consulte aCláusula ORDER BY abaixo).7. A cláusula DISTINCT remove do resultado as linhas duplicadas 1 2 . A cláusula DISTINCTON remove as linhas que correspondem a todas as expressões especificadas. A cláusula ALL(o padrão) retorna todas as linhas candidatas, incluindo as duplicadas (Consulte a CláusulaDISTINCT abaixo).8. Se for especificada a cláusula LIMIT ou a cláusula OFFSET, o comando SELECT retornasomente um subconjunto das linhas do resultado (Consulte a Cláusula LIMIT abaixo)9. A cláusula FOR UPDATE faz o comando SELECT bloquear as linhas selecionadas contraatualizações concorrentes (Consulte a Cláusula FOR UPDATE abaixo)É necessário possuir o privilégio SELECT na tabela para poder ler seus valores. A utilizaçãode FOR UPDATE requer também o privilégio UPDATE.ParâmetrosCláusula FROMA cláusula FROM especifica uma ou mais tabelas fonte para o comando SELECT. Se váriasfontes forem especificadas, o resultado será o produto cartesiano (junção cruzada) de todasas fontes, mas normalmente são incluídas condições de qualificação para restringir as linhasretornadas a um pequeno subconjunto do produto cartesiano. A cláusula FROM pode conteros seguintes elementos:nome_da_tabelaO nome (opcionalmente qualificado pelo esquema) de uma tabela ou de uma visão existente.Se a cláusula ONLY for especificada, somente esta tabela será varrida. Se a cláusula ONLYnão for especificada, esta tabela e todas as suas tabelas descendentes (se existirem) serãovarridas. Pode ser anexado um * ao nome da tabela para indicar que as tabelas descendentesdevem ser varridas, mas na versão corrente este é o comportamento padrão; nas versõesanteriores a 7.1 o comportamento padrão era ONLY. O comportamento padrão pode sermodificado mudando o valor da opção de configuração sql_inheritance. SQL Básico – Prof. Antonio Guardado - 052012
  3. 3. 3aliásUm nome substituto para o item da cláusula FROM contendo o aliás. O aliás é utilizado paraabreviar, ou para eliminar ambigüidade em auto-junções (onde a mesma tabela é varridavárias vezes). Quando se fornece um aliás, o nome verdadeiro da tabela ou da função ficatotalmente escondido; se, por exemplo, for declarado FROM foo AS f, o restante do comandoSELECT deve fazer referência a este item do FROM como f, e não como foo. Se for escritoum aliás, também pode ser escrita uma lista de aliases de coluna para fornecer nomessubstitutos para uma ou mais colunas da tabela.seleçãoPode haver sub-SELECT na cláusula FROM. Atua como se sua saída fosse criada como umatabela temporária pela duração deste único comando SELECT. Deve ser observado que osub-SELECT deve estar entre parênteses, e que deve ser especificado um aliás para omesmo.nome_da_funçãoPodem estar presentes na cláusula FROM chamadas de função (É especialmente útil no casodas funções que retornam um conjunto de resultados, mas pode ser usada qualquer função).Atua como se a sua saída fosse criada como uma tabela temporária pela duração deste únicocomando SELECT. Também pode ser utilizado um aliás. Se for escrito um aliás, também podeser escrita uma lista de aliases de coluna para fornecer nomes substitutos para um ou maisatributos do tipo composto retornado pela função. Se a função tiver sido definida comoretornando o tipo de dado record então deve estar presente um aliás, ou a palavra chave ASseguida por uma lista de definições de coluna na forma ( nome_de_coluna tipo_de_dado [, ... ]). A lista de definições de coluna deve corresponder ao número e tipo reais das colunasretornadas pela função.tipo_de_junçãoUm entre• [ INNER ] JOIN• LEFT [ OUTER ] JOIN• RIGHT [ OUTER ] JOIN• FULL [ OUTER ] JOIN• CROSS JOINPara os tipos de junção INNER e OUTER deve ser especificada uma condição de junçãodesignando exatamente um entre NATURAL, ON condição_de_junção ou USING(coluna_de_junção [, ...]). Veja abaixo o significado. Para CROSS JOIN, nenhuma destascláusulas pode estar presente. A cláusula JOIN combina dois itens da cláusula FROM. Se fornecessário devem ser utilizados parênteses para determinar a ordem de aninhamento. Naausência de parênteses, a cláusula JOIN aninha da esquerda para a direita. Em todos oscasos a cláusula JOIN tem nível de precedência superior ao das vírgulas que separam ositens da cláusula FROM.CROSS JOIN e INNER JOIN produzem um produto cartesiano simples, o mesmo resultadoobtido listando os dois itens no nível superior da cláusula FROM, mas restrito pela condiçãode junção (se houver). CROSS JOIN é equivalente a INNER JOIN ON (TRUE), ou seja,nenhuma linha é removida pela qualificação. Estes tipos de junção são apenas uma notaçãoconveniente, uma vez que não fazem nada que não poderia ser feito usando simplesmenteFROM e WHERE.LEFT OUTER JOIN retorna todas as linhas presentes no produto cartesiano qualificado (ouseja, todas as linhas combinadas que passam pela sua condição de junção), mais uma cópiade cada linha da tabela à esquerda para a qual não há linha na tabela à direita que passe pelacondição de junção. As linhas da tabela à esquerda são estendidas por toda a largura databela de junção, inserindo valores nulos para as colunas da tabela à direita. Deve serobservado que somente a condição da própria cláusula JOIN é considerada ao decidir quaislinhas possuem correspondência. As condições externas são aplicadas depois. SQL Básico – Prof. Antonio Guardado - 052012
  4. 4. 4De forma inversa, RIGHT OUTER JOIN retorna todas as linhas da junção, mais uma linhapara cada linha da tabela à direita sem correspondência (estendida com nulos à esquerda). Éapenas uma notação conveniente, uma vez que pode ser convertido em LEFT OUTER JOINtrocando as entradas à direita e à esquerda.FULL OUTER JOIN retorna todas as linhas da junção, mais uma linha para cada linha databela à esquerda semcorrespondência, (estendida com nulos à direita), mais uma linha para cada linha da tabela àdireita sem correspondência (estendida com nulos à esquerda).ON condição_de_junçãoA condição_de_junção é uma expressão que resulta em um valor do tipo boolean (semelhanteà cláusula WHERE) que especifica quais linhas da junção são consideradas correspondentes.USING (coluna_de_junção [, ...])A cláusula com a forma USING ( a, b, ... ) é uma abreviação de ON tabela_à_esquerda.a =tabela_à_direita.a AND tabela_à_esquerda.b = tabela_à_direita.b .... USING também implicaque somente será incluída na saída da junção uma de cada par de colunas equivalentes, enão as duas.NATURALNATURAL é uma forma abreviada para a lista USING mencionando todas as colunas dasduas tabelas que possuem o mesmo nome.Cláusula WHEREA cláusula opcional WHERE possui a forma geralWHERE condiçãoonde condição é uma expressão que produz um resultado do tipo boolean 5 . Todas as linhasque não satisfazem a esta condição são eliminadas da saída. A linha satisfaz a condição seretorna verdade quando os valores reais da linha são colocados no lugar das variáveis que osreferenciam.Cláusula GROUP BYA cláusula opcional GROUP BY possui a forma geralGROUP BY expressão [, ...]A cláusula GROUP BY condensa em uma única linha todas as linhas selecionadas quecompartilham os mesmos valores para as expressões de agrupamento. A expressão pode sero nome de uma coluna da entrada, ou o nome ou o númeroordinal de uma coluna da saída (lista de itens do SELECT), ou uma expressão arbitráriaformada por valores das colunas da entrada. Havendo ambigüidade, o nome na cláusulaGROUP BY será interpretado como sendo o nome da coluna da entrada, e não o nome dacoluna da saída.As funções de agregação, caso sejam usadas, são computadas entre todas as linhas queconstituem cada grupo, produzindo um valor separado para cada grupo (enquanto semGROUP BY, uma agregação produz um único valor computado entretodas as linhas selecionadas). Quando GROUP BY está presente, não é válido a lista deexpressões do SELECT fazer referência a colunas não agrupadas, exceto dentro das funçõesde agregação, uma vez que haveria mais de um valor possível retornado para uma coluna nãoagrupada.Cláusula HAVINGA cláusula opcional HAVING possui a forma geralHAVING condiçãoonde condição é especificada da mesma forma que na cláusula WHERE.A cláusula HAVING elimina os grupos de linhas que não satisfazem a condição. A cláusulaHAVING é diferente da cláusula WHERE: WHERE filtra individualmente as linhas antes doGROUP BY ser aplicado, enquanto HAVING filtra grupos de linhas criados pelo GROUP BY. SQL Básico – Prof. Antonio Guardado - 052012
  5. 5. 5Cada coluna referenciada na condição deve referenciar sem ambigüidade uma coluna deagrupamento, a menos que a referência apareça dentro de uma função de agregação.A presença da cláusula HAVING torna a consulta uma consulta agrupada, mesmo que nãoexista a cláusula GROUP BY. É o mesmo que acontece quando a consulta contém funções deagregação mas não possui a cláusula GROUP BY. Todas as linhas selecionadas sãoconsideradas como formando um único grupo, e tanto a lista do SELECT quanto a cláusulaHAVING somente podem fazer referência a colunas da tabela dentro de funções deagregação. Este tipo de consulta gera uma única linha se a condição da cláusula HAVING forverdade, ou nenhuma linha se não for verdade.Lista do SELECTA lista do SELECT (entre as palavras chave SELECT e FROM) especifica expressões queformam as linhas de saída do comando SELECT. As expressões podem (e geralmente fazem)referenciar colunas computadas na cláusula FROM. Usando a cláusula AS nome_de_saída,pode ser especificado outro nome para uma coluna da saída. Este nome é usado,principalmente, como rótulo da coluna mostrada. Também pode ser usado para fazerreferência ao valor da coluna nas cláusulas ORDER BY e GROUP BY, mas não nas cláusulasWHERE e HAVING; nestas, a expressão deve ser escrita.Em vez da expressão pode ser escrito * na lista de saída, como abreviação para todas ascolunas das linhas selecionadas.Também pode ser escrito nome_da_tabela.* como abreviação das colunas provenientesapenas desta tabela.Cláusula UNIONA cláusula UNION possui a forma geralcomando_de_seleção UNION [ ALL ] comando_de_seleçãoonde comando_de_seleção é qualquer comando SELECT sem as cláusulas ORDER BY,LIMIT e FOR UPDATE (as cláusulas ORDER BY e LIMIT podem ser aplicadas a umasubexpressão se esta estiver entre parênteses. Sem os parênteses, estas cláusulas sãoconsideradas como aplicadas ao resultado da cláusula UNION, e não à sua expressão deentrada à direita).O operador UNION computa o conjunto formado pela união das linhas retornadas peloscomandos SELECT envolvidos.Uma linha está presente no conjunto união dos dois conjuntos de resultados se estiverpresente em pelo menos um destes dois conjuntos de resultados. Os dois comandos SELECTque representam os operandos diretos do operador UNION devem produzir o mesmo númerode colunas, e as colunas correspondentes devem possuir tipos de dado compatíveis.O resultado do operador UNION não contém nenhuma linha duplicada, a menos que a opçãoALL seja especificada. ALL não permite a eliminação das duplicatas; portanto, UNION ALLgeralmente é significativamente mais rápido do que UNION; deve ser utilizado ALL sepossível.Havendo vários operadores UNION no mesmo comando SELECT, estes são avaliados daesquerda para a direita, a menos que os parênteses indiquem o contrário.Atualmente não pode ser especificado FOR UPDATE nem para o resultado do operadorUNION nem para qualquer entrada do operador UNION.Cláusula INTERSECTA cláusula INTERSECT possui a forma geralcomando_de_seleção INTERSECT [ ALL ] comando_de_seleçãoonde comando_de_seleção é qualquer comando SELECT sem as cláusulas ORDER BY,LIMIT e FOR UPDATE.O operador INTERSECT computa o conjunto formado pela interseção das linhas retornadaspelos comandos SELECT envolvidos. Uma linha está na interseção dos dois conjuntos deresultados se estiver presente nos dois conjuntos de resultados. SQL Básico – Prof. Antonio Guardado - 052012
  6. 6. 6O resultado do operador INTERSECT não contém nenhuma linha duplicada, a menos que aopção ALL seja especificada.Usando ALL, uma linha contendo m duplicatas na tabela à esquerda e n duplicatas na tabela àdireita, aparece min(m,n) vezes no conjunto de resultados.Havendo vários operadores INTERSECT no mesmo comando SELECT, estes são avaliadosda esquerda para a direita, a menos que os parênteses indiquem outra ordem. O operadorINTERSECT tem nível de precedência superior ao do operador UNION, ou seja, A UNION BINTERSECT C é lido como A UNION (B INTERSECT C).Atualmente a cláusula FOR UPDATE não pode ser especificada para o resultado do operadorINTERSECT, nem em qualquer entrada do operador INTERSECT.Cláusula EXCEPTA cláusula EXCEPT possui a forma geralcomando_de_seleção EXCEPT [ ALL ] comando_de_seleçãoonde comando_de_seleção é qualquer comando SELECT sem as cláusulas ORDER BY,LIMIT e FOR UPDATE.O operador EXCEPT computa o conjunto de linhas presentes no resultado do comandoSELECT à esquerda, mas que não estão presentes no resultado do comando à direita.O resultado do operador EXCEPT não contém nenhuma linha duplicada, a menos que acláusula ALL seja especificada. Usando ALL, uma linha que possua m duplicatas na tabela àesquerda e n duplicatas na tabela à direita aparece max(m-n,0) vezes no conjunto deresultados.Havendo vários operadores EXCEPT no mesmo comando SELECT, estes são processadosda esquerda para a direita, a menos que os parênteses especifiquem outra ordem. O operadorEXCEPT possui o mesmo nível de precedência do operador UNION.Atualmente a cláusula FOR UPDATE não pode ser especificada para o resultado do operadorEXCEPT, nem em nenhuma entrada do operador EXCEPT.Cláusula ORDER BYA cláusula opcional ORDER BY possui a forma geralORDER BY expressão [ ASC | DESC | USING operador ] [, ...]onde expressão pode ser o nome ou o número ordinal de uma coluna da saída (item da listado SELECT), ou pode ser uma expressão arbitrária formada por valores das colunas daentrada.A cláusula ORDER BY faz as linhas do resultado serem classificadas de acordo com asexpressões especificadas. Se duas linhas são iguais de acordo com a expressão mais àesquerda, estas são comparadas de acordo com a próxima expressão, e assim por diante. Seforem iguais de acordo com todas as expressões especificadas, são retornadas em umaordemdependente da implementação.O número ordinal se refere à posição ordinal (esquerda para a direita) da coluna do resultado.Esta funcionalidade torna possível definir uma ordenação baseada em uma coluna que nãopossui um nome único. Isto nunca é absolutamente necessário, porque sempre é possívelatribuir um nome à coluna do resultado usando a cláusula AS.Também é possível utilizar expressões arbitrárias na cláusula ORDER BY, incluindo colunasque não aparecem na lista de resultado do SELECT. Portanto, o seguinte comando é válido:SELECT nome FROM distribuidores ORDER BY codigo; A limitação desta funcionalidade éque a cláusula ORDER BY aplicada ao resultado de UNION, INTERSECT ou EXCEPT podeespecificar apenas nomes de coluna ou números, mas não expressões.Se a expressão no ORDER BY for simplesmente um nome correspondendo tanto ao nome deuma coluna do resultado quanto ao nome de uma coluna da entrada, o ORDER BY interpretacomo sendo o nome da coluna do resultado. Esta é a escolha oposta à feita pelo GROUP BYna mesma situação. Esta incoerência existe para ficar compatível com o padrão SQL.Pode ser adicionada, opcionalmente, a palavra chave ASC (ascendente) ou DESC(descendente) após cada expressão na cláusula ORDER BY. Se nenhuma das duas for SQL Básico – Prof. Antonio Guardado - 052012
  7. 7. 7especificada, ASC é assumido por padrão. Como alternativa, pode ser especificado o nome deum operador de ordenação específico na cláusula USING. Geralmente ASC é equivalente aUSING <e geralmente DESC é equivalente a USING > (Mas o criador de um tipo de dado definido pelousuário pode definir exatamente qual é a ordem de classificação padrão, podendocorresponder a operadores com outros nomes).O valor nulo é classificado em uma posição mais alta do que qualquer outro valor. Em outraspalavras, na ordem de classificação ascendente os valores nulos ficam no final, e na ordem declassificação descendente os valores nulos ficam no início.Dados na forma de cadeias de caracteres são classificados de acordo com a ordem declassificação estabelecida quando o agrupamento de bancos de dados foi inicializado.Cláusula DISTINCTSe for especificada a cláusula DISTINCT, todas as linhas duplicadas são removidas doconjunto de resultados (é mantidauma linha para cada grupo de duplicatas). A cláusula ALL especifica o oposto: todas as linhassão mantidas; este é o padrão.DISTINCT ON ( expressão [, ...] ) preserva apenas a primeira linha de cada conjunto de linhasonde as expressões fornecidas forem iguais. As expressões em DISTINCT ON sãointerpretadas usando as mesmas regras da cláusula ORDER BY (veja acima). Deve serobservado que a “primeira linha” de cada conjunto é imprevisível, a menos que seja utilizadoORDER BY para garantir que a linha desejada apareça na frente. Por exemplo, SELECTDISTINCT ON (local) local, data, condição FROM tbl_condicao_climatica ORDER BY local,data DESC; mostra o relatório de condição climática mais recente para cada local, mas se nãotivesse sido usado ORDER BY para obrigar a ordem descendente dos valores da data paracada local, teria sido obtido um relatório com datas imprevisíveis para cada local.As expressões em DISTINCT ON devem corresponder às expressões mais à esquerda noORDER BY. A cláusula ORDER BY normalmente contém expressões adicionais paradeterminar a precedência desejada das linhas dentro de cada grupoDISTINCT ON.Cláusula LIMITA cláusula LIMIT consiste em duas subcláusulas independentes:LIMIT { contador | ALL }OFFSET inícioonde contador especifica o número máximo de linhas a serem retornadas, enquanto inícioespecifica o número de linhas a serem puladas antes de começar a retornar as linhas. Quandoas duas são especificadas, as início primeiras linhas são puladas antes de começar a contaras contador linhas a serem retornadas. Ao se usar a cláusula LIMIT é uma boa idéia usartambém a cláusula ORDER BY para colocar as linhas do resultado dentro de uma ordemúnica. Caso contrário será retornado um subconjunto imprevisível de linhas da consulta —pode-se estar querendo receber da décima a vigésima linha, mas da décima a vigésima emque ordem? Não é possível saber qual será a ordem, a não ser que ORDER BY sejaespecificado.O planejador de comandos leva LIMIT em consideração ao gerar o plano da consulta, por issoé muito provável serem obtidos planos diferentes (produzindo linhas em ordens diferentes)dependendo do que for especificado para LIMIT e OFFSET. Portanto, utilizar valoresdiferentes para LIMIT/OFFSET para selecionar subconjuntos diferentes do resultado daconsulta produz resultados inconsistentes, a não ser que seja exigida uma ordem previsívelpara os resultados utilizando ORDER BY. Isto não está errado; isto é uma conseqüência diretado fato do SQL não prometer retornar os resultados de uma consulta em nenhuma ordemespecífica, a não ser que ORDER BY seja utilizado para impor esta ordem. SQL Básico – Prof. Antonio Guardado - 052012
  8. 8. 81.2 – Funções Internas com o Comando Select 1.2.1 – Funções de Strings Concatenação de Strings - dois || (pipes)SQL> SELECT ae || io || u AS vogais ; Quantidade de Caracteres de StringSQL> SELECT CHAR_LENGTH (Postgresql); - -Retorna 10SQL> SELECT LENGTH (Database); - - Retorna 8 Converter para minúsculasSQL> SELECT LOWER (POSTGRESQL); Converter para maiúsculasSQL> SELECT UPPER (postgresql); Posição de caractereSQL> SELECT POSITION (@ IN guardado@gmail.com); -- Retorna 8SQL> SELECT STRPOS (Postgresql ,’sql); - - Retorna 8 SubstringSUBSTRING(string [FROM inteiro] [FOR inteiro])SQL> SELECT SUBSTRING (PostgreSQL FROM 8 FOR 10); - - Retorna SQLSUBSTRING(string FROM padrão);SQL> SELECT SUBSTRING (PostgreSQL FROM .......); - - Retorna PostgreSQL> SELECT SUBSTRING (PostgreSQL FROM ...$); - -Retorna SQLPrimeiros ....... e últimos ...$OuSUBSTR ( string, inicio, quantidade);SQL> SELECT SUBSTR (PostgreSQL, 4, 3); - - Retorna gre Substituir todos os caracteres semelhantes TRANSLATE (string, velho, novo);SQL> SELECT TRANSLATE (Brasil, il, ão); - - Retorna BrasãoSQL> SELECT TRANSLATE (Brasileiro...leiro, eiro, eira); Remover Espaços de StringsSQL> SELECT TRIM( SQL - PADRÃO ); Repetir uma string n vezesSQL> SELECT REPEAT(SQL-, 3); - - Retorna SQL-SQL-SQL Sobrescrever Substring em stringSQL> SELECT REPLACE (Postgresql, sql, SQL); - - Retorna PostgreSQL Iniciais MaiúsculasINITCAP(text) - INITCAP (olá mundo) - - Olá Mundo Remover Espaços em BrancoTRIM ([leading | trailing | both] [characters] from string)- remove caracteres da direita e daesquerda. TRIM (both b from babacatebbbb); - - abacateRTRIM (string text, chars text) - Remove os caracteres chars da direita (default é espaço)RTRIM(removarrrr, r) - - remova SQL Básico – Prof. Antonio Guardado - 052012
  9. 9. 9LTRIM - (string text, chars text) - Remove os caracteres chars da esquerdaLTRIM(abssssremova, abs) - - remova Like e %SELECT * FROM FRIENDS WHERE LASTNAME LIKE M%;O ILIKE é case INsensitive e o LIKE case sensitive.~~ equivale ao LIKE~~* equivale equivale ao ILIKE!~~ equivale ao NOT LIKE!~~* equivale equivale ao NOT ILIKE... LIKE [4-6]_6% -- Pegar o primeiro sendo de 4 a 6,-- o segundo qualquer dígito,-- o terceiro sendo 6 e os demais quaisquer% similar a *_ similar a ? (de arquivos no DOS)1.2.2 – Funções de Data/Hora Operações com datas:timestamp 2001-09-28 01:00 + interval 23 hours -> timestamp 2001-09-29 00:00date 2001-09-28 + interval 1 hour -> timestamp 2001-09-28 01:00date 01/01/2006 – date 31/01/2006time 01:00 + interval 3 hourstime -> 04:00interval 2 hours - time 05:00 -> time 03:00:00 Função age (retorna Interval) - Diferença entre datasage(timestamp)interval (Subtrai de hoje)age(timestamp 1957-06-13) -> 43 years 8 mons 3 daysage(timestamp, timestamp)interval Subtrai os argumentosage(2001-04-10, timestamp 1957-06-13) -> 43 years 9 mons 27 days Função extract (retorna double)Extrai parte da data: ano, mês, dia, hora, minuto, segundo.SQL> SELECT EXTRACT(YEAR FROM AGE(2001-04-10, TIMESTAMP 1957-06-13))SQL> SELECT EXTRACT(MONTH FROM AGE(2001-04-10, TIMESTAMP 1957-06-13))SQL> SELECT EXTRACT(DAY FROM AGE(2001-04-10, TIMESTAMP 1957-06-13)) Data e Hora atuais (retornam data ou hora)SQL> SELECT CURRENT_DATE;SQL> SELECT CURRENT_TIME;SQL> SELECT CURRENT_TIME(0);SQL> SELECT CURRENT_TIMESTAMP;SQL> SELECT CURRENT_TIMESTAMP(0); Obtendo o dia do mês:SQL> SELECT DATE_PART(DAY, CURRENT_TIMESTAMP) AS Dia; Somar dias e horas a uma data:SQL> SELECT CAST(06/04/2006 AS DATE) + INTERVAL 27 DAYS AS Data; Função now (retorna timestamp with zone)NOW() - Data e hora corrente (timestamp with zone);Não usar em campos somente timestamp. SQL Básico – Prof. Antonio Guardado - 052012
  10. 10. 10 Função date_part (retorna double)SQL> SELECT DATE_PART(day, TIMESTAMP 2001-02-16 20:38:40);Resultado: 16 (day é uma string, diferente de extract) Função date_trunc (retorna timestamp)SQL> SELECT DATE_TRUNC(year, TIMESTAMP 2001-02-16 20:38:40);Retorna 2001-02-16 00:00:00 Convertendo (CAST)SQL> SELECT TO_DATE(1983-07-18, YYYY-MM-DD)SQL> SELECT TO_DATE(19830718, YYYYMMDD) Função timeofday (retorna texto)SQL> SELECT TIMEOFDAY() -> Fri Feb 24 10:07:32.000126 2006 BRT IntervalINTERVAl [ (p) ]TO_CHAR(INTERVAl 15h 2m 12s, HH24:MI:SS)DATE 2001-09-28 + INTERVAL 1 hourINTERVAL 1 day + INTERVAL 1 hourINTERVAL 1 day - INTERVAL 1 hour900 * INTERVAL 1 secondINTERVAL trabalha com as unidades: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH,YEAR, DECADE,CENTURY, MILLENIUM ou abreviaturas ou plurais destas unidades.Se informado sem unidades 13 10:38:14 será devidamente interpretado 13 days 10 hours38 minutes 14 seconds.CURRENTE_DATE - INTERVAL 1 day;TO_TIMESTAMP(2006-01-05 17:56:03, YYYY-MM-DD HH24:MI:SS)1.2.3 - Formatação de Tipos de Dados TO_CHAR - Esta função deve ser evitada, pois será descontinuada. TO_DATEDATE TO_DATE(text, text); Recebe dois parâmetros text e retorna date.Um dos parâmetros é a data e o outro o formato.SQL> SELECT TO_DATE(29032006,DDMMYYYY); - Retorna 2006-03-29 TO_TIMESTAMPtmt TO_TIMESTAMP(text,text) - Recebe dois text e retorna timestamp with zoneSQL> SELECT TO_TIMESTAMP(29032006 14:23:05,DDMMYYYY HH:MI:SS); - Retorna2006-03-29 14:23:05+00 TO_NUMBERnumeric TO_NUMBER(text,text)SQL> SELECT TO_NUMBER(12,454.8-, 99G999D9S); Retorna -12454.8SQL> SELECT TO_NUMBER(12,454.8-, 99G999D9); Retorna 12454.8SQL> SELECT TO_NUMBER(12,454.8-, 99999D9); Retorna 124541.2.4 - Conversão Explícita de Tipos (CAST) CAST ( expressão AS tipo ) AS apelido; -- Sintaxe SQL ANSIOutra forma:Tipo ( expressão ); SQL Básico – Prof. Antonio Guardado - 052012
  11. 11. 11Exemplo:SQL> SELECT DATE 10/05/2002 - DATE 10/05/2001; -- Retorna a quantidade de dias- -entre as duas datasPara este tipo de conversão devemos:Usar float8 ao invés de double precision;Usar entre aspas alguns tipos como interval, time e timestampObs.: aplicações portáveis devem evitar esta forma de conversão e em seu lugar usar oCAST explicitamente.A função CAST() é utilizada para converter explicitamente tipos de dados em outros.SQL> SELECT CAST(2 AS double precision) ^ CAST(3 AS double precision) AS "exp";SQL> SELECT ~ CAST(20 AS int8) AS "negativo"; - Retorna -21SQL> SELECT ROUND(CAST (4 AS numeric), 4); - Retorna 4.0000SQL> SELECT SUBSTR(CAST (1234 AS text), 3);SQL> SELECT 1 AS "real" UNION SELECT CAST(2.2 AS REAL);1.2.5- Funções DiversasSQL> SELECT CURRENT_DATABASE();SQL> SELECT CURRENT_SCHEMA();SQL> SELECT CURRENT_SCHEMA(BOOLEAN);SQL> SELECT CURRENT_USER;SQL> SELECT SESSION_USER;SQL> SELECT VERSION();SQL> SELECT CURRENT_SETTING(DATESTYLE);SELECT HAS_TABLE_PRIVILEGE(usuario,tabela,privilegio);SQL> SELECT HAS_TABLE_PRIVILEGE(postgres,nulos,insert); - - Retorna: tSQL> SELECT HAS_DATABASE_PRIVILEGE(postgres,testes,create); - - Retorna: tSQL> SELECT HAS_SCHEMA_PRIVILEGE(postgres,public,create); - - Retorna: tSQL> SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);1.3 – Exemplos de SELECT com dados1) Mostrar todos os dados dos equipamentosSQL> SELECT * FROM equipamento ;2) Mostrar o modelo e fabricante dos equipamentosSQL> SELECT modelo_eqpto, fabricante_eqptoFROM equipamento ;3) Mostrar todos os dados dos softwares do fabricante MicrosoftSQL> SELECT * FROM softwareWHERE fabric_soft ilike %microsoft ;4) Mostrar todos os dados dos equipamentos fornecidos hojeSQL> SELECT *FROM equipamentoWHERE dt_fornec_eqpto = current_date ; SQL Básico – Prof. Antonio Guardado - 052012
  12. 12. 125) Mostrar todos os dados dos equipamentos fornecidos neste mêsSQL> SELECT *FROM equipamentoWHERE extract ( month from dt_fornec_eqpto) = extract ( month from current_date );6) Mostrar todos os dados dos equipamentos do tipo PeriféricosSQL> SELECT e.* , p.*FROM equipamento e,periferico pWHERE e.num_patrimonio=p.num_patr_perif ;SQL> SELECTe.num_patrimonio,e.num_serie,e.cod_forn_eqpto,e.modelo_eqpto,e.fabricante_eqpto,e.num_nota_fisc_eqpto,e.dt_fornec_eqpto,e.val_gar_eqpto,e.situacao,p.tipo_perif,p.desc_perif,p.caracteristicasFROM equipamento e,periferico pWHERE e.num_patrimonio=p.num_patr_perif ;7) Mostrar todos os dados dos equipamentos do tipo ComputadorSQL> SELECT e.* , c.*FROM equipamento e,computador cWHERE e.num_patrimonio=c.num_patr_comp;SQL> SELECTe.num_patrimonio,e.num_serie,e.cod_forn_eqpto,e.modelo_eqpto,e.fabricante_eqpto,e.num_nota_fisc_eqpto,e.dt_fornec_eqpto,e.val_gar_eqpto,e.situacao,c.processador_comp,c.memoria_comp,c.capac_armaz_comp,c.velocidade_ghzFROM equipamento e,computador cWHERE e.num_patrimonio=c.num_patr_comp;8) Mostrar todos os dados dos equipamentos do tipo Rede ordenados pelo patrimônioSQL> SELECT e.*, r.*FROM equipamento e,rede rWHERE e.num_patrimonio=r.num_patr_redeORDER BY e.num_patrimonio ;SQL> SELECTe.num_patrimonio,e.num_serie,e.cod_forn_eqpto,e.modelo_eqpto,e.fabricante_eqpto,e.num_nota_fisc_eqpto,e.dt_fornec_eqpto,e.val_gar_eqpto,e.situacao,r.tipo_eqpto_rede,r.qtde_portas,r.velocidade_mbpsFROM equipamento e,rede rWHERE e.num_patrimonio=r.num_patr_redeORDER BY e.num_patrimonio ; SQL Básico – Prof. Antonio Guardado - 052012
  13. 13. 139) Montar uma lista dos softwares instalados em cada equipamento do tipo Computador no seguinte formato : Número Patrimônio – Tipo Software – Número Licença – Data Instalação ordenado pela instalação mais recenteSQL> SELECT i.num_patr_eqpto,s.tipo_soft,i.num_lic_inst,i.dt_inicio_instFROM software s,instalacao iWHERE s.cod_soft=i.num_cod_softORDER BY i.dt_inicio_inst DESC;10) Mostrar o Número de patrimônio , Número de Série, Número de Licença e marca dos equipamentos que têm softwares do tipo Office instalados.SQL> SELECT i.num_patr_eqpto,e.num_serie,i.num_lic_inst,e.fabricante_eqptoFROM equipamento e,instalacao i,software sWHERE e.num_patrimonio=i.num_patr_eqptoAND i.num_cod_soft=s.cod_softAND s.tipo_soft=officeORDER BY 2 DESC, 1;11) Montar uma lista de fornecimento dos equipamentos com 12 meses degarantia no formato : Número Patrimônio – Modelo – Data Fornecimento – NomeFornecedorSQL> SELECT e.num_patrimonio,e.modelo_eqpto,e.dt_fornec_eqpto,f.nome_fornFROM equipamento e,fornecedor fWHERE e.cod_forn_eqpto=f.cod_fornAND e.temp_gar_eqpto= 12ORDER BY 3 DESC, 1;12) Montar uma lista de fornecimento dos softwares do tipo Sistema Operacional com mais de 10 licenças no formato : Número Patrimônio – Modelo – Data Fornecimento – Nome FornecedorSQL> SELECT i.num_patr_eqpto,e.modelo_eqpto,s.dt_fornec_soft,f.nome_fornFROM equipamento e,fornecedor f,software s,instalacao iWHERE s.cod_forn_soft=f.cod_fornAND s.cod_soft=i.num_cod_softAND e.num_patrimonio=i.num_patr_eqptoAND s.tipo_soft ilike %sistema operacional%AND s.qtde_licenca_soft >=10ORDER BY 4;13) Mostrar os periféricos alocados nos equipamentos no formato : Número Patrimônio Eqpto – Modelo Eqpto – Número Patrimônio Periférico – Tipo Periférico – Data Início e Término alocaçãoSQL> SELECTa.num_patr_comp_aloc,e.modelo_eqpto,p.num_patr_perif,p.tipo_perif,a.dt_ini_aloc,a.dt_ter_alocFROM equipamento e,periferico p,alocacao aWHERE e.num_patrimonio=a.num_patr_comp_alocAND p.num_patr_perif=a.num_patr_perif_alocORDER BY 2; SQL Básico – Prof. Antonio Guardado - 052012
  14. 14. 1414) Montar uma lista de todos os computadores com mais de 1GB de memória RAM que possuem softwares do tipo Ferramenta CASE instalados no formato : Número Patrimônio – Processador – Memória RAM – Descrição Software- Versão- Número Licença – Data InstalaçãoSQL> SELECTc.num_patr_comp,c.processador_comp,c.memoria_comp,s.desc_soft,s.versao_soft,i.num_lic_inst,i.dt_inicio_instFROM computador c,software s,instalacao iWHERE c.num_patr_comp=i.num_patr_eqptoAND s.cod_soft=i.num_cod_softAND c.memoria_comp>1AND s.tipo_soft ilike %ferramenta case%ORDER BY 1;15) Mostrar todos os dados dos computadores com menos de 100 GB de capacidade de armazenamento que não têm instalado qualquer software da Microsoft .SQL> SELECTe.num_patrimonio,e.num_serie,e.cod_forn_eqpto,e.modelo_eqpto,e.fabricante_eqpto,e.num_nota_fisc_eqpto,e.dt_fornec_eqpto,e.temp_gar_eqpto,e.situacao,c.processador_comp,c.memoria_comp,c.capac_armaz_comp,c.velocidade_ghzFROM equipamento e,computador c,instalacao i,software sWHERE e.num_patrimonio=c.num_patr_compAND e.num_patrimonio=i.num_patr_eqptoAND s.cod_soft=i.num_cod_softAND c.capac_armaz_comp < 100AND s.fabric_soft!=microsoft;16) Montar uma lista de todos os equipamentos de rede do tipo HUB com maisde 12 portas cujo tempo de garantia é de 12 meses e foram fornecidos há maisde uma ano no formato : Número Patrimônio – Qtde Portas – Data Fornecimento– Nome Fornecedor – Número Nota fiscalSQL> SELECT e.num_patrimonio, r.qtde_portas, e.dt_fornec_eqpto, f.nome_forn,e.num_nota_fisc_eqptoFROM equipamento e, rede r, fornecedor fWHERE f.cod_forn = e.cod_forn_eqptoAND e.num_patrimonio = r.num_patr_redeAND r.tipo_eqpto_rede = HUBAND r.qtde_portas > 12AND e.temp_gar_eqpto = 12AND e.dt_fornec_eqpto < (CURRENT_DATE - INTERVAL 1 YEAR)ORDER BY 1; SQL Básico – Prof. Antonio Guardado - 052012

×