Visita Encydia-Wikilingue.com

SQL

sql - Wikilingue - Encydia

SQL é uma linguagem formal declarativo, estandarizado ISO, para manipular informação em um banco.

SQL é um acrónimo (Structured Query Language) já que a ISO define-o com nome oficial Database Language SQL. Não é uma linguagem estruturada (pode ser usado em blocos ou procedimentos), Não é somente para consultas("queries") e desde o ponto de vista computacional não é uma linguagem já que não é Turing completo. (Fonte negación Acrónimo: "Visual Quickstart Guide SQL, 3th edition - Chris Fehily, Peachpit Press")

Conteúdo

Origens e evolução

As origens do SQL estão unidos aos dos banco relacionales. Em 1970 E. F. Codd propõe o modelo relacional e sócio a este um sublenguaje de acesso aos dados baseado no cálculo de pregados. Baseando nestas ideias, os laboratórios de IBM definem a linguagem SEQUEL (Structured English QUEry Language) que mais tarde seria amplamente implementado pelo SGBD (Sistemas Gestores de Banco# de dados) experimental System R, desenvolvido em 1977 também por IBM. No entanto, foi Oracle quem introduziu-o pela primeira vez em 1979 em um programa comercial.

O SEQUEL terminaria sendo o predecessor de SQL, sendo este uma versão evoluída do primeiro. O SQL passa a ser a linguagem por excelencia dos diversos SGBD relacionales surgidos nos anos seguintes e é por fim estandarizado em 1986 pelo ANSI, dando lugar à primeira versão regular desta linguagem, o "SQL-86" ou "SQL1". Ao ano seguinte este regular é também adoptado pela ISO.

No entanto, este primeiro regular não cobre todas as necessidades dos programadores e inclui funcionalidades de definição de armazenamento que se consideraram suprimir. De modo que em 1992 lança-se um novo regular ampliado e revisado do SQL chamado "SQL-92" ou "SQL2".

Na actualidade o SQL é o regular de facto da imensa maioria dos SGBD comerciais. E, ainda que a diversidade de acrescentados particulares que incluem as diferentes implementações comerciais da linguagem é ampla, o suporte ao regular SQL-92 é geral e muito amplo.

O ANSI SQL sofreu várias revisões e agregados ao longo do tempo:

Ano Nome Alias Comentários
1986 SQL-86 SQL-87 Primeira publicação feita por ANSI. Confirmada por ISO em 1987 .
1989 SQL-89 Revisão menor.
1992 SQL-92 SQL2 Revisão maior.
1999 SQL:1999 SQL2000 Agregaram-se expressões regulares, consultas recursivas (para relações hierárquicas), triggers e algumas características orientadas a objectos.
2003 SQL:2003   Introduz algumas características de XML , mudanças nas funções, estandardização do objecto sequence e das colunas autonumericas. (Ver Eisenberg et a o.: SQL:2003 Tens Been Published.)
2006 SQL:2006   ISO/IEC 9075-14:2006 Define as maneiras nas quais o SQL se pode utilizar conjuntamente com XML. Define maneiras importar e guardar dados XML em um banco SQL, manipulando-os dentro do banco e publicando o XML e os dados SQL convencionais em forma XML. Ademais, proporciona facilidades que permitem às aplicações integrar dentro de seu código SQL o uso de XQuery, linguagem de consulta XML publicado pelo W3C (World Wide Site Consortium) para acesso concorrente a dados ordinários SQL e documentos XML.
2008 SQL:2008   Permite o uso da cláusula ORDER BY fosse das definições dos cursores. Inclui os disparadores do tipo INSTEAD OF. Acrescenta a sentença TRUNCATE. (Ver [1].)

Características gerais

O SQL é uma linguagem de acesso a banco# de dados que explode a flexibilidade e potência dos sistemas relacionales permitindo grande variedade de operações nestes últimos.

É uma linguagem declarativo de "alto nível" ou "de não procedimento", que graças a sua forte base teórica e sua orientação ao manejo de conjuntos de registos, e não a registos individuais, permite uma alta produtividade em codificação e a orientação a objectos. Desta forma uma sozinha sentença pode equivaler a um ou mais programas que utilizar-se-iam em uma linguagem de baixo nível orientado a registos.

Optimização

Como já se disse acima, e costuma ser comum nas linguagens de acesso a banco# de dados de alto nível, o SQL é uma linguagem declarativo. Ou seja, que especifica que é o que se quer e não como o conseguir, pelo que uma sentença não estabelece explicitamente uma ordem de execução.

A ordem de execução interno de uma sentença pode afectar gravemente à eficiência do SGBD, pelo que se faz necessário que este leve a cabo uma optimização dantes de sua execução. Muitas vezes, o uso de índices acelera uma instrução de consulta, mas reduz a actualização dos dados. Dependendo do uso da aplicação, se priorizará o acesso indexado ou uma rápida actualização da informação. A optimização difere sensivelmente na cada motor de banco# de dados e depende de muitos factores.

Existe uma ampliação de SQL conhecida como FSQL (Fuzzy SQL, SQL difuso) que permite o acesso a banco# de dados difusos, usando a lógica difusa. Esta linguagem tem sido implementado a nível experimental e está a evoluir rapidamente.

Linguagem de definição de dados (LDD)

A linguagem de definição de dados (em inglês Data Definition Language, ou DDL), é o que se encarrega da modificação da estrutura dos objectos do banco. Existem quatro operações básicas: CREATE, ALTER, DROP e TRUNCATE.

CREATE

Este comando cria um objecto dentro do banco. Pode ser uma tabela, vista, índice, trigger, função, procedimento ou qualquer outro objecto que o motor do banco suporte.

Exemplo (criar uma tabela)

CREATE TABLE 'TABELA_NOMEIE CAMPO_1' INT,
   'CAMPO_2' STRING
)

ALTER

Este comando permite modificar a estrutura de um objecto. Podem-se agregar/tirar campos a uma tabela, modificar o tipo de um campo, agregar/tirar índices a uma tabela, modificar um trigger, etc.

Exemplo (agregar coluna a uma tabela)

ALTER TABLE 'TABELA_NOMEIE' (
   ADD NOVO_CAMPO INT UNSIGNED meel
)

DROP

Este comando elimina um objecto do banco. Pode ser uma tabela, vista, índice, trigger, função, procedimento ou qualquer outro objecto que o motor do banco suporte. Pode-se combinar com a sentença ALTER.

Exemplo

 ALTER TABLE ''TABELA_NOMEIE''
 (
    DROP COLUMN ''CAMPO_NOMEIE1''
 )

TRUNCATE

Este comando trunca todo o conteúdo de uma tabela. A vantagem sobre o comando DROP, é que se se quer apagar todo o conteúdo da tabela, é bem mais rápido, especialmente se a tabela é muito grande. A desventaja é que TRUNCATE só serve quando se quer eliminar absolutamente todos os registos, já que não se permite a cláusula WHERE. Conquanto, em um princípio, esta sentença pareceria ser DML (Linguagem de Manipulação de Dados), é em realidade uma DDL, já que internamente, o comando TRUNCATE apaga a tabela e recria-a e não executa nenhuma transacção.

Exemplo

 TRUNCATE TABLE ''TABELA_NOMEIE1''

Linguagem de manipulação de dados (LMD)

Definição

Uma linguagem de manipulação de dados (Data Manipulation Language, ou DML em inglês) é uma linguagem proporcionada pelo sistema de gestão de banco# de dados que permite aos utentes levar a cabo as tarefas de consulta ou manipulação dos dados, organizados pelo modelo de dados adequado.

A linguagem de manipulação de dados mais popular hoje em dia é SQL, usado para recuperar e manipular dados em um banco relacional. Outros exemplos de DML são os usados por banco# de dados IMS/DL1, CODASYL ou outras.

INSERT

Uma sentença INSERT de SQL agrega um ou mais registos a uma (e só uma) tabela em um banco relacional.

Forma básica

 INSERT INTO ''tabela'' (''coluna1'', [''coluna2,... '']) AVALIES valor1'', [''valor2,...''])

As quantidades de colunas e valores devem ser iguais. Se uma coluna não se especifica, ser-lhe-á atribuído o valor por omisión. Os valores especificados (ou implícitos) pela sentença INSERT deverão satisfazer todas as restrições aplicáveis. Se ocorre um erro de sintaxe ou se alguma das restrições é violada, não se agrega a bicha e se devolve um erro.

Exemplo

 INSERT INTO agenda_telefonica (nome, numero) AVALIES ('Roberto Jeldrez', 4886850);

Quando se especificam todos os valores de uma tabela, se pode utilizar a sentença encurtada:

 INSERT INTO ''tabela'' AVALIES valor1'', [''valor2,...''])

Exemplo (assumindo que 'nome' e 'número' são as únicas colunas da tabela 'agenda_telefonica'):

 INSERT INTO agenda_telefonica AVALIES ('Roberto Jeldrez', 4886850);

Formas avançadas

Inserções em múltiplas bichas

Uma característica de SQL (desde SQL-92) é o uso de construtores de bichas para inserir múltiplas bichas ao mesmo tempo, com uma sozinha sentença SQL:

INSERT INTO "tabela" ("coluna1", ["coluna2,... "]) 
               AVALIES valor1a ," ["valor1b,..."]), ("avalie2a ," ["avalie2b,..."]),...

Esta característica é suportada por DB2, PostgreSQL (desde a versão 8.2), MySQL, e H2.

Exemplo (assumindo que 'nome' e 'número' são as únicas colunas na tabela 'agenda_telefonica'):

INSERT INTO agenda_telefonica AVALIES ('Roberto Fernández', '4886850'), ('Alejandro Sosa', '4556550');

Que podia ter sido realizado pelas sentenças

INSERT INTO agenda_telefonica AVALIES ('Roberto Fernández', '4886850');
INSERT INTO agenda_telefonica AVALIES ('Alejandro Sosa', '4556550');

Notar que as sentenças separadas podem ter semántica diferente (especialmente com respeito aos triggers), e pode ter diferente rendimento que a sentença de inserção múltipla.

Para inserir várias bichas em MS SQL pode utilizar essa construção:

INSERT INTO phone_book
SELECT 'John Doe', '555-1212'
UNION ALL
SELECT 'Peter Doe', '555-2323';

Tenha em conta que não se trata de uma sentença SQL válida de acordo com o regular SQL (SQL: 2003), devido à cláusula subselect incompleta.

Para fazer o mesmo em Oracle usa-se DUAL TABLE, sempre que trate-se de só uma simples bicha:

INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM DUAL
UNION ALL
SELECT 'Peter Doe','555-2323' FROM DUAL

Uma implementação conforme ao regular desta lógica mostra-se o seguinte exemplo, ou como se mostra acima:

INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM LATERAL ( AVALIES (1) ) AS t(c)
UNION ALL
SELECT 'Peter Doe','555-2323' FROM LATERAL ( AVALIES (1) ) AS t(c)
Cópia de bichas de outras tabelas

Um INSERT também pode se utilizar para recuperar dados de outros, a modificar se é necessário e a inserir directamente na tabela. Tudo isto se faz em uma sozinha sentença SQL que não implica nenhum processamento intermediário na aplicação cliente. Um SUBSELECT utiliza-se em lugar da cláusula AVALIES. O SUBSELECT pode conter JOIN, telefonemas a funções, e pode inclusive consultar na mesma TABELA os dados que se insere. Logicamente, o SELECT avalia-se dantes que a operação INSERT esteja iniciada. Um exemplo dá-se a seguir.

INSERT INTO phone_book2
 
SELECT *
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')

Uma variação é necessária quando alguns dos dados da tabela fonte se está a inserir na nova tabela, mas não todo o registo. (Ou quando os esquemas das tabelas não são iguais.)

INSERT INTO phone_book2 ( [name], [phoneNumber] )
 
SELECT [name], [phoneNumber]
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')

O SELECT produz uma tabela (temporária), e o esquema da tabela temporária deve coincidir com o esquema da tabela onde os dados são inseridos.

UPDATE

Uma sentença UPDATE de SQL é utilizada para modificar os valores de um conjunto de registos existentes em uma tabela.

Forma básica

 UPDATE ''tabela'' SET ''coluna1'' = ''valor1'' ,''coluna2'' = ''valor2'',...
 WHERE ''columnaN = ''valorN''

Exemplo

UPDATE My_table SET field1 = 'updated avalie' WHERE field2 = 'N';
.

DELETE

Uma sentença DELETE de SQL apaga um ou mais registos existentes em uma tabela.

Forma básica

 DELETE FROM ''tabela'' WHERE ''coluna1'' = ''valor1''

Exemplo

DELETE FROM My_table WHERE field2 = 'N';

Recuperação de chave

Os desenhadores de banco# de dados que usam uma chave suplente como a chave principal para a cada tabela, executar-se-á no ocasional palco no que é necessário recuperar automaticamente o banco, gerando uma chave primária de uma sentença SQL INSERT para seu uso em outras sentenças SQL. A maioria dos sistemas não permitem sentenças SQL INSERT para retornar bicha de dados. Portanto, faz-se necessário aplicar uma solução em tais palcos.

Implementações comuns incluem:

SELECT *
FROM NEW  ( TABLE INSERT INTO phone_book AVALIES ( 'Cristobal Jeldrez','0426.817.10.30' ) ) AS t
INSERT INTO phone_book AVALIES ( 'Cristobal Jeldrez','0426.817.10.30' )
RETURNING phone_book_vão INTO v_pb_id
SET NoCount ON;
INSERT INTO phone_book AVALIES ( 'Cristobal Jeldrez','0426.817.10.30' );
SELECT @@Identity AS Id

Disparadores (Triggers)

Os desencadenantes, também conhecidos como disparadores, (triggers em inglês) são definidos sobre a tabela na que opera a sentença INSERT, os desencadenantes são avaliados no contexto da operação. Desencadenantes BEFORE INSERT permitem a modificação dos valores que inserir-se-á na tabela. Desencadenantes AFTER INSERT não pode modificar os dados doravante, mas se pode utilizar para iniciar acções em outras tabelas, por exemplo para aplicar mecanismos de auditoría.

Sistemas de gestão de banco# de dados

Os sistemas de gestão de banco# de dados com suporte SQL mais utilizados são, por ordem alfabética:

Veja-se também

Obtido de http://ks312095.kimsufi.com../../../../articles/a/r/t/Encydia-Wikilingue%7EArt%C3%ADculos_solicitados_2358.html"
Your Ad Here