Banco de Dados I Introdução SQL Frederico Queiroga fredericoqueiroga@gmail.com https://sites.google.com/site/fredericoqueiroga/ Linguagem SQL Aspectos Gerais: Independência do fabricante: Está incorporada em todos os SGBDs em seu padrão ANSI, com as extensões proprietárias. Portabilidade entre computadores: Pode ser usada desde um PC até um Mainframe. Não é uma linguagem case-sensitive. Frederico Queiroga Banco de Dados I 2 1
Linguagem SQL Existem dois aspectos na gerência de dados: A definição dos dados (DDL - Data Definition Language). A manipulação dos dados (DML Data Manipulation Language) Definição de Dados (DDL): Informa ao SGBD quais tabelas existirão, quais atributos existirão, quais atributos serão indexados, as restrições de integridade, etc. Manipulação de Dados (DML): Refere-se às quatro operações básicas executadas sobre os dados armazenados em qualquer SQBD: recuperação e atualização dos dados, inserção de novos registros e exclusão de registros existentes. A linguagem SQL incorpora a DDL e a DML. Frederico Queiroga Banco de Dados I 3 SQL - Manipulação de Dados Manipular Dados CONSULTA SELECT INCLUSÃO INSERT ALTERAÇÃO UPDATE EXCLUSÃO DELETE Frederico Queiroga Banco de Dados I 4 2
Linguagem SQL Em todos os exemplos a seguir, será utilizado o exemplo de uma locadora de DVD: Tabela Alunos (codigo, nome, endereco, fone, email) Tabela Cursos (codigo, nome) Tabela Matriculas (codigo, aluno, curso, datamatricula, semestre) aluno referencia Alunos curso referencia Cursos Observação: é uma boa prática de programação não utilizar caracteres especiais nos nomes de campos e tabelas. Frederico Queiroga Banco de Dados I 5 Criando Banco de Dados Sintaxe para criar um banco de dados: CREATE DATABASE <nome do banco de dados> - Sintaxe para destruir: DROP DATABASE <nome do banco de dados> - Exemplo de criação de um BD de uma Locadora de DVDs: CREATE DATABASE Matriculas Frederico Queiroga Banco de Dados I 6 3
Sintaxe para criar tabelas: CREATE TABLE Nome_Tabela( atributo1 tipo1, atributo2 tipo2,..., restrições de integridade) Sintaxe para destruir: DROP TABLE Nome_Tabela Frederico Queiroga Banco de Dados I 7 - Observações: O nome de uma tabela em um banco de dados deverá ser único. Cada coluna deverá ser criada através da especificação do seu nome, tipo e tamanho do dado que irá armazenar. O nome de uma coluna deverá ser único dentro de cada tabela. Uma tabela representa uma entidade do banco de dados onde cada linha equivale a uma ocorrência e cada coluna equivale a um atributo dessa entidade. Frederico Queiroga Banco de Dados I 8 4
CREATE TABLE Cursos ( codigo int NOT NULL identity, nome varchar(100) not NULL, area varchar(50) NULL, valor numeric(10,2), PRIMARY (codigo) ) Frederico Queiroga Banco de Dados I 9 Criando a tabela de Alunos: CREATE TABLE Alunos( codigo int NOT NULL, nome varchar(100) NOT NULL, endereco varchar(100) NOT NULL, datanasc datetime, sexo char(1), fone varchar(10) NOT NULL, email varchar(100) default( email@mudar.com.br ), PRIMARY KEY (codigo), CHECK (sexo in ( M, F )) ) Default: Indica um valor que será armazenado no atributo caso não seja informado outro valor pelo usuário Frederico Queiroga Banco de Dados I 10 5
CREATE TABLE Matriculas( aluno int NOT NULL, curso int NOT NULL, datamatricula datetime NOT NULL, semestre char(5) NOT NULL, situacao char(1) default ( C ), PRIMARY KEY (aluno, curso), FOREIGN KEY (aluno) REFERENCES Alunos, FOREIGN KEY (curso) REFERENCES Cursos, CHECK (situacao in ( C, A, P )) ) Frederico Queiroga Banco de Dados I 11 Not null: Indica que o atributo deverá ser obrigatoriamente informado pelo usuário na hora de inserir dados na tabela. Todos os campos, por default, aceitam valores nulos. Identity (inicio, incremento): Indica que o atributo será preenchido automaticamente com valores auto-incrementados e não são reaproveitados. O início indica o primeiro valor a ser atribuído e o incremento indica o crescimento do campo. A informação dos valores de inicio e incremento não é obrigatória, se não for informada o default é (1,1). Frederico Queiroga Banco de Dados I 12 6
Varchar (tamanho): Tipo de String com tamanho de armazenamento variável, de acordo com os valores inseridos pelo usuário. O tamanho indicado na criação da tabela é a quantidade máxima de caracteres que poderão ser armazenados no campo. O tamanho não é obrigatório, se esta informação for omitida o default é 1. Char (tamanho): Tipo de String com tamanho de armazenamento fixo, de acordo com a quantidade de caracteres definidos na criação da tabela. O tamanho não é obrigatório, se esta informação for omitida o default é 1. Frederico Queiroga Banco de Dados I 13 Datetime: Tipo data no formato dia-mes-ano/hh:mm:ss Observação: no SQL-Server, o tipo é sempre datetime. Numeric (N,D): Tipo numérico que aceita valores reais. N indica o total de números e D indica a quantidade de decimais. O total de números, inclui as casas decimais. Exemplo: numeric(10,2) são oito espaços para a parte inteira e dois Decimais In (conjunto de valores): Indica que o valor de um determinado atributo deve estar presente no conjunto de valores definido. Frederico Queiroga Banco de Dados I 14 7
Primary Key: Restrição de integridade que define a chave primária da tabela. Se a chave for composta, os nomes devem ser separados por vírgulas. Unique: Restrição de integridade que indica que um campo não poderá receber valores repetidos na tabela, ou seja, dois registros não podem ter o mesmo valor para esse campo. Check: Restrição de integridade que indica condições para o preenchimento de um campo. Frederico Queiroga Banco de Dados I 15 FOREIGN KEY: Restrição de integridade que define a chave estrangeira. Para que um atributo seja chave estrangeira de uma tabela, é necessário que ele seja chave primária da tabela referenciada. O nome do campo na tabela que terá a chave estrangeira não precisa ser o mesmo do campo na tabela referenciada, devem ser do mesmo tipo. Frederico Queiroga Banco de Dados I 16 8
Diagrama no SQL Server que representa as tabelas criadas: Frederico Queiroga Banco de Dados I 17 Comandos SQL - Inserção Sintaxe para inserção de dados: INSERT INTO Tabela (atributo1, atributo2,...) VALUES (valor1,valor2,...) OU INSERT INTO Tabela VALUES (valor1,valor2,...) Observação: Na segunda opção todos os atributos da tabela devem ser especificados na clausula VALUES. Frederico Queiroga Banco de Dados I 18 9
Comandos SQL - Inserção Inserindo dados na tabela de Alunos: INSERT INTO Alunos (codigo, nome, endereco, datanasc, sexo, fone, email) VALUES (1, Fulano de Tal, Rua das Flores, 10/09/1985, M, 2222-2222, fulano@fulano.com.br ) Inserindo dados na tabela de Cursos: INSERT INTO Cursos (Nome, Area, Valor) VALUES ( Eng. Florestal, Engenharia, 550) - Lembre que os campos identity não são informados na lista de atributos. Inserindo dados na tabela de Matriculas: INSERT INTO Matriculas VALUES (1, 1, 2013-01-01, 20131, A ) Frederico Queiroga Banco de Dados I 19 Comandos SQL - Inserção Observações Lista de atributos: A lista de atributos é usada para indicar que campos da tabela devem ser preenchidos, e com que valores. Se não for incluída, o banco de dados tentará preencher todos os campos da tabela na seqüência em que foram criados. Portanto, a lista é obrigatória quando alguns campos não forem preenchidos, ou quando a ordem dos valores estiver alterada. Os campos não informados serão preenchidos com NULL (se não tiverem sido definidos como NOT NULL), ou com valores default definidos na criação da tabela. Frederico Queiroga Banco de Dados I 20 10
Comandos SQL - Inserção Observações Lista de atributos: Valores do tipo char, varchar e datetime devem ser representados entre apóstrofos (aspas simples ). No SQLServer, se a hora do campo do tipo datetime não for informada, o SGBD colocará 00:00:00 como default. As casas decimais dos números devem ser separadas por pontos, em vez de vírgulas. Valores do tipo varchar ou char podem conter acentos e espaços em branco. Frederico Queiroga Banco de Dados I 21 Comandos SQL - Atualização Sintaxe para atualização de dados: UPDATE Tabela SET atributo = valor WHERE condicao Frederico Queiroga Banco de Dados I 22 11
Comandos SQL - Atualização Mudar o telefone do aluno com código 1 para 8808-0000 : UPDATE Alunos SET fone = 8808-0000 WHERE codigo = 1 Mudar o valor do Curso de Administração para R$600,00: UPDATE Curso SET valor = 600 WHERE nome = Administração Frederico Queiroga Banco de Dados I 23 Comandos SQL - Atualização Observações: A cláusula WHERE é opcional no comando UPDATE. Se não for informada, a atualização será realizada em toda a tabela Exemplo: O comando abaixo muda o valor de todos os Cursos cadastrados para R$ 500. UPDATE Cursos SET Valor = 500 Frederico Queiroga Banco de Dados I 24 12
Comandos SQL - Exclusão Sintaxe para exclusão de dados: DELETE FROM tabela WHERE condição Frederico Queiroga Banco de Dados I 25 Comandos SQL - Exclusão Apagar cadastros de todos os Alunos do sexo masculino: DELETE FROM Alunos WHERE Sexo = M Apagar as Alunas do sexo feminino que nasceram na década de 80: DELETE FROM Alunos WHERE Sexo = F and DataNasc >= 01/01/1980 and DataNasc <= 31/12/1980 Apagar cadastros de todos os Cursos das Áreas de Contabilidade e Direito: DELETE FROM Cursos WHERE area = Direito or area = Contabilidade Frederico Queiroga Banco de Dados I 26 13
Comandos SQL - Exclusão Observações: A cláusula WHERE é opcional no comando DELETE. Se não for informada, a exclusão será realizada em toda a tabela. O comando abaixo exclui todas as Matriculas cadastradas: DELETE FROM Matriculas O comando DELETE exclui os dados, mas não exclui a tabela do banco de dados. Para excluir a tabela inteira (dados e estrutura), usar o comando: DROP TABLE. Frederico Queiroga Banco de Dados I 27 Comandos SQL Alteração de Tabelas Alteração de tabelas para inclusão de campos: ALTER TABLE Tabela ADD atributo tipo restrição_integridade Alteração de tabelas para exclusão de campos: ALTER TABLE tabela DROP COLUMN atributo Frederico Queiroga Banco de Dados I 28 14
Comandos SQL Alteração de Tabelas Inclusão do campo ano na tabela DVD: ALTER TABLE Cursos ADD Observação varchar(255) Exclusão do campo sexo da tabela Alunos: ALTER TABLE Alunos DROP COLUMN Sexo Frederico Queiroga Banco de Dados I 29 FIM Frederico Queiroga Banco de Dados I 30 15