Anda di halaman 1dari 7

Linguagem SQL (Structured Query Language)

* Padro em SGBD relacionais * Implementa operaes da lgebra relacional 1) DDL - Data Definition Language a) Definio de uma relao (ou tabela) Create table nome_tabela ( nome_atributo 1 domnio 1, ... ... nome_atributo n domnio n, constraint nome_ri primary key (lista_atributos) [constraint nome_ri foreign key (nome_atributo) references nome_tabela] ); Exemplo: BD Hospitalar Create table medicos ( codm number, nomem varchar2(30), idade number, especialidade varchar2(20), constraint pk_medicos primary key(codm) ); Criar: Pacientes(codp, nomep, idade, problema) Consultas(codm, codp, data, hora) data domnio date hora domnio time Obs.: Chave estrangeira define-se como: constraint fk_consultas foreign key(codm) references medicos b) Alterao de uma tabela Alter table nome_tabela {add {nome_atributo domnio | constraint especificao_ri} | drop {nome_atributo | constraint nome_ri}} Exemplo: incluso/excluso do atributo tempo_servio na tabela Mdicos - Alter table medicos add tempo_servico single; - Alter table medicos drop tempo_servico Obs.: Clusula add: inclui um novo atributo na tabela, sem valor inicial (null) Clusula drop: no remove atributos que formam a chave primria da tabela c) Remoo de uma tabela Drop table nome_tabela;

Exemplo: drop table mdicos 2) DML - Data Manipulation Language a) Comandos de Atualizao do BD a1) Insero de Tuplas Insert into nome_tabela values (lista_campos) Exemplo: Insero do medico Joo Insert into mdicos values ( 1, Joo, 20, clnico geral); Obs.: Valores nulos podem estar presentes em alguns atributos Insert into mdicos values (100, Mister X, null, null); 1

a2) Alterao de Tuplas Update nome_tabela set alteraes [ where condio] Exemplo: Alterar a especialidade da mdico Joo para ortopedia update mdicos set especialidade = ortopedia where nomem = Joo Alterar: a) o problema da paciente Ana agora tendinite b) a consulta do mdico 1 com o paciente 4 passou para 2 horas mais tarde e para o dia 25/10/2006 a3) Remoo de Tuplas Delete from nome_tabela [where condio] Exemplo: Remover o mdico Joo delete from mdicos where nomem = Joo; Remover: a) as consultas para horrios aps s 20 horas b) os pacientes com cncer ou cuja idade seja inferior a 10 b) Comando de Consulta (Query Language) * Estrutura bsica: select lista_atributos from lista_tabelas [ where condio]

Exemplos: a) Buscar todos os mdicos cadastrados no BD select codm, nomem, idade, especialidade from mdicos OU select * from mdicos b) Buscar o nome de todos os mdicos ortopedistas select nomem from mdicos where especialidade = ortopedia * Operadores lgicos: and, or e not * Operadores de comparao: >, > =, <, < =, =, != Consultar: a) Todos os mdicos com idade > 22 ou com especialidade diferente de traumatologia b) O nome e o problema dos pacientes com menos de 24 anos c) As consultas para o dia 14/10/2006 aps 14 horas b1) Comando SELECT 1) clusula DISTINCT * Elimina duplicatas no resultado da consulta * Exemplo: buscar todas as especialidades dos mdicos select distinct especialidade from mdicos * Sugestes: a) buscar todas as datas de consultas com horrio aps s 15 hs. b) buscar todas as idades dos mdicos 2) Retorno de valores calculados 2

* Permite retornar expresses aritmticas como resultado da consulta (+, -, *, / ) * Exemplo: buscar o cdigo do mdico e os dias consecutivos de suas consultas select codm, data + 1 from consultas * Sugesto: buscar a idade em meses de todos os pacientes e os seus nomes 3) Funes de Agregao * Aplicam-se sobre uma coleo de tuplas, tendo como parmetro um nome de atributo da tabela * No podem ser combinados com nomes de atributos no resultado da consulta * teis na determinao de alguns clculos matemticos na consulta (totais, mdias, somas, valor mximo, valor mnimo) Exemplo: Criar a tabela Empregados (code, nomee, idade, salrio, nomed) * Existem 5 funes de agregao: a) Count: contador de ocorrncias Exemplos: 1) total de tuplas da tabela de pacientes select count (*) from pacientes 2)qtas. consultas para o dia 13/10/2006 existem? select count (*) from consultas where data = #10/13/2006# b) Sum: somador de valores de atributos numricos Exemplo: soma dos salrios do depto. pessoal select sum(salrio) from empregados where nomed = "Pessoal" c) Avg: mdia de valores de atributos numricos Exemplo: mdia de idade dos mdicos ortopedistas select avg (idade) from mdicos where especialidade = "ortopedia" d) Max / Min: maior / menor valores de um atributo Exemplo: maior e menor salrios pagos aos empregados select max (salrio), min (salrio) from empregados * Sugestes: a) mdia dos salrios dos empregados do depto. Pessoal b) horrio mais tarde das consultas do dia 14/10/2006 c) qtos. mdicos ortopedistas esto cadastrados no BD? b2) Clusula WHERE 1) Clusula [NOT] LIKE * Permite a definio de padres de busca * Padres possveis: a) LIKE "c*" o valor do atributo inicia com o caractere ou string c b) LIKE "*c" o valor do atributo termina com o caractere ou string c c) LIKE "*c*" o valor do atributo possui o caractere ou string c no meio da cadeia Obs.: ? : substitui um caractere na pesquisa * Exemplos: 1) buscar o nome de todos os pacientes que comeam com a letra "P" select nomep from pacientes where nome like "P*" 2) buscar o cdigo do mdico, paciente e horrio para todas as consultas marcadas para o ano de 2006 select codm, codp, hora from consultas where data like "*2006" * Sugestes: a) buscar os nomes dos empregados que recebem salrios na faixa dos 1000 3

b) quais so os empregados que terminam com a letra o ? 2) Clusula IS [NOT] NULL * Permite o teste sobre valores nulos de atributos * Exemplo: empregados que no trabalham em nenhum depto. select * from empregados where nomed is null 3) Clusula [NOT] BETWEEN valor1 AND valor2 * Permite a busca de atributos cujos valores encontram-se em um intervalo desejado * Exemplo: consultas marcadas entre 14 hs. e 18 hs. select * from consultas where hora between #14:00# and #18:00# * Sugestes: a) nomes dos mdicos com cdigos de 1 a 3 b) nomes de pacientes com nomes cuja inicial est entre A e M b3) Clusula UNION * Permite a unio de 2 tabelas (compatveis) * Exemplo: buscar o nome de todas as pessoas cadastradas no hospital select nomem from mdicos union select nomep from pacientes * Sugesto: buscar o nome e a idade de todos os mdicos, pacientes e empregados b4) Consultas envolvendo mais de uma tabela do BD 1) from lista_tabelas produto cartesiano implcito * Exemplo: buscar o nome dos mdicos com consulta marcada para o dia 13/10/2006 select mdicos.codm from mdicos, consultas where consultas.data = #10/13/2006# and medicos.codm = consultas.codm * Podem existir variveis de tupla associadas a cada tabela declarada na clusula from select e1.nomee from empregados e1, empregados e2 where e2.nomee = "Lcia" and e1.salario > e2.salario * Sugestes: a) nomes de todos os pacientes com consulta marcada para horrios aps s 14 hs. b) nome e idade dos mdicos que tm consulta marcada com a paciente Ana 2) Inner Join * Juno de 2 tabelas atravs da satisfao de um ou mais predicados entre atributos de cada uma das tabelas (juno tradicional da lgebra) select lista_atributos from nome_tabela1 [inner] join nome_tabela2 on on nome_tabela1.nome_atributo1 predicado nome_tabela2.nome_atributo2 [{and/or nome_tabela1.nome_atributo n predicado nome_tabela2.nome_atributo n}] * exemplo: buscar o nome dos mdicos com consulta marcada para o dia 13 de Maio de 2003 select nome from Mdicos inner join Consultas on Mdicos.codm = Consultas.codm where data = 05/13/03 * Sugestes: a) nome e RG dos mdicos que tambm so funcionrios do hospital 4

b) nmero e andar dos ambulatrios utilizados por mdicos ortopedistas 3) Outer Join select lista_atributos from nome_tabela1 left | right | full [outer] join nome_tabela2 on nome_tabela1.nome_atributo1 predicado nome_tabela2.nome_atributo2 [{and/or nome_tabela1.nome_atributo n predicado nome_tabela2.nome_atributo n}] * Sugestes: a) os dados de todos os pacientes e, para aqueles pacientes com consultas marcadas, exibir os dados das suas consultas Forma alternativa de expressar consultas envolvendo mais de uma relao subconsultas * Clusulas para tratamento de subconsultas: IN, ANY, ALL, EXISTS 1) Clusula [NOT] IN * relao de pertinncia elemento conjunto * sintaxe: where atributo_ou_expresso in ( subconsulta ) * Exemplos: 1) Nome de todos os pacientes com consulta marcada select nomep from pacientes where codp in (select codp from consultas) 2) Nome e problema dos pacientes com idade > 21 e que tambm so empregados select nomep, problema from pacientes where idade > 21 and nomep in (select nomee from empregados) * Sugestes: a) buscar os dados de todas as consultas com a mdica Maria b) buscar os dados de todos os pacientes que no tm consulta marcada com o mdico Pedro 2) Clusula ANY * Permite outras formas de comparao elemento-conjunto = any (subconsulta) (= in) > any (subconsulta) verdadeiro se o atributo comparado for maior do que algum valor de atributo das tuplas resultantes da subconsulta < any (subconsulta) < > any (subconsulta) * Exemplo: buscar o nome de todos os empregados, exceto o mais idoso select nomee from empregados where idade < any (select idade from empregados) 3) Clusula ALL * Uma condio deve ser satisfeita para todos os elementos de um conjunto = all (subconsulta) igual a todos > all (subconsulta) maior que todos < all (subconsulta) menor que todos < > all (subconsulta) diferente de todos ( = not in) * Exemplo: buscar o nome dos empregados com salrio maior que o salrio dos empregados que trabalham no depto. contbil select nomee from empregados where salrio > all (select salrio from empregados where nomed = 'contbil') * Sugestes: 5

a) buscar os dados dos pacientes com consultas marcadas para horrios anteriores a todos os horrios marcados para o dia 13/10/2006 b) buscar o nome dos mdicos com consultas marcadas para horrios mais tarde que as consultas do mdico Pedro 4) Clusula [NOT] EXISTS * quantificador existencial * exists (subconsulta) verdadeira se a tabela resultante da subconsulta no for vazia * Exemplos: a) buscar o nome de todos os mdicos com consultas marcadas select nomem from mdicos where exists (select * from consultas where codm = medicos.codm) b) buscar os cdigos e nomes dos mdicos que tm consulta marcada com todos os pacientes select codm, nomem from mdicos where not exists ( select * from pacientes where not exists (select * from consultas where pacientes.codp = consultas.codp and mdicos.codm = consultas.codm)) * Sugestes: a) buscar o nome do empregado mais jovem b) buscar o nome dos pacientes que tambm so empregados b5) Clusula ORDER BY * Permite a ordenao do resultado da consulta * Utilizada aps a clusula where * Sintaxe: order by lista_atributos [desc] * Exemplos: a) buscar os dados de todos os empregados, ordenados pelo nome select * from empregados order by nomee b) buscar os dados de todas as consultas da paciente Ana, ordenadas de forma decrescente pela hora da consulta select * from consultas where codp in (select codp from pacientes where nomep = Ana) order by hora desc * Sugesto: buscar o nome de todos os empregados ordenados pela idade e salrio b6) Clusulas GROUP BY e HAVING * group by agrupa partes do resultado de uma consulta, a partir do qual possvel utilizar funes de agregao * having especifica condies para a formao de um grupo. S existe associado clusula group by * As condies s podem envolver os atributos a serem buscados ou alguma funo de agregao * Exemplos: a) buscar todas as datas de consultas e o total de consultas para esta data select data, count (data) from consultas group by data b) buscar somente as datas e o total de consultas para horrios aps s 14 hs. select data, count (data) from consultas where hora > #14:00# group by data c) buscar somente as datas e o total de consultas para as datas onde haja mais de uma consulta marcada select data, count(data) from consultas 6

group by data having count(data) > 1 * Sugestes: a) buscar, para a tabela de mdicos, todas as idades e o total de mdicos com a mesma idade b) buscar o nome dos mdicos com mais de uma consulta marcada b7) Comandos de atualizao + consulta * Expresses de consulta podem estar associadas aos comandos de atualizao de dados, para melhor restringir o universo de tuplas a serem atualizadas * Exemplos: a) Remover todas as consultas do mdico Joo delete from consultas where codm in (select codm from mdicos where nomee = "Joo") b) Passar para as 19 hs. todas as consultas da paciente Ana update consultas set hora = #19:00# where codp in (select codp from pacientes where nomep = "Ana") * Sugestes: a) Remover os pacientes que no possuem consultas marcadas b) Alterar para o dia 22/10/2006 todas as consultas da mdica Maria para horrios anteriores ao meio-dia

Anda mungkin juga menyukai