MODELO DE DADOS VS ESQUEMA Um modelo de dados é um conjunto de conceitos usados para se descrever dados. Um esquema é uma descrição de uma determinada coleção de dados, descrição essa baseada num certo modelo de dados. O modelo relacional é o modelo de dados mais utilizado atualmente. Principal conceito do modelo relacional: relação, basicamente uma tabela com linhas e colunas. Cada relação (tabela) tem um esquema relacional que descreve suas colunas. CLASSIFICAÇÃO DOS MODELOS DE DADOS Há modelos de dados: físicos (baixo nível) Lógicos ou de implementação (nível intermediário): Suportados por SGBSs comerciais e comumente usados na implementação de sistemas de bancos de dados. O modelo relacional é o modelo lógico mais usado hoje (IBM DB2, Oracle, Sybase, Informix, Microsoft SQL Server, etc.) Conceituais ou semânticos (alto nível) : Incorporam construções que permitem capturar o significado da realidade do negócio. O Modelo Entidades- Relacionamentos (E-R) é o modelo semântico mais difundido.
A arquitetura ANSI/SPARC prevê: múltiplas visões de dados, um esquema conceitual (lógico) e um esquema interno (físico). Os esquemas externos descrevem visões, ou views (como os usuários vêem os dados). O esquema conceitual descreve a estrutura lógica dos dados. O esquema interno descreve os arquivos e os índices empregados CLASSIFICAÇÃO DAS VISÕES E ESQUEMAS OBS: NÃO confundir esquema conceitual (lógico) que interliga a camada externa (visão) e a camada física com modelo conceitual que usa o Entidade Relacionamentos (MER) como modelo semântico dos dados.
FUNÇÕES DE GRUPO
A função COUNT tem três formatos: COUNT(*) COUNT(expr) COUNT (DISTINCT expr) COUNT(*) retorna o número de linhas em uma tabela que satisfaz os critérios da instrução SELECT, inclusive linhas duplicadas e linhas contendo valores nulos em qualquer uma das colunas. Se uma cláusula WHERE estiver incluída na instrução SELECT, COUNT(*) retornará o número de linhas que satisfizer a condição na cláusula WHERE. COUNT (expr) retorna o número de valores não-nulos na coluna identificada por expr. COUNT (DISTINCT expr) retorna o número de valores exclusivos não-nulos da coluna identificada por expr.
Unindo uma Tabela a ela Mesma Algumas vezes será necessário unir uma tabela a ela mesma. Na tabela acima, para localizar o nome do gerente de cada funcionário, é necessário unir a tabela EMP a ela mesma ou executar uma autojunção. Por exemplo, para localizar o nome do gerente de Blake, é necessário: Localizar Blake na tabela EMP consultando a coluna ENAME. Localizar o número do gerente de Blake consultando a coluna MGR. O número do gerente de Blake é 7839. Localizar o nome do gerente como o EMPNO 7839 consultando a coluna ENAME. O número do funcionário King é 7839, então King é gerente de Blake. Neste processo, você analisa a tabela duas vezes. Na primeira vez, você consulta a tabela para localizar Blake na coluna ENAME e o valor MGR de 7839. Na segunda vez, você consulta a coluna EMPNO para localizar 7839 e a coluna ENAME para localizar King. DICA: Em se tratando de autojunções, sempre vai haver uma inversão durante a cláusula WHERE, neste exemplo: trabalhador. NúmeroGerente = gerente. NúmeroTrabalhador.
Às vezes, é necessário dividir a tabela de informações em grupos menores. Isso pode ser feito com o uso da cláusula GROUP BY.
No exemplo, a cláusula WHERE poderia especificar as linhas a serem recuperadas. Já que não há uma cláusula WHERE, todas as linhas são recuperadas por default. A cláusula GROUP BY especifica como as linhas devem ser agrupadas. As linhas são agrupadas pelo número do departamento, de forma que a função AVG que esteja sendo aplicada à coluna de salários calcule o salário médio para cada departamento Sempre que você usa uma mistura de itens individuais (DEPARTMENT_ID) e funções de grupo (COUNT) na mesma instrução SELECT, deve incluir uma cláusula GROUP BY que especifique os itens individuais (neste caso, DEPARTMENT_ID). Qualquer coluna ou expressão na lista SELECT que não seja uma função agregada deve estar na cláusula GROUP BY.
CONSULTA VÁLIDA SELECT department_id, AVG(salary) FROM employees HAVING AVG (salary) > 8000 GROUP BY department_id; Da mesma forma que você usa a cláusula WHERE para restringir as linhas que seleciona, pode usar a cláusula HAVING para restringir grupos. Uma subconsulta é uma instrução SELECT que é incorporada a uma cláusula de outra instrução SELECT. Você pode desenvolver instruções sofisticadas a partir de instruções simples usando subconsultas. Elas poderão ser muito úteis quando você precisar selecionar linhas de uma tabela com uma condição que dependa dos dados na própria tabela.
É possível colocar a subconsulta em várias cláusulas SQL, incluindo as cláusulas WHERE, HAVING e FROM Na sintaxe: o operador inclui uma condição de comparação como >, = ou IN Observação: as condições de comparação subdividem-se em duas classes: operadores de uma única linha (>, =, >=, <, <>, <=) e operadores de várias linhas (IN, ANY, ALL).
Para corrigir o erro acima, altere o operador = para IN.
< ANY significa menos que o máximo. >ANY significa mais que o mínimo. =ANY equivale a IN. > ALL significa mais que o máximo e <ALL significa menos que o mínimo. <>ANY equivale a NOT IN A função SYSDATE é usada para obter a data e a hora atuais.
Se o registro pai que você tentar deletar tiver registros filhos, você receberá a mensagem ORA-02292 de violação de registro filho encontrado. Se a cláusula on delete cascate for especificada para chave estrangeira, a linha poderá ser excluída sem problema.