BANCOS DE DADOS PROFESSOR RAFAEL SILVA OBJETIVOS DA DISCIPLINA • Apresentar os principais conceitos de bancos de dados • Compreender a importância da utilização de bancos de dados • Ensinar técnicas para projetos e modelagem de bancos de dados • Apresentar a linguagem SQL • Apresentar o SGBD MySql, permitindo a criação e manipulação de bancos de dados INTRODUÇÃO • O que é banco de dados? • Existem vários conceitos para o que chamamos de bancos de dados, mas todos remetem à mesma ideia: Uma coleção compartilhada de dados, inter-relacionados, projetados para atender as necessidades dos múltiplos tipos de usuários. • Dado x informação: • Dado: valor “solto” na natureza, cujo significado depende do contexto. • Ex: -1, 3.14, 853, prata • Informação: É um valor para determinado objetivo, acrescenta conhecimento ao fato analisado. Pode ser extraída de um banco de dados • Ex: “A temperatura na cidade X foi de -1 grau”, “Meu carro é prata”, “3.14 é o valor de pi” IMPORTÂNCIA DOS BDS • O mundo hoje é totalmente informatizado • Pessoas e empresas são cada vez mais dependentes da informática • Tudo gira em torno de dados (vendas, operações bancárias, gerenciamento de empresas, escolas e/ou órgãos públicos, etc.) • Os bancos de dados permitem o armazenamento destas informações, considerando aspectos fundamentais como segurança, rapidez no acesso e confiabilidade. VANTAGENS DE UM BD • Controle de redundância • Compartilhamento entre múltiplos usuários • Restrição de acesso aos dados • Diferentes tipos de interface para diferentes usuários • Representação dos dados com um nível grande de complexidade • Garante a restrição de integridade (manter dados íntegros) • Mecanismos de backup e recuperação de dados • Flexibilidade na mudança das estruturas de dados SISTEMAS DE BANCOS DE DADOS • Envolvem quatro elementos: • Dados : são os elementos essenciais (afinal de contas, o banco de dados é um repositório) • Hardware: composto por volumes de armazenamento (discos), processadores de HD e memória (dar suporte à execução dos SGBDs) • Software: programas usados para criar e gerenciar os bancos de dados; também entram os utilitários, ferramentas de desenvolvimento, geradores de relatórios, etc • Usuários: pessoas que usarão os bancos de dados TIPOS DE USUÁRIOS • Programadores: criam programas para acessar os bancos de dados • Usuários finais: acessam os bancos de dados interativamente • Profissionais: usuários com conhecimentos específicos sobre bancos de dados. Podem ser: • Administrador de dados: responsável pelos dados, decidem o que deve ser armazenado • DBA: Responsável pela implementação das decisões do administrador; cria os bancos de dados e implementa controles necessários SGBDS • Sigla para Sistemas Gerenciadores de Bancos de Dados. São softwares que tem como objetivos permitir a criação e manutenção de banco de dados, além da manipulação dos dados armazenados. • Alguns SGBDs: • • • • • Access, SQLServer Oracle MySQL PostGre LINGUAGEM SQL • Linguagem padronizada para manipulação de bancos de dados, usadas nos SGBDs • Dividida em: • DDL - Linguagem de Definição de Dados • DML - Linguagem de Manipulação de Dados • DCL - Linguagem de Controle de Dados • DTL - Linguagem de Transação de Dados • DQL - Linguagem de Consulta de Dados ABSTRAÇÃO DE DADOS • Nível de visões do usuário ou externo: descreve partes do banco de dados, de acordo com as necessidades de cada usuário, individualmente. • Nível conceitual ou lógico: descreve quais dados estão armazenados e seus relacionamentos. Neste nível, o banco de dados é descrito através de estruturas relativamente simples, que podem envolver estruturas complexas no nível físico. • Nível físico: nível mais baixo de abstração. Descreve como os dados estão realmente armazenados, englobando estruturas complexas de baixo nível. INSTÂNCIAS E ESQUEMAS • Instância: Os dados atuais armazenados no Banco de Dados em um momento particular. Também chamado estado do banco de dados. • Esquema: Descrição da estrutura de um Banco de Dados. Pode ser textual ou gráfico. Conhecido também como o projeto geral do banco de dados. INDEPENDÊNCIA DE DADOS • Capacidade de modificar os esquemas de um banco de dados sem afetar um esquema de nível superior. Existem dois níveis de independência: • Física: capacidade de modificar o esquema físico sem que haja qualquer necessidade de reescrever alguma aplicação. Usada para promover melhorias no desempenho. • Lógica: capacidade de modificar o esquema lógico sem que haja qualquer necessidade de reescrever alguma aplicação. Necessárias quando uma estrutura lógica é alterada (ex: inserção de novas moedas num sistema) MODELO DE DADOS • Conceituais (Alto Nível) • • • Entidade-Relacionamento Objeto-Relacional (BDII) Orientado a Objeto (BDII) • Implementação (Lógicos) • • • Relacional Rede (BD mais antigos) Hierárquico (BD mais antigos) • Físicos MODELO ENTIDADERELACIONAMENTO • Modelo proposto por Peter Chen, baseado na percepção do mundo real. • Formado por um conjunto de objetos básicos denominados entidades e nos relacionamentos entre tais objetos. • Tal modelo permite especificar a estrutura lógica do banco de dados. MODELO ENTIDADERELACIONAMENTO • O Diagrama Entidade-Relacionamento (DER) permite representar graficamente a estrutura lógica de um banco de dados. • De um modo geral, para nos auxiliar na elaboração de um DER, podemos dizer que os substantivos de uma frase são as entidades e os verbos são os relacionamentos entre as entidades. MODELO ENTIDADERELACIONAMENTO MODELO ENTIDADERELACIONAMENTO • Entidade: Podemos definir uma entidade como sendo um objeto do mundo real, com significado próprio e identificação distinta. Pode ser pessoa, animal, conta bancária, produto, veículo, etc. – depende do contexto. • Entidade fraca: Entidade cuja existência depende obrigatoriamente de outra entidade. Por exemplo, em um clube, não existe dependente sem um sócio. Assim, a entidade dependente é fraca. MODELO ENTIDADERELACIONAMENTO • Atributo: Toda entidade é descrita sob a forma de atributos. É simplesmente um item que ajuda a descrever entidade. Por exemplo, uma entidade chamada ALUNO pode ter os seguintes atributos: matrícula, nome, data de nascimento, nota. • Atributo chave: Chave primária é um atributo de uma entidade, cuja função principal é identificar uma instância unicamente; deve ser um valor não nulo que não se repete dentre as instâncias de uma mesma entidade. Por exemplo, para a entidade ALUNO, a matrícula seria a chave primária, já que não podemos ter dois ou mais alunos com a mesma matrícula. MODELO ENTIDADERELACIONAMENTO Outros tipos de chaves: • Superchave: Conjunto de um ou mais atributos que, tomado coletivamente, permite-nos identificar unicamente uma instância de entidade. • Chaves candidatas: Chaves com unicidade em uma instância: Ex: CPF, RG, título eleitoral. Todos os atributos que conseguem identificar uma instância. • Chave secundária: Chave sem unicidade em uma instância. Ex: idade, sexo, endereço. MODELO ENTIDADERELACIONAMENTO • Atributo multivalorado: Atributo que pode ocorrer diversas vezes para uma mesma instância de entidade. Como exemplo, para a entidade ALUNO, podemos ter mais de um email. • Atributo composto: Atributo que pode ser desmembrado em outros atributos. Como exemplo, o atributo telefone da entidade ALUNO (formado por DDD + número do telefone). • Atributo derivado: atributo cujo valor é calculado a partir do valor de outro atributo. Ex: o atributo idade de entidade ALUNO é derivado, já que pode ser obtido a partir do valor do atributo data de nascimento. MODELO ENTIDADERELACIONAMENTO • Relacionamento: Termo usado para representar a associação entre entidades. • Deve ser identificado por um verbo. • Os relacionamentos possuem cardinalidade, identificação de quantas ocorrências de uma entidade têm correspondência na entidade relacionada. CARDINALIDADE Tipos de cardinalidade: • 1:1 (um para um) – cada ocorrência de uma entidade está relacionada a apenas uma ocorrência da outra entidade. • 1:N (um para muitos) - cada ocorrência de uma entidade está relacionada a várias ocorrências da outra entidade. • N:N (muitos para muitos) - cada ocorrência de uma entidade está relacionada a várias ocorrências da outra entidade e vice-versa. Este tipo de relacionamento dá origem a outra entidade. EXEMPLOS Relacionamento 1:1 Um coordenador cuida de apenas uma disciplina e cada disciplina é de responsabilidade de apenas um coordenador EXEMPLOS Relacionamento 1:N Um curso pode ter vários alunos, mas cada aluno só pode estar matriculado em um curso EXEMPLOS Relacionamento N:N Um aluno faz cursa várias disciplinas e cada disciplina pode ter vários alunos Obs: Este tipo de entidade tem representação diferente e é conhecido como ENTIDADE ASSOCIATIVA EXEMPLO O relacionamento CURSA descrito a seguir será transformado em entidade associativa. Cursa Aluno RA Disciplinas Código Nome Nota Nome AUTO RELACIONAMENTOS Tipo de situação onde uma instância de uma entidade tem relação com outra instância da mesma entidade. É fundamental saber o papel de cada instância da entidade. AUTO RELACIONAMENTOS Funcionário 1 Casado Marido Funcionário 1 Esposa Casado 1 Funcionário GENERALIZAÇÃO/ESPECIALIZAÇÃO • Em algumas situações, uma entidade pode conter instâncias com atributos diferentes. • Neste caso, é possível visualizar uma herança de propriedades • Para situações como essa, usamos os conceitos de generalização e especialização EXEMPLO Código CPF P. Física Cliente Nome P. Jurídica CNPJ EXEMPLO • Neste caso, a entidade CLIENTE é de um nível superior ou genérico (GENERALIZAÇÃO). • As entidades PESSOA FÍSICA e PESSOA JURÍDICA são entidades de nível inferior (ESPECIALIZAÇÃO) • Os atributos descritos na entidade CLIENTE são comuns às entidades PESSOA FÍSICA e PESSOA JURÍDICA EXEMPLO – DER (CONSULTÓRIO) Um médico trata de pacientes. Do médico deseja-se saber CRM, nome e suas especializações. O paciente é tratado por vários médicos. Do paciente necessitamos saber o nome, endereço e idade. O médico pede exames para o paciente. Para cada pedido de exame está associado um único tipo de exame. Tal pedido se faz com uma justificativa. CRM Nome Nome Código Médico M Trata N Endereço Paciente M N Idade Especializações Pede Exames Justificativa Data Pedido 1 Código Tipo Exame Nome Data Nasc. EXEMPLO - DER (PIZZARIA) Um cliente faz pedidos. Cada pedido possui diversos itens de pedido. Cada pedido é entregue por um motoboy. Cada item corresponde a um produto. Cód. Motoboy Motoboy Nome Cód. Cliente Entrega Nome Data Pedido Cód. Pedido 1 Cliente N Faz Pedido 1 Endereço Telefone Possui Produto 1 Cód. Item Corresponde Valor N Cód. Produto Descrição N Item Quantidade EXEMPLO – DER(EMPRESA) Um funcionário trabalha para um departamento. Cada funcionário possui diversos dependentes. Um departamento controla diversos projetos, sendo que um projeto só é controlado por um único departamento. Diversos funcionários participam por um certo número de horas em um projeto. Código Nome Nome Funcionário CPF N Código Trabalha para 1 Departamento N 1 1 Qtd. Horas Controla Possui Participa Data Início Código N N Nome M Projeto Dependente Data Término Nome Código EXERCÍCIOS Elabore o DER considerando as seguintes regras de negócio de uma Construtora : - Uma obra possui vários Engenheiros mas um Engenheiro só pode trabalhar em apenas uma obra até a sua conclusão. - Um obra utiliza vários materiais e um material pode ser utilizado em várias obras. - Em uma obra trabalham vários pedreiros e um pedreiro pode ser escalado para trabalhar em várias obras EXERCÍCIOS • Elabore o DER considerando as seguintes regras de negócio de uma Escola : - Uma classe possui vários alunos mas um aluno só pode estudar em apenas uma classe - Um professor pode lecionar várias matérias e uma matéria pode ser lecionada por vários professores - Uma classe possui apenas um professor responsável mas um professor pode ser responsável por várias classes EXERCÍCIOS • Elabore o DER considerando as seguintes regras de negócio de uma Clínica médica : - Um médico atende vários pacientes e um paciente pode ser atendido por vários médicos. - Podem existir vários médicos de uma especialidade médica mas cada médico trabalha com apenas uma especialidade - Um médico pode ser credenciado em vários convênios e um convênio pode ter vários médicos da clínica credenciados. EXERCÍCIOS • Elabore um DER para uma biblioteca, considerando as seguintes regras de negócio: - Uma editora publica vários livros e um livro pertence apenas uma editora. - Um escritor pode escrever vários livros e um livro por vários escritores - Uma editora possui vários escritores filiados e um escritor durante sua vida Profissional pode ter se filiado a várias editoras EXERCÍCIOS • Elabore o DER considerando as seguintes regras de negócio - Em um turno estudam vários alunos e um aluno só estuda em um turno. - Em um turno trabalham vários professores e um professor pode trabalhar em vários turnos. - Cada turno tem uma coordenadora, que pode coordenar mais de um turno EXERCÍCIOS • Elabore um DER para uma empresa, considerando as seguintes regras de negócio: - Um gerente coordena vários departamentos e um departamento só tem um gerente. - Em um departamento trabalham vários funcionários e um funcionário trabalha só em um departamento. - Um dependente só pode ser relacionado a um funcionário, mas um funcionário pode ter vários dependentes EXERCÍCIOS Elabore o DER considerando as seguintes regras de negócio: - Um departamento pode requisitar vários materiais. E um material pode ser requisitado por vários departamentos. - Um fornecedor pode fornecer vários materiais, e um material pode ser fornecido por diversos fornecedores. - Um representante pode representar vários fornecedores e um fornecedor pode ser representado por vários representantes. EXERCÍCIOS Elabore o DER considerando as seguintes regras de negócio - Um professor de educação física pode ter formação para várias modalidades esportivas. E uma modalidade esportiva pode ser ensinada por vários professores. - Uma modalidade esportiva pode ser oferecida em vários turnos. E um turno pode ter várias modalidades. - Um turno pode ter várias turmas, mas cada turma pertence apenas a um turno. - Um professor leciona para várias turmas e uma turma tem vários professores EXERCÍCIOS • Elabore o DER considerando as seguintes regras de negócio - Um professor pode lecionar em várias classes e em uma classe podem lecionar vários professores. - Um aluno pode frequentar várias classes e uma classe é frequentada por vários alunos. - Um professor é habilitado para várias disciplinas e uma disciplina tem vários professores habilitados. - Um aluno é pontuado em várias disciplinas e cada disciplina pontua vários alunos MODELO RELACIONAL • Criado por Edgar Codd (1970) • É um modelo intermediário entre os modelos conceitual e físico. • O modelo relacional é um esquema lógico bem próximo ao físico, também dependente do SGBD escolhido. • Deve ser criado conforme as definições do modelo conceitual • A maioria dos SGBDs atuais são relacionais MODELO RELACIONAL • Principais características de uma relação(tabela) • As tuplas são armazenadas na ordem em que estas forem sendo inseridas no BD • A ordem dos valores em uma tupla segue a ordem dos atributos na definição de um esquema • O valor de cada atributo é atômico(único), não pode ser composto MODELO RELACIONAL CodCliente Cliente Nome Telefone Entidade: Atributos Cliente CodCli Nome Telefone 1 José (31)5555-0000 2 Maria (31)5555-0001 3 João (31)5555-0002 MODELO RELACIONAL • Relacionamentos N:N darão origem a uma nova tabela com 2 relacionamentos 1:N; • Deve-se propagar o atributo identificador (chave primária) para a tabela na qual a cardinalidade do relacionamento seja N (chave estrangeira); • Atributos multivalorados em geral dão origem a uma nova entidade/tabela (fraca). MODELO RELACIONAL Alguns conceitos • TABELAS ou RELAÇÕES: Principal construção usada para representação de dados; estrutura composta de linhas e colunas usada para armazenamento • COLUNAS ou ATRIBUTOS: Correspondem aos itens que deverão ser armazenados (campos) • LINHA ou TUPLAS: conjunto de campos/atributos; conjunto de valores que representa uma ocorrência de uma entidade • DOMÍNIO: conjunto ou formato de dados que podem aparecer nas colunas EXEMPLO EXEMPLO MODELO FÍSICO • Modelo implementado no computador, através de um SGBD • Será o responsável pelo armazenamento dos dados • Deve seguir o que foi projetado nos modelos anteriores • Pode ter pequenas variações de um SGBD para outro • Operações serão executadas através da linguagem SQL EXEMPLO Criar um banco de dados para uma escola de Informática, que oferece vários cursos. Deseja-se armazenar dados dos cursos (código, nome e carga horária), professores (código, nome, número da carteira de trabalho e email), alunos (matrícula, nome, telefone para contato, data de nascimento, sexo). O aluno, em cada curso, terá uma nota, correspondente à avaliação final, sendo necessário tirar 60 pontos ou mais para ser aprovado. EXEMPLO Regras de negócio: • Um professor pode lecionar vários cursos e cada curso é lecionado por apenas um professor • Um aluno pode fazer vários cursos e cada curso pode ter vários alunos EXEMPLO - DER LINGUAGEM SQL COMANDOS DDL • Usados para criar bancos de dados e tabelas, além de alteração na estrutura das tabelas (acrescentar um campo, mudar as características de um campo, excluir um campo) • Não trabalham com dados • Principais instruções: • CREATE • ALTER • DROP LINGUAGEM SQL - DDL • Criação de um banco de dados create database nome do banco; • Criação de uma tabela create table nome da tabela (descrição dos campos); • Na descrição dos campos, especificamos o nome do campo, tipo de dado, tamanho(se necessário) e restrições LINGUAGEM SQL - DDL Algumas restrições: • primary key: define o campo como chave primária • not null: define que o campo deverá ser de preenchimento obrigatório • auto_increment: define que o campo será autoincrementado (autonumeração) TIPOS DE DADOS Numéricos Inteiros • • • • Tinyint Smallint Int Bigint • Numéricos Decimais • Float • Double • Decimal TIPOS DE DADOS Data e hora • Date data no formato ano-mês-dia • Datetime combinação de data e hora (aa-mm-dd hh:mm:ss) • Timestamp combinação de data e hora com formato variado • Time hora no formato hh:mm:ss • Year armazena um ano TIPOS DE DADOS Caracter • Char(n) Conjunto de caracteres com tamanho fixo(n) • Varchar(n) Conjunto de caracteres de tamanho variável EXEMPLO CREATE DATABASE ESCOLA; USE ESCOLA; CREATE TABLE Aluno ( IDAluno Int PRIMARY KEY not null auto_increment, NomeAluno Varchar(60) not null, Sexo Char not null, DataNascimento Date, Telefone Varchar(15)); EXEMPLO CREATE TABLE Professor ( IDProfessor Int PRIMARY KEY not null auto_increment, NomeProfessor Varchar(60) not null, CTPS Varchar(6) not null, Email Varchar(200)); CREATE TABLE Curso ( IDCurso Int PRIMARY KEY not null auto_increment, NomeCurso Varchar(30) not null, Horas Int not null, IDProfessor Int not null, FOREIGN KEY(IDProfessor) REFERENCES Professor (IDProfessor)); EXEMPLO CREATE TABLE Estuda ( IDEstuda Int PRIMARY KEY not null auto_increment, IDCurso Int not null, IDAluno Int not null, NotaAlunoCurso Double not null, FOREIGN KEY(IDCurso) REFERENCES Curso (IDCurso), FOREIGN KEY(IDAluno) REFERENCES Aluno (IDAluno)); LINGUAGEM SQL - DDL • Exclusão de um banco de dados drop database nome do banco; • Exclusão de uma tabela drop table nome da tabela; Exemplos: drop database Escola; drop table Aluno; drop table Professor; LINGUAGEM SQL - DDL Alteração das colunas de uma tabela • Acrescentar um campo alter table nome da tabela add campo/especificações; • Remover um campo alter table nome da tabela drop campo; • Alterar um campo alter table nome da tabela change campo novas especificações; EXEMPLO • Adicionar um campo chamado Celular à tabela Professor: alter table Professor add Celular varchar(15); • Adicionar um campo chamado RG à tabela Aluno: alter table Professor add RG varchar(10); • Adicionar um campo chamado NumDependentes à tabela Professor: alter table Professor add NumDependentes tinyint not null; EXEMPLO • Alterar o tamanho do campo Email para 150 caracteres: alter table Professor change Email Email varchar(150); • Alterar o nome do campo Telefone na tabela Aluno para TelefoneAluno alter table Aluno change Telefone TelefoneAluno varchar(15); EXEMPLO • Remover da tabela Professor o campo Email: alter table Professor drop Email; • Remover da tabela Aluno o campo DataNascimento: alter table Aluno drop DataNascimento; LINGUAGEM SQL – DML • Inserção de dados em uma tabela insert into nome da tabela values(lista de valores); Obs.: • Os valores devem estar separados por vírgulas e devem respeitar a ordem dos campos na tabela. • Quando um campo for auto_increment, seu valor deve ser substituído pela sentença null EXEMPLO • Inserir dados na tabela ALUNO insert into ALUNO values (null,”DANIELA DIAS”,”F”,”1989-0411”,”(31)32224411”); insert into ALUNO values (null,”JULIANO DO CARMO”,”M”,”1989-11-03”,”(31)33339987”); insert into ALUNO values (null,”ISABEL MENDES”,”F”,”1990-0103”,”(31)37412200”); insert into ALUNO values (null,”CARLOS PEIXOTO”,”M”,”198810-01”,”(31)33347411”); EXEMPLO Inserir dados na tabela PROFESSOR insert into PROFESSOR values (null,”ALEXANDRE”,”123456”,”[email protected]”); insert into PROFESSOR values (null,”MARIA”,”111111”,”[email protected]”); insert into PROFESSOR values (null,”EDUARDO”,”123456”,”[email protected]”); insert into PROFESSOR values (null,”LUCIANA”,”938826”,”[email protected]”); EXEMPLO Inserir dados na tabela CURSO insert into CURSO values (null,”VB.NET”,60,1); insert into CURSO values (null,”PHP”,120,3); insert into CURSO values (null,”JAVA”,80,4); insert into CURSO values (null,”SQL”,40,1); insert into CURSO values (null,”LÓGICA”,60,2); EXEMPLO Inserir dados na tabela ESTUDA insert into ESTUDA values (null,3,1,70); insert into ESTUDA values (null,3,2,75); insert into ESTUDA values (null,1,4,90); insert into ESTUDA values (null,1,2,55); insert into ESTUDA values (null,2,3,50); LINGUAGEM SQL – DML Exclusão de dados em uma tabela delete from nome da tabela where condição; Obs.: • A condição dever ser representada por uma expressão lógica que consiga localizar o registro a ser excluído • Caso a condição localize mais de um registro, eles serão excluídos. • A condição é opcional. Se não for especificada, serão excluídos TODOS os registros da tabela. EXEMPLO • Excluir o aluno cuja matrícula seja 7 delete from ALUNO where IDAluno=7; • Excluir o professor de nome “ALEXANDRE” delete from PROFESSOR where NomeProfessor = “ALEXANDRE”; • Excluir os cursos que tenham carga horária inferior a 30 delete from CURSO where HORAS<30; EXEMPLO • Excluir todos os alunos cadastrados delete from ALUNO; • Excluir todos os cursos com mais de 60 horas ministrados pelo professor com código 1 delete from CURSO where Horas>60 And IDProfessor = 1; • Excluir todos os cursos que tenham a palavra “CLIPPER” em qualquer lugar do nome delete from CURSO where NomeCurso like “%CLIPPER%”; LINGUAGEM SQL - DQL • Parte da linguagem SQL destinada a executar operações de consultas (recuperação) de registros, ou seja, permite visualizar o conteúdo parcial ou total de tabelas. • Representada pela instrução SELECT. • Como o formato desta instrução é muito extenso, vamos apresentando suas sentenças aos poucos. LINGUAGEM SQL - DQL • select campos from nome da tabela; • Neste formato, podemos visualizar alguns ou todos os campos de todos os registros de uma tabela. • No lugar de campos, descrevemos o nome da cada campo que deve aparecer na listagem, separados por vírgulas. • Caso queira que todos os campos apareçam na listagem, use o caracter * EXEMPLO • Visualizar código e nome de todos os alunos cadastrados select IDAluno, NomeAluno from ALUNO; • Visualizar código, nome e carga horária de todos os cursos cadastrados select IDCurso, NomeCurso, Horas from CURSO; • Visualizar nome e email de todos os professores cadastrados select NomeProfessor, Email from PROFESSOR; EXEMPLO • Visualizar todos os campos dos alunos cadastrados select * from ALUNO; • Visualizar todos os campos dos cursos cadastrados select * from CURSO; • Visualizar todos os campos dos professores cadastrados select * from PROFESSOR; LINGUAGEM SQL - DQL A sentença WHERE • Vem após a especificação do nome da tabela • Permite criar uma ou mais condições, que serão usadas para selecionar os registros retornados pela consulta • Aceita os operadores lógicos AND, OR, NOT EXEMPLO • Visualizar todos os campos dos alunos do sexo feminino (F)cadastrados select * from ALUNO where SEXO = “F”; • Visualizar todos os campos dos cursos que tenham carga horário igual ou superior a 80 horas select * from CURSO where HORAS >= 80; • Visualizar todos os campos dos cursos lecionados pelo professor de código 2 que tenham até 40 horas select * from CURSO where IDPROFESSOR = 2 and HORAS <=40; LINGUAGEM SQL - DQL • A sentença ORDER BY • Numa consulta, os registros são apresentados conforme ordem de armazenamento na tabela • Através da sentença ORDER BY, é possível definir novos campos e forma de ordenação(crescente/decrescente) • Deve ser colocada após a sentença WHERE • Podem ser definidos quantos campos o usuário quiser. Caso haja coincidência de valores no primeiro campo, a ordenação será feita pelo segundo. Isso vale para os demais campos citados. • Para ordenação decrescente, deve ser usada a sentença DESC EXEMPLO • Visualizar todos os campos dos alunos do sexo feminino (F)cadastrados select * from ALUNO where SEXO = “F” order by NOMEALUNO; • Visualizar todos os campos dos cursos que tenham carga horário igual ou superior a 80 horas select * from CURSO where HORAS >= 80 order by NOMECURSO; • Visualizar todos os campos dos cursos lecionados pelo professor de código 2 que tenham até 40 horas select * from CURSO where IDPROFESSOR = 2 and HORAS <=40 order by NOMECURSO desc; LINGUAGEM SQL - DDL • Operadores IN, LIKE e BETWEEN • São usados nas comparações definidas na sentença WHERE. • IN : Testa se o valor do campo está contido numa lista de valores pré-estabelecidos. Pode substituir uma sequência de condições, com o mesmo campo, que utilize o operador OR. • BETWEEN: Testa se o valor do campo está no intervalo definido • LIKE: faz comparação aproximada, localizando parte de uma sequência de caracteres em um campo. EXEMPLOS • Listar todos os dados dos cursos que tenham carga horária de 40, 60 ou 80 horas select * from CURSOS where HORAS in (40,60,80); • Listar todos os dados dos cursos que tenham a palavra “PROGRAMAÇÃO” no nome select * from CURSOS where NOMECURSO like “%PROGRAMAÇÃO%”; • Listar todos os dados dos cursos que tenham carga horária entre 50 e 90 horas select * from CURSOS where HORAS between 50 and 90; LINGUAGEM SQL - DQL • Funções de agregação • São funções da linguagem que servem para agrupar informações, agregando numa única linha o conteúdo de vários registros • Principais funções de agregação: • • • • • COUNT MIN MAX SUM AVG LINGUAGEM SQL - DQL • COUNT • Retorna a quantidade de registros existentes • MIN • Retorna o menor valor de um campo em um grupo de registros • MAX • Retorna o maior valor de um campo em um grupo de registros • SUM • Retorna a soma dos valores de um campo em um grupo de registros • AVG • Retorna a média dos valores de um campo em um grupo de registros EXEMPLOS • Contar o número de cursos select count(*) from curso; • Contar o número de cursos que tem número de horas igual ou superior a 80 select count(*) from curso where horas>=80; • Retornar a menor quantidade de horas, considerando todos os cursos select min(horas) from curso; • Retornar a menor quantidade de horas, considerando todos os cursos com número de horas acima de 50 select min(horas) from curso where horas > 50; EXEMPLOS • Retornar a maior quantidade de horas, considerando todos os cursos select max(horas) from curso; • Retornar a nota média dos alunos que estão matriculados no curso 1 select avg(NotaAlunoCurso) from estuda where idcurso=1; • Retornar a soma das notas do aluno de matrícula 1: select sum(NotaAlunoCurso) from estuda where idaluno = 1; GROUP BY • Esta cláusula serve para agrupar os registros, a partir do campo especificado. Assim, o resultado de uma consulta é dado em função destes grupos. Com os grupos formados é possível aplicar outras funções de agregação (sum, count, max, etc) EXEMPLO • Mostrar a quantidade de alunos, por sexo select sexo, count(*) from aluno group by sexo; • Mostrar a nota média dos alunos, por curso select idcurso, avg(notaalunocurso) from estuda group by idcurso; • Mostrar a quantidade de alunos, por curso select idcurso, count(*) from estuda group by idcurso; HAVING • Funciona como uma sentença WHERE, mas é aplicada ao grupo de registros selecionado pela sentença GROUP BY • Permite especificar uma ou mais condições que serão analisadas após o agrupamento dos registros pelo GROUP BY. Só serão selecionados os grupos que atenderem às condições estabelecidas. • IMPORTANTE: Quando usamos a cláusula HAVING, a seleção não é feita registro a registro, mas sim grupo a grupo. EXEMPLO • Mostrar a quantidade de alunos por sexo, apenas quando essa quantidade for superior a 5 select idcurso, count(*) from estuda group by idcurso having count(*) > 5 • Mostrar a nota média dos alunos, por curso, somente quando esta média for igual ou superior a 70 select idcurso, avg(notaalunocurso) from estuda group by idcurso having avg(notaalunocurso) >=70; • Mostrar a quantidade de alunos, por curso, considerando apenas os cursos com 6 ou mais alunos select sexo, count(*) from aluno group by sexo having count(*) > 6; SUBCONSULTAS • Consiste em uma instrução SELECT adicionada dentro de outra instrução SELECT • A segunda instrução é executada e retorna um valor, que servirá de entrada para a primeira consulta • Assim, numa subconsulta, temos dois “momentos”: no primeiro, a consulta mais interna é executada e retorna um ou mais valores; no segundo, é executada a consulta principal, retornando os registros que atendam às condições que utilizam os valores retornados na primeira consulta SUBCONSULTAS • Uma subconsulta é utilizada quando não se sabe os valores a serem usados na criação das condições • Devemos observar a compatibilidade entre o campo usado na comparação e o valor retornado • Uma subconsulta pode retornar mais de um valor; neste caso, na comparação da consulta principal, devemos usar o operador IN EXEMPLOS • Listar código e nome dos cursos que são lecionados pelo mesmo professor que leciona o curso “PHP” select idcurso, nomecurso from curso where idprofessor = (select idprofessor from curso where nomecurso = "PHP"); • Listar nome e carga horária dos cursos que tem carga horária igual ou superior ao curso “JAVA” select nomecurso, horas from curso where horas > (select horas from curso where nomecurso = "JAVA"); EXEMPLOS • Listar código de aluno e código de curso dos alunos matriculados no(s) mesmo(s) curso(s) que o aluno de matricula 1 select idaluno, idcurso from estuda where idcurso in (select idcurso from estuda where idaluno = 1);