A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias1 Bancos de Dados Mestrado em Engenharia de Computação área de concentração Geomática.

Apresentações semelhantes


Apresentação em tema: "UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias1 Bancos de Dados Mestrado em Engenharia de Computação área de concentração Geomática."— Transcrição da apresentação:

1 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias1 Bancos de Dados Mestrado em Engenharia de Computação área de concentração Geomática

2 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias2 Structured Query Language (SQL)... Linguagem de Banco de Dados com comandos para definição de dados, consulta e atualização Origens: SEQUEL (Structured English QUEry Language) Projetada e implementada nos centros de pesquisa IBM como interface para o SYSTEM R - um Sistema de Banco de Dados Relacional. Linguagem de consulta do DB2 da IBM e de vários outros bancos de dados

3 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias3 esforços da ANSI (American National Standards Institute) e ISO (International Standards Organization) para padronização: –SQL1 (SQL ANSI 1986) –SQL2 (SQL ANSI 1992) –SQL3 (....) Inserida em várias hosts-languages (C, Pascal, etc.) Structured Query Language (SQL)

4 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias4 Definição de Dados em SQL... SQL usa os termos table, row e column para relação, tupla e atributo, respectivamente. As primeiras versões do SQL não incluíam o conceito de schema Um schema SQL é identificada por um nome de schema e inclui um identificador de autorização para indicar o usuário proprietário do schema, bem como descritores para cada elemento do schema. Elementos do schema: tabelas, visões, domínios e outros (ex. autorizações) Um schema pode, ao ser criado, incluir todas as definições de seus elementos, ou, alternativamente, incluí-las mais tarde.

5 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias5 CREATE SCHEMA COMPANY AUTHORIZATION SMITH; Catálogo: representa uma coleção de schemas em um ambiente SQL Um catálogo sempre contém um elemento especial chamado INFORMATION_SCHEMA, que fornece informações sobre todos os descritores de elementos de todos os seus esquemas, para os usuários autorizados. Restrições de integridade podem ser definidas apenas entre as relações pertencentes a um mesmo catálogo. Schemas dentro de um mesmo catálogo podem compartilhar certos elementos, como definições de domínios. Definição de Dados em SQL...

6 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias6 O comando CREATE TABLE é utilizado para especificar uma relação, incluindo o nome da relação, seus atributos e restrições de integridade. ¶Especificam-se os atributos, fornecendo-se um nome para cada um, bem como um tipo de dados para determinar o domínio dos valores e, possivelmente, restrições. ·Especificam-se as restrições de chave, integridade da entidade e integridade referencial. Definição de Dados em SQL...

7 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias7

8 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias8

9 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias9 Exemplo: Banco de Dados Companhia CREATE TABLE EMPLOYEE (FNAMEVARCHAR(15)NOT NULL, MINITCHAR, LNAME VARCHAR(15)NOT NULL, SSNCHAR(9)NOT NULL, BDATEDATE, ADDRESSVARCHAR(30), SEXCHAR, SALARYDECIMAL(10,2), SUPERSSNCHAR(9), DNOINT NOT NULL, PRIMARY KEY (SSN), FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN), FOREIGN KEY (DNO) REFERENCES DEPARTMENT(DNUMBER));

10 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias10 Exemplo: Banco de Dados Companhia CREATE TABLE DEPARTMENT (DNAMEVARCHAR(15)NOT NULL, DNUMBERINTNOT NULL, MGRSSN CHAR(9) NOT NULL, MGRSTARTDATEDATE, PRIMARY KEY (DNUMBER), UNIQUE (DNAME), FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN)); CREATE TABLE DEPT_LOCATIONS ( DNUMBERINTNOT NULL, DLOCATIONVARCHAR(15) NOT NULL, PRIMARY KEY (DNUMBER, DLOCATION), FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER));

11 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias11 CREATE TABLE PROJECT (PNAMEVARCHAR(15)NOT NULL, PNUMBERINTNOT NULL, PLOCATIONVARCHAR(15), DNUMINT NOT NULL, PRIMARY KEY (PNUMBER), UNIQUE (PNAME), FOREIGN KEY (DNUM) REFERENCES DEPARTMENT (DNUMBER)); CREATE TABLE WORKS_ON (ESSN CHAR(9) NOT NULL, PNOINTNOT NULL, HOURSDECIMAL(3,1), NOT NULL, PRIMARY KEY (ESSN, PNO), FOREIGN KEY (ESSN ) REFERENCES EMPLOYEE (SSN), FOREIGN KEY (PNO) REFERENCES PROJECT (PNUMBER)); Exemplo: Banco de Dados Companhia

12 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias12 CREATE TABLE DEPENDENT (ESSN CHAR(9) NOT NULL, DEPENDENT_NAMEVARCHAR(15) NOT NULL, SEX CHAR, BDATEDATE, RELATIONSHIPVARCHAR(8), PRIMARY KEY (ESSN, DEPENDENT _NAME), FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN)); -------------------------------------------------------------------------------------------------------------- Dedinição, em SQL2, do Schema Company Observação: i) O schema SQL nos quais as relações acima estão declaradas está implicitamente especificado no ambiente no qual os comandos CREATE TABLE são executados. Alternativamente poderíamos ter: CREATE TABLE COMPANY.EMPLOYEE... Exemplo: Banco de Dados Companhia

13 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias13 Data types disponíveis: numeric, character-string, bit-string, date, time. Numeric: números inteiros de diferentes tipos (INTEGER, SMALLINT) e números reais de diferentes precisões (FLOAT, REAL, DOUBLE PRECISION). Números formatados: DECIMAL(i, j) ou DEC(i, j) ou NUMERIC(i, j) i - precisão, ou n o total de dígitos decimais j - escala, ou n o de dígitos após o ponto decimal Definição de Dados em SQL...

14 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias14 Character-string: –comprimento fixo (CHAR(n) ou CHARACTER(n)) –comprimento variável (VARCHAR(n) ou CHAR VARYING(n) ou CHARACTER VARYING(n)) Bit-string: –comprimento fixo (BIT(n)) –comprimento variável (BIT VARYING(n)) Date e Time: –TIME(I), TIME com zona, TIMESTAMP (date + time), INTERVAL Definição de Dados em SQL...

15 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias15 DEFAULT - para especificar valores default para um atributo. UNIQUE - especifica chaves alternativas O projetista do schema pode especificar ações a serem efetivadas, no caso de violação das regras de integridade referencial, vinculando uma cláusula de referential triggered action a quaisquer rstrições de chaves estrangeiras (SET NULL, CASCADE, SET DEFAULT). Pode-se dar um nome às restrições para referências futuras Base tables (base relations) Virtual relations (criadas através do comando CREATE VIEW) Definição de Dados em SQL...

16 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias16 CREATE TABLE EMPLOYEE (..., DNOINTNOT NULL DEFAULT 1, CONSTRAINT EMPPK PRIMARY KEY (SSN), CONSTRAINT EMPSUPERFK FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT EMPDEPTFK FOREIGN KEY (DNO) REFERENCES DEPARTMENT(DNUMBER) ON DELETE SET DEFAULT ON UPDATE CASCADE); Definição de Dados em SQL...

17 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias17 CREATE TABLE DEPARTMENT (..., MGRSSN CHAR(9) NOT NULL DEFAULT 88865555,..., CONSTRAINT DEPTPK PRIMARY KEY (DNUMBER), CONSTRAINT DEPTSK UNIQUE (DNAME), CONSTRAINT DEPTMGRFK FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN) ON DELETE SET DEFAULT ON UPDATE CASCADE); CREATE TABLE DEPT_LOCATIONS (..., PRIMARY KEY (DNUMBER, DLOCATION), FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER) ON DELETE CASCADE ON UPDATE CASCADE); Definição de Dados em SQL...

18 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias18 O comando DROP SCHEMA possui duas opções: RESTRICT e CASCADE CASCADE - remove o schema e todos os seus elementos: tabelas, domínios, restrições, etc. RESTRICT - neste caso o schema só é removido se não mais possuir elementos. Ex.: DROP SCHEMA COMPANY CASCADE; DROP TABLE também possui duas opções: RESTRICT e CASCADE Ex.: DROP TABLE DEPENDENT CASCADE; Definição de Dados em SQL...

19 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias19 ALTER TABLE - ações possíveis: adicionar ou excluir uma coluna (atributo), alterar a definição de uma coluna e adicionar ou excluir restrições de integridade. Ex.: ALTER TABLE COMPANY.EMPLOYEE ADD JOB VARCHAR(12); Ex: ALTER TABLE COMPANY.DEPARTMENT DROP ADDRESS CASCADE; (todas as constraints e views que referenciam a coluna são automaticamente excluídas do schema) Ex.: ALTER TABLE COMPANY.EMPLOYEE DROP CONSTRAINT EMPSUPERFK CASCADE; Definição de Dados em SQL...

20 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias20 Queries em SQL... SELECT FROM WHERE block SELECT FROM WHERE QUERY Q0: Recupere a data de nascimento e endereço do empregado cujo nome é John B. Smith. SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME=John AND MINIT=B AND LNAME=SMITH

21 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias21 O SELECT FROM WHERE block é semelhante ao par de operações SELECT-PROJECT da Álgebra Relacional. A cláusula SELECT do SQL especifica os atributos a serem projetados A cláusula WHERE especifica a condição de seleção Em SQL o resultado da query pode ter tupls duplicadas Queries em SQL...

22 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias22 Queries em SQL... QUERY Q1: Recupere o nome e o endereço de todos os empregados que trabalham no departamento Research. SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME=Research AND DNUMBER=DNO Trata-se de uma query do tipo SELECT-PROJECT-JOIN da Álgebra Relacional A condição de seleção é DNAME=Research A condição de JOIN é DNUMBER=DNO

23 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias23 QUERY Q2: Para todo projeto localizado em Stafford, liste o n o do projeto, o n o do dpt o que o controla, o último nome do gerente e a data de seu nascimento. SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM PROJECT, EMPLOYEE, DEPARTMENT WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION=Stafford A condição de JOIN DNUM=DNUMBER relaciona um projeto ao dept o que o controla; A condição de JOIN MGRSSN=SSN relaciona o dept o contolador ao empregado que o gerencia; Queries em SQL...

24 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias24 Nomes de atributos ambíguos e aliases QUERY Q1A: Supor que os atributos DNO e LNAME da relação EMPLOYEE fossem chamados de DNUMBER e NAME e que o atributo DNAME da relação DEPARTMENT também fosse chamado de NAME. Neste caso a query Q1 teria que resolver as ambigüidades presentes. SELECT FNAME, EMPLOYEE.NAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DEPARTMENT.NAME=Research AND DEPARTMENT.DNUMBER=EMPLOYEE.DNUMBER Queries em SQL...

25 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias25 QUERY Q8: Para cada empregado, recupere o primeiro e último nome e o o primeiro e último nome do seu supervisor imediato. SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME FROM EMPLOYEE E, EMPLOYEE S WHERE E.SUPERSSN=S.SSN Um alias pode seguir de imediato o nome da relação, como acima, ou seguir a keyword AS. É também possível renomear os atributos da relação dentro da query. EMPLOYEE AS E(FN, MI, LN, SSN, BD, ADDR, SEX, SAL, SSSN, DNO)... Como na Álgebra Relacional não se pode especificar uma query com um nível arbitrário de recursividade em um único comando. Queries em SQL...

26 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias26 Uma query sem a cláusula WHERE indica que não há condição de seleção aplicada sobre as tuplas. Assim, todas serão selecionadas (WHERE TRUE). QUERY Q9: Recupere os SSNs de todos os empregados. SELECT SSN FROM EMPLOYEE Se mais de uma relação é especificada na cláusula FROM e não há uma cláusula WHERE, então o resultado é o CROSS PRODUCT das duas relações. QUERY Q10: Recupere todas as combinações possíveis de EMPLOYEE SSN e DEPARTMENT DNAME. SELECT SSN, DNAME FROM EMPLOYEE, DEPARTMENT (similar as operações da AR: CROSS PRODUCT seguido de um PROJECT) Queries em SQL...

27 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias27 ATENÇÃO! É extremamente importante especificar todas as seleções e condições JOIN na cláusula WHERE, sem o que poderão resultar relações imensas e incorretas. Para recuperar os valores de todos os atributos usa-se um *. QUERY Q1C: Recupere todos os valores de atributos das tuplas de EMPLOYEE, que trabalham no dept o de n o 5. SELECT * FROM EMPLOYEE WHERE DNO=5 Queries em SQL...

28 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias28 QUERY Q1D: Recupere todos os valores de atributos dos empregados que trabalham no departamento Research, bem como os atributos deste dept o. SELECT * FROM EMPLOYEE, DEPARTMENT WHERE DNAME=Research AND DNO=DNUMBER QUERY Q10A: Recuperar o CROSS PRODUCT das relações EMPLOYEE e DEPARTMENT. SELECT * FROM EMPLOYEE, DEPARTMENT Queries em SQL...

29 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias29 SQL não elimina tuplas duplicatas do resultado das queries pelas seguintes razões: –o custo da operação é alto (solução: classificar as tuplas e eliminar as duplicatas) –o usuário pode desejar visualisar as tuplas duplicatas –quando se aplica uma função agregada às tuplas, em geral não se deseja a eliminação de duplicatas Para se eliminar tuplas duplicatas do resultado deve-se usar a keyword DISTINCT na cláusula SELECT QUERY Q11A: Liste todos os salários diferentes dos empregados. SELECT DISTINCT SALARY FROM EMPLOYEE Queries em SQL...

30 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias30 SQL incorporou algumas das operações sobre conjuntos da Álgebra Relacional: união (UNION), diferença (EXCEPT) e interseção (INTERSECT). Nestas operações as tuplas duplicatas são eliminadas, a menos que a operação seja seguida da keyword ALL. QUERY Q4: Faça uma lista de todos os n os de projetos PARA PROJETOS que envolvam um empregado cujo último nome seja Smith, ou como um simples empregado, ou como um gerente do departamento que controla o projeto. (SELECT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME=Smith) UNION (SELECT PNUMBER FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME=Smith) Queries em SQL...

31 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias31 Queries aninhadas (trata-se de uma query SELECT completa, dentro de uma cláusula WHERE de uma outra query, chamada de outer query) QUERY Q4A = QUERY Q4 (SELECT DISTINCT PNUMBER FROM PROJECT WHERE PNUMBER IN (SELECT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME=Smith) OR PNUMBER IN (SELECT PNO FROM WORKS_ON, EMPLOYEE WHERE ESSN=SSN AND LNAME=Smith) Queries em SQL...

32 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias32 O operador de comparação IN compara um valor v com um conjunto (ou múltiplos conjuntos) de valores V e resulta em TRUE se v é um dos elementos de V. QUERY Q4B: Selecione o SSN de todos os empregados que trabalhem a mesma combinação (project, hours) em algum projeto em que o empregado John Smith também trabalhe. SELECT DISTINCT ESSN FROM WORKS_ON WHERE (PNO, HOURS) IN (SELECT PNO, HOURS FROM WORKS_ON, EMPLOYEE WHERE LNAME=Smith AND FNAME=John AND ESSN=SSN); Queries em SQL...

33 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias33 Além do operador IN, outros operadores de comparação podem ser usados para comparar um valor singular v (tipicamente o nome de um atributo) com um conjunto V (tipicamente uma nested query). O operador = ANY (= SOME) retorna TRUE se o valor v é igual a algum valor no conjunto V (é equivalente a IN). Outros operadores que podem ser combinados com as keywords ANY e SOME: >,>=,. A keyword ALL pode ser usada com quaisquer dos operadores acima. Queries em SQL...

34 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias34 QUERY QX0: Recupere o nome dos empregados cujo salário seja maior que os salários de todos os empregados do departamento 5. SELECT LNAME, FNAME FROM EMPLOYEE WHERESALARY > ALL (SELECT SALARY FROM EMPLOYEE WHERE DNO=5); Em geral pode-se ter um n o arbitrário de nested queries. Para se evitar ambigüidades aplica-se a regra: uma referência a um atributo não qualificado refere-se sempre à relação declarada na nested query mais interna. Queries em SQL...

35 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias35 QUERY Q12: Recupere o nome de cada empregado que tenha um dependente com o mesmo first name e sexo do empregado. SELECT LNAME, FNAME FROM EMPLOYEE E WHERE E.SSNIN(SELECT ESSN FROM DEPENDENT WHERE ESSN=E.SSN AND E.FNAME=DEPENDENT_NAME AND SEX=E.SEX) Sempre que uma condição em uma cláusula WHERE de uma nested query referencia algum atributo de uma relação declarada na outer query, as duas queries são ditas correlacionadas. A nested query é avaliada uma vez para cada tupla (ou combinação de tuplas) na outer query. Queries em SQL...

36 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias36 Em geral uma query formulada com blocos aninhados SELECT... FROM... WHERE e usando os operadores de comparação = ou IN pode ser sempre expressa como uma query com um único bloco. QUERY Q12A= QUERY Q12 SELECT E.LNAME, E.FNAME FROM EMPLOYEE E, DEPENDENT D WHERE E.SSN=D.ESSN AND E.SEX=D.SEX AND E.FNAME=D.DEPENDENT_NAME Queries em SQL...

37 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias37 A função EXISTS é utilizada para verificar se o resultado de uma nested query correlacionada é vazio, i.e., não contém tuplas. QUERY Q12B (Q12 revisitada): Recupere o nome de cada empregado que tenha um dependente com o mesmo first name e sexo do empregado. SELECT LNAME, FNAME FROM EMPLOYEE E WHERE EXISTS(SELECT * FROM DEPENDENT WHERE E.SSN=ESSN AND E.FNAME=DEPENDENT_NAME AND SEX=E.SEX) EXISTS(Q) retorna TRUE se existe pelo menos uma tupla como resultado da query Q e FALSE em caso contrário. Queries em SQL...

38 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias38 QUERY 6: Recupere o nome de todos os empregados que não tenham dependentes. SELECT LNAME, FNAME FROM EMPLOYEE E WHERE NOT EXISTS(SELECT * FROM DEPENDENT WHERE SSN=ESSN) A função UNIQUE(Q) retorna TRUE se não existem tuplas duplicatas no resultado da query Q; em caso contrário retorna FALSE. Queries em SQL...

39 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias39 QUERY 7: Liste o nome dos gerentes que tenham pelo menos um dependente. SELECT LNAME, FNAME FROM EMPLOYEE WHERE EXISTS(SELECT * FROM DEPENDENT WHERE SSN=ESSN) AND EXISTS (SELECT * FROM DEPARTMENT WHERE SSN=MGRSSN) Queries em SQL...

40 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias40 QUERY 3: Recupere o nome de cada empregado que trabalhe em todos os propjetos controlados pelo dept o de n o 5 (operator CONTAINS - SQL original) SELECT LNAME, FNAME FROM EMPLOYEE WHERE ((SELECT PNO FROM WORKS_ON WHERE SSN=ESSN) CONTAINS (SELECT PNUMBER FROM PROJECT WHERE DNUM=5)) Queries em SQL...

41 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias41 QUERY 3A (paráfrase de Q3): Selecione cada empregado de tal forma que não exista um projeto, controlado pelo dept o 5 em que o empregado não trabalhe. SELECT LNAME, FNAME FROM EMPLOYEE WHERE NOT EXISTS (SELECT * FROM WORKS_ONB WHERE (B.PNO IN (SELECT PNUMBER FROM PROJECT WHERE DNUM=5)) AND NOT EXISTS (SELECT * FROM WORKS_ON C WHERE C.ESSN=SSN AND C.PNO=B.PNO)) Universal quantifier ( ) ou negated existential quantifier (not ) Queries em SQL...

42 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias42 É possível explicitar um conjunto de valores em uma cláusula WHERE. QUERY 13: Recupere os SSNs de todos os empregados que trabalhem nos projetos de n os 1, 2 ou 3. SELECTDISTINCT ESSN FROMWORKS_ON WHEREPNO IN (1, 2, 3) SQL permite queries que verificam se um valor é NULL (missing or undefined or not applicable) Ao invés de usar os operadores = ou, SQL usa IS ou IS NOT. Isto porque SQL considera cada valor NULL distinto de todos os outros valores NULL. Queries em SQL...

43 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias43 QUERY 14: Recupere os nomes de todos os empregados que não tenham supervisor. SELECT LNAME, FNAME FROM EMPLOYEE WHERE SUPERSSN IS NULL É possível renomear qualquer atributo que apareça no resultado de uma query, adicionando-se o qualificador AS seguido pelo novo nome desejado. QUERY 8A ~ QUERY 8, porém trocando-se os últimos nomes de cada empregado e de cada supervisor para EMPLOYEE_NAME e SUPERVISOR_NAME, respectivamente: SELECT E.LNAME AS EMPLOYEE_NAME, S.LNAME AS SUPERVISOR_NAME FROM EMPLOYEE AS E, EMPLOYEE AS S WHERE E.SUPERSSN=S.SSN Queries em SQL...

44 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias44 O conceito de joined table (or joined relation) foi incorporado em SQL2 para permitir aos usuários especificar uma tabela que resultasse de uma operação JOIN, na cláusula FROM de uma query. QUERY 1A ~ QUERY 1: SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER WHERE DNAME=Research Os atributos da tabela resultante do JOIN compreendem todos os atributos da primeira tabela - EMPLOYEE - seguidos por todos os atributos da segunda tabela - DEPARTMENT. Existem diferentes tipos de JOIN: NATURAL JOIN e OUTER JOINS NATURAL JOIN para duas relações R e S: nenhuma condição de JOIN é especificada. Uma condição JOIN implícita (EQUI) é criada para cada par de atributos com o mesmo nome em R e em S. Apenas um atributo permanece. Queries em SQL...

45 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias45 Se os nomes dos atributos JOIN não são os mesmos nas relações base, é possível renomear os atributos e, então, aplicar-se o NATURAL JOIN. QUERY 1B ~ QUERY Q1: porém renomeou a relação DEPARTMENT para DEPT e os atributos para DNAME, DNO (para ser igual ao atributo JOIN da tabela EMPLOYEE), MSSN e MSDATE. SELECT FNAME, LNAME, ADDRESS FROM (EMPLOYEE NATURAL JOIN (DEPARTMENT AS DEPT DNAME, DNO, MSNN, MSDATE))) WHERE DNAME=Research A condição JOIN implícita é EMPLOYEE.DNO = DEPT.DNO Queries em SQL...

46 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias46 O tipo default de JOIN em uma tabela joined é o INNER JOIN, em que uma tupla é incluída no resultado, apenas se existe uma tupla na outra relação que satisfaz a condição do JOIN. QUERY 8B ~ QUERY 8A: porém desejamos incluir no resultado todos os empregados, mesmo aqueles que não possuem um supervisor. SELECT E.LNAME AS EMPLOYEE_NAME, S.LNAME AS SUPERVISOR_NAME FROM (EMPLOYEE E LEFT OUTER JOIN EMPLOYEE S ON E.SUPERSSN=S.SSN) Opções de JOIN: INNER JOIN (=JOIN), LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN. Pode-se omitir a keyword OUT. Queries em SQL...

47 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias47 QUERY Q2A = Q2: SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM ((PROJECT JOIN DEPARTMENT ON DNUM=DNUMBER) JOIN EMPLOYEE ON MGRSSN=SSN) WHERE PLOCATION=Stafford Funções agregadas (agregate functions) e agrupamento (grouping): built-in functions: COUNT, SUM, MAX, MIN, AVG. Aplicadas a um conjunto ou vários conjuntos de valores. Podem ser usadas nas cláusulas SELECT OU HAVING. QUERY Q15: Recupere a soma dos salários de todos os empregados, o maior e menor salário e o salário médio. SELECTSUM(SALARY), MAX (SALARY), MIN (SALARY), AVG (SALARY) FROM EMPLOYEE Queries em SQL...

48 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias48 QUERY Q15: Ache a soma dos salários de todos os empregados do dept o Research, como também os salários máximo, mínimo e médio neste dept o. SELECTSUM(SALARY), MAX (SALARY), MIN (SALARY), AVG (SALARY) FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME = Research QUERY Q17: Recupere o n o total de empregados na companhia. SELECT COUNT(*) FROMEMPLOYEE A função COUNT( ) retorna o n o de tuplas ou valores especificados na query. Queries em SQL...

49 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias49 QUERY Q18: Recupere o n o de empregados do dept o Research. SELECT COUNT(*) FROMEMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME=Research Pode-se usar a função COUNT para contar valores em uma coluna, ao invés de em tuplas. QUERY Q19: Conte o número de salários distintos no Banco de Dados Companhia. SELECTCOUNT (DISTINCT SALARY) FROMEMPLOYEE Queries em SQL...

50 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias50 Em alguns casos poderemos necessitar de usar funções para selecionar tuplas particulares. Nestes casos especifica-se uma nested query correlacionada com a função desejada e usa-se a nested query na cláusula WHERE da outer query. QUERY Q5: Recuperar os nomes de todos os empregados que tenham dois ou mais dependentes. SELECTFNAME, LNAME FROMEMPLOYEE WHERE(SELECTCOUNT(*) FROM DEPENDENT WHERE SSN = ESSN) 2 Queries em SQL...

51 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias51 SQL possui uma cláusula GROUP BY com a finalidade de permitir o agrupamento de atributos. Os atributos a serem grupados devem ser especificados na cláusula GROUP BY e também na cláusula SELECT, de tal forma que os valores resultantes da aplicação de funções a um grupo de tuplas apareçam juntamente com o valor do atributo de grupamento. QUERY Q20: Para cada dept o recupere o n o do dept o, o n o de empregados no dept o e o seu salário médio. SELECT DNO, COUNT (*), AVG (SALARY) FROM EMPLOYEE GROUP BY DNO A cláusula SELECT inclui somente o atributo a ser agrupado e as funções a serem aplicadas em cada grupo de tuplas. Queries em SQL...

52 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias52 QUERY Q21: Para cada projeto recupere o seu n o, o seu nome e o n o de empregados que trabalham no projeto. SELECTPNUMBER, PNAME, COUNT(*), FROMPROJECT, WORKS_ON WHEREPNUMBER = PNO GROUP BYPNUMBER, PNAME Observação: O agrupamento e as funções são aplicadas depois do joining das duas relações. Em alguns casos desejamos recuperar os valores destas funções apenas para grupos que satisfazem determinadas condições. SQL provê uma cláusula HAVING para esta finalidade, a qual pode aparecer em conjunto com uma cláusula GROUP BY. Queries em SQL...

53 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias53 HAVING provê uma condição no grupo de tuplas associadas com cada valor do atributo de agrupamento. Somente os grupos que satisfazem esta condição são recuperados no resultado da query. QUERY Q22: Para cada projeto no qual trabalham mais de dois empregados, recupere o n o do projeto, o nome do projeto e o n o de empregados que trabalham no projeto. SELECTPNUMBER, PNAME, COUNT(*) FROMPROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BYPNUMBER, PNAME HAVINGCOUNT(*) > 2 Observação: a condição de seleção na cláusula WHERE limita as tuplas às quais as funções são aplicadas; a cláusula HAVING limita grupos inteiros. Queries em SQL...

54 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias54 QUERY Q23: Para cada projeto, recupere o n o do projeto, o nome do projeto e o n o de empregados do dept o 5 que trabalham no projeto. SELECTPNUMBER, PNAME, COUNT(*) FROMPROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER = PNO AND SSN = ESSN AND DNO = 5 GROUP BYPNUMBER, PNAME Deve-se ser muito cuidadoso ao se aplicar duas diferentes condições (Uma para a função na clúsula SELECT e, a outra, para a função na cláusula HAVING). Queries em SQL...

55 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias55 QUERY Q240: Contar o n o total de empregados cujos salários excedem US$ 40,000 em cada dept o, porém apenas para os dept os em que mais de 5 empregados trabalham. SELECTDNAME, COUNT(*) FROMDEPARTMENT, EMPLOYEE WHERE DNUMBER = DNO AND SALARY > 40000 GROUP BYDNAME HAVING COUNT(*) > 5 ERRADO! Selecionará apenas os dept os que tenham mais de 5 empregados, cada um deles ganhando mais de US$ 40000. REGRA: A cláusula WHERE é executada primeiro, para selecionar as tuplas individuais; depois executa-se a cláusula HAVING, para selecionar os grupos individuais de tuplas. Queries em SQL...

56 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias56 QUERY Q24: para cada dept o em que mais de 5 empregados trabalham, recuperar o n o do dept o, e o n o de empregados com salário maior que US$ 40000. SELECTDNAME, COUNT(*) FROMDEPARTMENT, EMPLOYEE WHERE DNUMBER = DNO AND SALARY > 40000 AND DNO IN(SELECT DNO FROM EMPLOYEE GROUP BY DNO HAVING COUNT(*) > 5) GROUP BYDNAME Queries em SQL...

57 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias57 Comparações de substrings, operadores aritméticos e classificação O operador LIKE possibilita comparação entre strings. % substitui um n o arbitrário de caracteres. _ substitui um único caracter arbitrário. QUERY Q25: Recupere todos os empregados com endereço em Houston, TX SELECTFNAME, LNAME FROMEMPLOYEE WHERE ADDRESS LIKE %Houston, TX% QUERY Q26: Encontre todos os empregados nascidos na década de 50. SELECTFNAME, LNAME FROMEMPLOYEE WHERE BDATE LIKE __5_______ Queries em SQL...

58 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias58 Operadores aritméticos podem ser aplicados a valores numéricos em uma query. QUERY Q27: Mostre os salários que resultariam, se a todos os trabalhadores que trabalham no projeto ProductX fosse dado um aumento de 10%. SELECTFNAME, LNAME, 1.1*SALARY FROMEMPLOYEE, WORKS_ON, PROJECT WHERE SSN=ESSN AND PNO=PNUMBER AND PNAME=ProductX O operador || para strings + e - podem ser usados com os tipos de dados date, time, timestamp e interval Queries em SQL...

59 UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias59 Classificação: a cláusula ORDER BY QUERY Q28: Recupere uma lista de empregados e dos projetos em que eles trabalham, ordenada por dept os e, dentro de cada dept o, ordenada alfabeticamente por sobrenome e nome. SELECTDNAME, LNAME, FNAME, PNAME FROMDEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT WHERE SSN=ESSN AND DNUMBER=DNO AND PNO=PNUMBER ORDER BYDNAME, LNAME, FNAME As keywords ASC e DESC Queries em SQL...


Carregar ppt "UERJ - Agosto 2000© Oscar Luiz Monteiro de Farias1 Bancos de Dados Mestrado em Engenharia de Computação área de concentração Geomática."

Apresentações semelhantes


Anúncios Google