Baixe o app para aproveitar ainda mais
Prévia do material em texto
TRABALHO DE BANCO DE DADOS A LINGUAGEM SQL NIXON DE CASTRO SILVA Salvador 2014 1 - INTRODUÇÃO O uso de comandos SQL é fundamental quando se trabalha com banco de dados. A instrução SQL é usada em diversas linguagens que agregam o poder da Structured Query Language, tais como: Cobol, Natural, SQL Server, Oracle, MySql e outros. Atualmente, a SQL pode ser considerada um padrão para manipulação de dados em um banco de dados. Duas entidades, a ANSI (American National Standards Institute) e a ISO (International Standards Organization), vêm ao longo do tempo padronizando a linguagem SQL. O primeiro padrão (SQL-86) foi definido pela ANSI em 1986 e consistia basicamente na SQL da IBM, com poucas modificações. É um conjunto de comandos de manipulação de banco de dados utilizado para criar e manter a estrutura desse banco de dados, além de incluir, excluir, modificar e pesquisarinformações nas tabelas dele. A linguagem SQL não é uma linguagem de programação autônoma; poderia ser chamada de "sublinguagem". Quando se escrevem aplicações para banco de dados, é necessário utilizar uma linguagem de programação tradicional (C, Java, Pascal, COBOL, etc...) e embutir comandos SQL para manipular os dados. m um modelo relacional, apenas uma tipo de estrutura de dados existe: a tabela. Novas tabelas são criadas com a junção ou combinação de outras tabelas. Utilizando apenas um comando SQL é possível pesquisar dados em diversas tabelas ou atualizar e excluir diversas linhas das mesmas. A linguagem SQL não é procedural, logo é possível especificar o que deve ser feito, e não como deve ser feito. Dessa forma, um conjunto de linhas (set) será atingido pelo comando e não cada uma das linhas, como é feito no ambiente procedural. Portanto, não é necessário entender o funcionamento interno do banco de dados e como e onde estão armazenados fisicamente os dados. 2 - HISTÓRICO Segundo [Melton,1999], as duas organizações atualmente envolvidas na padronização do SQL são o comitê americano ANSI e o comitê internacional ISO. Mais Especificamente, a comunidade internacional trabalha através da ISO/IEC/JTC1 (Joint Technical Committee 1), responsável por desenvolver e manter padrões relacionados à Tecnologia da Informação. Dentro da JTC1, um subcomitê denominado SC32 – Data Management and Interchange – foi formado para reunir vários padrões relacionados à banco de dados e metadados. SC32, por sua vez, é formado por um número de Working Groups que realmente fazem o trabalho técnico onde o WG3 (Database Languages) é responsável pelo padrão SQL. Nos Estados Unidos, os padrões relacionados à banco de dados, incluindo o SQL, são tratados pela ANSI NCITS H2 (National Committee for Information Technology Standards – Technical Comittee on Database), na qual IBM, Microsoft e Oracle têm seus representantes. O primeiro padrão (SQL-86) foi definido em 1986 pelo ANSI e no ano seguinte a ISSO adotou o SQL como padrão. Esta primeira geração consistia basicamente na implementação da IBM. Em 1989 surgiu uma nova versão (SQL-89) em que foram adicionados recursos importantes como chave primária, chave estrangeira e valores nulos. No ano em o SQL-89 foi publicado, a H2 tornou-se muito ativa nas propostas escritas para a especificação que gerou o SQL-92, o padrão até hoje mais seguido pelos gerenciadores de bancos de dados. Alterações significativas como domínios, tabelas temporárias, novos tipos de junção (left, right e natural join), expressões nomeadas (cláusula AS), valores únicos (unique), expressões na cláusula from, entre outras, foram incluídas neste padrão. Mas desde 1993, foi sendo desenvolvido um trabalho para atualizar o padrão SQL de modo que atendesse às características das últimas versões lançadas pelos bancos de dados comerciais. Como resultado, surgiu o padrão SQL:1999 (SQL3). Esta versão foi muito mais ambiciosa introduzindo novos tipos de dados, consultas recursivas, gatilhos e o conceito de orientação a objetos. Algumas implementações existentes no mercado adotam instruções SQL diferentes do padrão, gerando extensões. Uma instrução SQL raramente pode ser transportada entre sistemas de banco de dados sem maiores modificações. Alguns acreditam que a incompatibilidade é intencional para que clientes dependam de um banco de dados específico, Então, como garantir que as instruções SQL de uma aplicação funcionarão da mesma forma se ocorrer migração de banco de dados? As instruções básicas não são críticas, mas as avançadas sim. Se esta garantia for desejada, é necessário seguir o padrão rigorosamente, o que pode comprometer facilidade e desempenho. Os vendedores de bancos de dados criam extensões para melhorar o desempenho e tornar mais fácil a manipulação dos dados. Eles se preocupam em: criar soluções rápidas para atender a demanda do mercado, tornar a implementação mais atrativa e ter vantagens com relação à concorrência. Porém, atualmente, os vendedores estão mais preocupados com a padronização. As novas versões dos produtos já estão suportando grande parte dos recursos. Há também o inverso, soluções extremamente eficientes criadas pelos vendedores foram padronizadas (como por exemplo, o conceito de papéis). 3 - Álgebra Relacional linguagem de consulta que consiste em um conjunto de operações, tendo como entrada uma ou duas relações e produzindo como resultado uma nova relação. Operações mais importantes: INSTITUTO BAIANO DE ENSINO SUPERIOR CURSO DE CIENCIAS DA COMPUTAÇÃO Select project Union Namely natural join assignment set difference cartesian product rename set intersection division Operações primárias: operam sobre uma única relação: select, project, rename. Operações binárias: operam sobre duas relações: union, set difference, cartesian product. 3.1.1 - Operação Seleção (SELECT) Seleciona as tuplas que satisfaçam um determinado predicado. A letra sigma representa a seleção, o predicado aparece subscrito a sigma, e a relação utilizada é colocada entre parênteses. Ex: σnome_agencia = “SAL-1”(conta) : seleciona as tuplas da relação conta cuja agência é igual a “SAL-1”. O resultado da seleção é : nome_agencia numero_conta saldo SAL-1 0001 1200 SAL-1 0002 3000 Podem ser usados comparações do tipo: =,≠,≥,>,≤,< e os conectivos: ∧ (e) ∨ (ou). 3.1.2 - Operação Projeção (PROJECT) Denotada pela letra grega pi (π), esta operação retorna a relação com somente os atributos selecionados, eliminando as linhas em duplicidade. Os atributos aparecem ao lado de pi, subscrito, e a relação aparece entre parênteses. Ex: πnome_agência,saldo(agencia) nome_agencia saldo NOH-1 260050 SAL-1 455580 POA-1 1250369 SAL-2 125588 Juntando operações SELECT E PROJECT: podem-se unir operações desde que elas tratem de relações. πnome_agencia,saldo(σnome_agencia = “SAL-1”(conta) ) nome_agencia saldo SAL-1 1200 SAL-1 3000 Conta nome_agencia numero_conta saldo SAL-1 0001 1200 SAL-1 0002 2000 NOH-1 0003 4500 POA-1 0004 4000 POA-1 0005 1500 NOH-1 0006 200 SAL-2 0007 3750 nome_agencia numero_conta saldo SAL-1 0001 1200 SAL-1 0002 3000 3.1.3 - Operação União (UNION) Considere a seguinte consulta: selecionar todos os nomes de clientes que tenham um empréstimo, uma conta ou ambos. Devem-se utilizar as relações “depositante” e “devedor”. πnome_cliente(devedor) ∪ πnome_cliente(depositante) Uma operação UNION entre duas relações “r” e “s” só é possível se: As relações “r” e “s” têm o mesmo número de atributos; Os domínios dos i-ésimo atributo de “r” e o i-ésimo atributo de “s”devem ser os mesmos para todo “i”. 3.1.4 - Operação Diferença entre conjuntos Sendo “r” e “s” duas relações, “r-s” tem como resultado o conjunto de tuplas que estão na relação “r”, mas não se encontram na relação “s”. Ex: selecionar todos os clientes que tem conta mas não tem empréstimo. πnome_cliente(depositante) - πnome_cliente(devedor) 3.1.6 - Operação Produto Cartesiano Permite combinar informações de duas relações quaisquer. Representado por “r x s”. Ex: Qual o produto cartesiano entre as relações devedor e emprestimo. (devedor)x(emprestimo) = (nome_cliente, num_emprestimo, nome_agencia, num_emprestimo, total) Obs.: Para evitar o problema da duplicidade de nomes de atributos insere-se o nome da relação antes do atributo: (nome_cliente, devedor.num_emprestimo, nome_agencia, emprestimo.num_emprestimo, total) Quantas e quais tuplas aparecerão na relação (devedor x emprestimo) ? Se a relação (devedor) possui “n” tuplas e a relação empréstimo tem “m” tuplas, então o produto cartesiano (devedor x empréstimo) tem n*m tuplas. nome_cliente devedor.num_emprestimo nome_agencia emprestimo.num_emprestimo total João E-001 SAL-1 E-001 5420 João E-001 POA-1 E-005 25400 João E-001 NOH-1 E-001 40000 Ana E-005 SAL-1 E-008 5420 Helena E-007 POA-1 E-005 25400 Andrea E-008 NOH-1 E-001 40000 Nilda E-009 SAL-1 E-008 5420 Agora, deve-se encontrar todos os nomes de clientes que tenham um empréstimo na agência “SAL-1”, através da operação: σnome_agência = “SAL-1”(devedor x emprestimo) nome_client devedor.num_emprestimo nome_agencia emprestimo.núm_emprestimo total João E-008 SAL-1 E-001 40000 Ana E-005 SAL-1 E-001 40000 Helena E-001 SAL-1 E-001 40000 Obs: Como a operação produto cartesiano associa todas as tuplas de empréstimos a todas as tuplas de devedor, então existem empréstimos que estão relacionados erroneamente a alguns clientes. Para contornar este problema, devemos exigir que o atributo devedor.num_emprestimo seja igual ao atributo emprestimo.num_emprestimo. Assim temos: σdevedor.num_emprestimo = emprestimo.num_emprestimo (σnome_agência = “SAL-1” (devedor x empréstimo)) nome_cliente devedor.num_emprestimo nome_agencia emprestimo.num_emprestimo total João E-001 SAL-1 E-001 40000 πnome_cliente(σdevedor.num_emprestimo = emprestimo.num_emprestimo (σnome_agência = “SAL-1” (devedor x empréstimo))) nome_cliente João 3.1.5 - Operação Renomeação (Rename) Representado pela letra grega rho (ρ), permite dar um nome a uma determinada expressão. Assim, a expressão em álgebra relacional E abaixo tem por resultado uma expressão sob o nome x. ρx(E) Ex: Desejamos o nome dos clientes que moram na mesma cidade de Francisco. Primeiro, é necessário descobrir em qual cidade Francisco mora, fazendo uma seleção: σnome_cliente = “Francisco”(cliente), E depois uma projeção: πcidade_cliente(σnome_cliente = “Francisco”(cliente)) Para encontrar os outros clientes, é necessário fazer uma varredura na relação cliente, comparando o atributo cidade_cliente com o atributo da relação obtida após a projeção anterior, ficando assim: πnome_cliente(σcliente.cidade_cliente = cid_francisco.cidade_cliente (cliente x ρcid_francisco(πcidade_cliente(σnome_cliente = “Francisco”(cliente))))) 3.2 - Outras Operações de Álgebra Relacional As operações fundamentais da álgebra relacional são suficientes para expressar qualquer consulta de álgebra relacional. Entretanto, se nos retringirmos somente as operações fundamentais, certas consultas comuns serão extensas para expressar. Portanto, definimos as operações adicionais que não acrescetam qualquer capacidade a álgebra, mas simplificam consultas comuns. 3.2.1 - Operação de Interseção de conjuntos Captura todas as tuplas que encontram-se em uma relação “r”, e que também encontram-se na relação “s”. Ex: Selecionar os nomes de clientes que possuem uma conta e um empréstimo. πnome_cliente(devedor) ∩ πnome_cliente(depositante) 3.2.2 - Operação de Junção Natural A junção natural ou natural join é uma operação binária que permite combinar seleções e um produto cartesiano em uma só operação. Ex: encontrar todos os nomes de clientes que tenham um empréstimo no banco, bem como o total emprestado. Utilizando apenas as operações fundamentais, poderia ser resolvido assim: πnome_cliente, emprestimo.num_emprestimo, total(σdevedor.num_emprestimo = emprestimo.num_emprestimo (devedor x emprestimo)) No entanto, é possível simplificar esta operação utilizando o símbolo da junção natural: A junção natural forma um produto cartesiano das duas relações, e já executa uma seleção, fazendo a equivalência dos atributos que aparecem em ambos os esquemas da relação, e por último, remove os atributos em duplicidade. πnome_cliente, num_emprestimo total(devedor∞ empréstimo) nome_cliente num_emprestimo total João E-001 40000 Ana E-005 25400 Helena E-008 5420 3.2.3 - Operação de Divisão A divisão de duas relações R ÷ S, onde os atributos de S estão contidos nos atributos de R, A(R) ⊆ A(S), resulta na relação T, onde A(T) = { A(R) – A(S) }, onde para cada tupla t que aparece no resultado, os valores de t devem aparecer em R, combinando com cada tupla de S. Esta operação é utilizada nas consultas em que se emprega a frase “para todos”; 4 - PRINCIPAIS COMANDOS 4.1 Comandos DDL 4.1.2 - Comando: Create Table O comando CREATE TABLE permite criar e definir a estrutura de uma tabela(arquivo) definido as colunas (campos) e as chaves primárias e estrangeiras existentes. Sua sintaxe é: CREATE TABLE nome-tabela (nome-coluna tipo-do-dado [NOT NULL] [NOT NULL WITH DEFAULT] CONSTRAINT nome PRIMARY KEY (nome-coluna-chave) CONSTRAINT nome FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES nome-tabela-pai(nome-coluna-pai)) ON DELETE [RESTRICT] [CASCADE] [SET NULL] Onde: nome-tabela - Representa o nome da tabela que será criada. nome-coluna - Representa o nome da coluna que será criada. A definição das colunas de uma tabela é feita relacionando-as uma após a outra. tipo-do-dado - Define o tipo e tamanho dos campos definidos para a tabela. Os tipos de dados mais comuns são: Numéricos: (NUMBER) Smallint - Armazena valores numéricos, em dois bytes binários, compreendidos entre o intervalo -32768 a +32767. Integer - Armazena valores numéricos, em quatro bytes binários, compreendidos entre o intervalo -2147483648 a +2147483647 Decimal(n,m) - Armazena valores numéricos com no máximo 15 dígitos. Nesta opção deve ser definida a quantidade de dígitos inteiros (n) e casas decimais (m) existentes no campo. Alfanuméricos: Varchar (n) - Definir um campo alfanumérico de até n caracteres, onde n deve ser menor ou igual a 254 caracteres. Char (n) - Definir um campo alfanumérico de n caracteres, onde n deve ser menor ou igual a 254 caracteres. Long Varchar - Definir um campo alfanuméricos de comprimento maior que 254 caracteres. Date - Definir um campo que irá armazenar datas. Time - Definir um campo que irá armazenamento de horário. NOT NULL - Exige o preenchimento do campo, ou seja, no momento da inclusão é obrigatório que possua um conteúdo. NOT NULL WITH DEFAULT - Preenche o campo com valores pre-definidos, de acordo com o tipo do campo, caso não seja especificado o seu conteúdo no momento da inclusão do registro. Os valores pre-definidos são: Campos numéricos - Valor zero. Campos alfanuméricos - Caracter branco. Campo formato Date - Data corrente. Campo formato Time - Horário no momento da operação. 4.1.3 - Comando: Alter Table O comando ALTER TABLE permite alterar a estrutura de uma tabela(arquivo) acrescentando, alterando, retirando e alterando nomes, formatos das colunas e a integridade referencial definidas em uma determinada tabela. A sintaxe correta paraesse comando é: ALTER TABLE nome-tabela DROP nome-coluna ADD nome-coluna tipo-do-dado [NOT NULL] [NOT NULL WITH DEFAULT] RENAME nome-coluna novo-nome-coluna RENAME TABLE novo-nome-tabela MODIFY nome-coluna tipo-do-dado [NULL][NOT NULL] [NOT NULL WITH DEFAULT] ADD CONSTRAINT nome PRIMARY KEY nome-coluna DROP PRIMARY KEY nome-coluna ADD CONSTRAINT nome FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES nome-tabela-pai (nome-campo-pai) ON DELETE [RESTRICT][CASCADE][SET NULL] DROP FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabela-pai) Onde: nome-tabela - Representa o nome da tabela que será atualizada. nome-coluna - Representa o nome da coluna que será criada. tipo-do-dado - Cláusula que define o tipo e tamanho dos campos definidos para a tabela. DROP nome-coluna - Realiza a retirada da coluna especificada na estrutura da tabela. ADD nome-coluna tipo-do-dado - Realiza a inclusão da coluna especificada na estrutura da tabela. Na coluna correspondente a este campo nos registros já existentes será preenchido o valor NULL (Nulo). As definições NOT NULL e NOT NULL WITH DEFAULT são semelhantes à do comando CREATE TABLE. RENAME nome-coluna novo-nome-coluna - Realiza a troca do nome da coluna especificada. RENAME TABLE novo-nome-tabela - Realiza a troca do nome da tabela especificada. MODIFY nome-coluna tipo-do-dado - Permite a alteração na característica da coluna especificada. ADD CONSTRAINT nome PRIMARY KEY nome-coluna - Esta opção é utilizada quando é acrescido um novo campo como chave primária da tabela. DROP PRIMARY KEY nome-coluna - Esta opção é utilizada quando é retirado um campo como chave primária da tabela. ADD CONSTRAINT nome FOREIGN KEY nome-coluna - Esta opção é utilizada quando é acrescido um novo campo sendo ele uma chave estrangeira. DROP FOREIGN KEY nome-coluna - Esta opção é utilizada quando é retirada uma chave estrangeira da estrutura da tabela. 4.1.4 - Comando: Drop Table O comando DROP TABLE permite excluir a estrutura e os dados existentes em uma tabela. Após a execução deste comando estarão deletados todos dados, estrutura e índices de acessos que estejam a ela associados. A sintaxe correta para esse comando é: onde: DROP TABLE nome-tabela a) nome-tabela - Representa o nome da tabela que será deletada. 4.1.5 - Comando: Create Index O comando CREATE INDEX permite criar uma estrutura de índice de acesso para uma determinada coluna em uma tabela. Um índice de acesso permite um acesso mais rápido aos dados em uma operação de seleção. Os índices podem ser criados a partir de um ou mais campos de uma tabela. A sintaxe para a execução desse comando é: CREATE [UNIQUE] INDEX nome-índice ON nome-tabela (nome-coluna[ASC], [nome-coluna [ASC ] ]) [DESC] [DESC] onde: nome-índice - Representa o nome da estrutura de índice que será criada. nome-tabela - Representa o nome da tabela que contem a coluna na qual será criada o índice de acesso. nome-coluna - Representa o nome da coluna que será criada. Opção ASC/DESC - Representa a criação do índice ordenada crescentemente (ASC) ou decrescentemente (DESC). CREATE [UNIQUE] INDEX nome-índice ON nome-tabela (nome-coluna[ASC], [nome-coluna [ASC ] ]) [DESC] [DESC] 4.1.6 - Comando: Drop Index Este comando exclui uma estrutura de índice de acesso para uma determinada coluna em uma tabela. A sintaxe correta para esse comando é: DROP INDEX nome-índice onde: a) nome-índice - Representa o nome da estrutura de índice que será deletada. 4.2 - Comandos DML 4.2.1 - Instrução INSERT INTO Este comando permite adicionar um ou vários registros a uma tabela do Banco de Dados. A sintaxe para a execução é: INSERT INTO nome-tabela [(nome-coluna, ...)] VALUES (relação dos valores a serem incluídos) onde: nome-tabela - Representa o nome da tabela onde será incluída o registro. nome-coluna - Representa o nome da(s) coluna(s) terão conteúdo no momento da operação de inclusão. Relação dos valores:- Representa os valores a serem incluídos na tabela. Obs.: Este comando pode ser executado de duas maneiras: Quando todos os campos da tabela terão conteúdo - Neste caso não é necessário especificar as colunas, entretanto a relação dos valores a serem incluídos deverão obedecer a mesma seqüência da definição da tabela. Por exemplo: INSERT INTO Alunos VALUES (2, "Andre", "303569871", "R. Jaboticaba 37", 27/03/1978, "14-5223778"); Quando apenas parte dos campos da tabela terão conteúdo - Neste caso devem ser especificadas todas as colunas que terão conteúdo e os valores relacionados deverão obedecer esta seqüência. Para os campos que não tem conteúdo especificado será preenchido o valor NULL, como mostra o exemplo abaixo: INSERT INTO Alunos (ra, nome, rg, endereco) VALUES (1, "Anderson", "2722589-1", "R. Vendaval, 75”); INSERT INTO Alunos ( ra, nome, rg, endereco, data_nascimento, telefone )SELECT ra, nome, rg, endereco, data_nascimento, fone; Instrução UPDATE Objetivo: Esse comando permite atualizar os dados de um ou um grupo de registros em uma tabela do Banco de Dados. Sua sintaxe é: UPDATE nome-tabela SET <nome-coluna = <novo conteúdo para o campo> [nome-coluna = <novo conteúdo para o campo>] WHERE condição Comentários UPDATE é especialmente útil quando se quer alterar muitos registros ou quando os registros que se quer alterar estão em várias tabelas. É possível alterar vários campos ao mesmo tempo. O exemplo abaixo altera o professor da disciplina de S.O. no período noturno, atribuindo a disciplina um novo Professor. UPDATE Leciona SET cod_pro = 3 WHERE cod_dis = 2 OR cod_dis = 7; UPDATE não gera um conjunto de resultados. Se você quiser saber quais resultados serão alterados, examine primeiro os resultados da consulta seleção que use os mesmos critérios e então execute a consulta atualização. 4.2.2 - Instrução Delete Essa instrução permite remover (deletar) um ou um grupo de registros em uma tabela do Banco de Dados. Sintaxe: DELETE * FROM nome-tabela WHERE condição onde: nome-tabela - Representa o nome da tabela cujos registros serão deletados. condição - Representa a condição para a deleção dos registros. Este seleção poderá resultar em um ou vários registros. Neste caso a operação irá ocorrer em todos os registros selecionados. Comentários DELETE é especialmente útil quando se quer excluir muitos registros. Para eliminar uma tabelainteira do banco de dados. Pode-se usar DELETE para remover registros de tabelas que estão em uma relação um por várioscom outras tabelas. Operações de exclusão em cascata fazem com que os registros das tabelas que estão no lado "vários" da relação sejam excluídos quando os registros correspondentes do lado "um" da relação são excluídos na consulta. Por exemplo, nas relações entre as tabelas Clientes e Pedidos, a tabela Clientes está do lado "um" e a tabela Pedidos está no lado "vários" da relação. Excluir um registro em Clientes faz com que os registros correspondentes em Pedidos sejam excluídos se a opção de exclusão em cascata for especificada. Uma consulta de exclusão exclui registros inteiros e não apenas dados em campos específicos. Se quiser excluir valores de um campo específico, crie uma consulta atualização que mude os valores para Null. Importante Após remover os registros usando uma consulta exclusão, não será possível desfazer a operação. Se quiser saber quais arquivos foram excluídos, primeiro examine os resultados de uma consulta seleção que use o mesmo critério e então, execute a consulta exclusão. Mantenha os backups de seus dados. Se você excluir os registros errados, poderá recuperá-los a partir dos seus backups. Exemplo de instrução DELETE Esse exemplo exclui todos os registros de Professores cujo código seja 1. DELETE * FROM ProfessoresWHERE codigo=1; Se fosse necessário passar um parâmetro para o delete a estrutura seria assim DELETE * FROM Professores WHERE Professores.nome=[nome professor]; 4.2.3 - Instrução Select A instrução SELECT é a mais poderosa da linguagem SQL. Ela permite selecionar um conjunto de registros em uma ou mais tabelas que atenda a uma determinada condição definida pelo comando. Sua sintaxe é: SELECT ALL FROM nome-tabela [AS APELIDO] [,nome-tabela] DISTINCT WHERE condição GROUP BY nome-coluna HAVING condição ORDER BY nome-campo ASC DESC onde: nome-tabela - Representa o nome da(s) tabela(s) que contem as colunas que serão selecionadas ou que serão utilizadas para a execução da consulta. Apelido: Os nomes que serão usados como títulos de colunas em vez dos nomes originais das colunas na tabela. condição - Representa a condição para a seleção dos registros. Este seleção poderá resultar em um ou vários registros. nome-coluna - Representa a(s) coluna(s) cujos resultados são grupados para atender à consulta. ALL (*) - Opção default. Mostra todos os valores obtidos na seleção. DISTINCT - Opção que mostra os valores obtidos na seleção eliminando as duplicidades. WHERE - Especifica o critério de seleção dos registros nas tabelas especificadas. GROUP BY - Especifica o(s) campo(s) que serão grupados para atender a consulta. HAVING - Especifica uma condição para seleção de um grupo de dados. Esta opção só é utilizada combinada com a opção GROUP BY. ORDER BY - Esta opção quando utilizada apresenta o resultado da consulta ordenado de forma crescente ou decrescente pelos campos definidos. 4.2.4 - A Clausula WHERE Freqüentemente é necessário localizar registros em um banco de dados que satisfaçam certos critérios de seleção. O SQL utiliza a clausula WHERE para especificar os critérios de seleção para a consulta. O formato mais simples para uma consulta com critérios é: SELECT * FROM nome-tabela WHERE condição; SELECT * FROM Alunos WHERE ano_nascimento < 1984; A condição da cláusula WHERE pode conter os operadores <, >, <=, >=, <> e LIKE. O operador LIKE é utilizado para coincidência de padrão, o que permite a busca de valores semelhantes ao digitado utilizando os caracteres curinga (* e ?). O asterisco indica qualquer número de caracteres em seqüência na posição do asterisco dentro do padrão. Já a interrogação indica um único caracter na posição. Por exemplo, em uma tabela que temos os alunos Anderson, Andre e Manoel. SELECT * FROM Alunos WHERE nome LIKE “?n*”; No SELECT acima o retorno será Anderson e Andre, uma vez que buscamos apenas os valores iniciados por qualquer letra, tendo a segunda letra um “n” e finalizado por qualquer sequência. SELECT * FROM Alunos WHERE nome LIKE “*n*”; Nesse SELECT procuramos qualquer aluno que tenha a letra “n” em seu nome, no caso Anderson, Andre e Manoel. 5. CARACTERÍSTICAS A ideia original da SQL só previa seu uso de forma interativa. Após sofrer acréscimos, ela passou também a ter capacidade de ser utilizada em linguagens hospedeiras, tais como: COBOL, FORTRAN, “C”, etc. atualmente, a linguagem SQL assume um papel muito importante nos sistemas de gerenciamento de banco de dados, podendo ter muitos enfoques, algumas características são listadas abaixo: Linguagem interativa de consulta (query AdHoc) – por meio de comandos SQL, os usuários podem montar consultas poderosas sem a necessidade da criação de um programa, podendo utilizar Forms ou ferramentas de montagem de relatório; Linguagem de programação para acesso a banco de dados – comandos SQL embutidos em programas de aplicação que acessam os dados armazenados; Linguagem de administração de banco de dados – o responsável pela administração do banco de dados (DBA) pode utilizar comandos SQL para realizar suas tarefas; Linguagem cliente/servidor – os programas (cliente) dos computadores pessoais usam comandos SQL para se comunicarem por meio de uma rede local, compartilhando os dados armazenados em um único local (servidor). A arquitetura cliente/servidor minimiza o trafego de dados pela rede; Linguagem para banco de dados distribuído – a SQL auxilia na distribuição dos dados por meio de vários nós conectados ao sistema de computação. Auxilia também na comunicação de dados com outros sistemas; Caminho de acesso a outros bancos de dados em diferentes máquinas – a SQL auxilia na conversão entre diferentes produtos de banco de dados colocados em diferentes máquinas (de micro até mainframe). 6. BIBLIOGRAFIA MACHADO, Felipe, ABREU, Mauricio; Projeto de Banco de Dados – Uma Visão Prática. 12 ed. : Érica, 2005. DATE, C. J.; Introdução a Sistemas de Banco de Dados. 7 ed. Rio de Janeiro: Campus, 2000. ELMASRI, Ramez, NAVATHE, S. B.; Sistemas de banco de dados. São Paulo : Pearson Addison Wesley, 2011. SILBERSCHATZ, Abraham; Sistema de banco de dados. 5 ed. Rio de Janeiro : Elsevier, 2006.
Compartilhar