SQL Structured Query Language Linguagem de Consulta Estruturada; Originou-se da linguagem SEQUEL (1974); Revisada e chamada de SQL em 1976/77; Em 1986, padronizada pelo ANSI/ISO - chamada SQL-86; Em 1987 a IBM lança seu próprio padrão - SAA-SQL; Criada extensão para o padrão SQL - a SQL-89, em 1989; Versão em uso do padrão ANSI-ISO: SQL-92; Em 1999, aprovada SQL-3. 1 Os comandos SQL podem ser agrupados em algumas classes: Linguagem de Definição de Dados (DDL): proporciona comandos para definição, exclusão e modificação de relações (tabelas), bem como definição de índices; Linguagem de Manipulação de Dados (DML): linguagem de consulta baseada em álgebra e cálculo relacional. Engloba também comandos para inserção, exclusão e modificação de tuplas; Outras: DML incorporada, definição de visões, autorização, integridade e controle de transações. 2 1
Autor cod_autor nome nascimento (1,1) Escreve (1,n) Livro (1,n) titulo cod_autor cod_editora valor publicacao volume Exemplo Modelo Entidade-Relacionamento Publicado (1,1) Editora cod_editora razao endereco CGC cidade 3 Exemplo Modelo Relacional AUTOR ( COD_AUTOR, NOME, NASCIMENTO) LIVRO (TITULO, COD_AUTOR, COD_EDITORA, VALOR REAL, PUBLICACAO, VOLUME) Cod_Autor referencia AUTOR Cod_Editora referencia EDITORA EDITORA( COD_EDITORA, RAZAO, CGC, ENDERECO, CIDADE ) 4 2
Linguagem de Definição de Dados (DDL) - comandos básicos Create Table - define a estrutura de uma tabela, suas restrições de integridade; cria a tabela vazia. Drop Table - elimina a tabela da base de dados; Alter Table - permite modificar a definição de uma tabela, adicionando novas colunas (campos), excluindo campos, modificando chaves primárias e estrangeiras. 5 Linguagem de Definição de Dados (DDL) - Create Table CREATE TABLE Nome_Tabela ( atributo 1 tipo [tamanho] (null/not null), atributo 2 tipo [tamanho] (null/not null),... atributo n tipo [tamanho] (null/not null), PRIMARY KEY (campo), FOREIGN KEY (campo) REFERENCES Tabela UNIQUE KEY (campo) ) 6 3
Alguns Tipos de Dados Aceitos (Padrão SQL-92) char (n) - character int - integer smallint; real; float (n); date : ano com 4 dígitos, mês e dia do mês; time : horário, em horas, minutos e segundos. 7 Linguagem de Definição de Dados (DDL) - Create Table Autor ( Cod_Autor, Nome, Nascimento ) CREATE TABLE Autor ( Cod_Autor integer NOT NULL, Nome char(30) NOT NULL, Nascimento date NULL PRIMARY KEY (Cod_Autor)) 8 4
Linguagem de Definição de Dados (DDL) - Create Table Editora( Cod_Editora, Razao, CGC,Endereco, Cidade ) CREATE TABLE Editora ( Cod_Editora integer NOT NULL, Razao char(40) NOT NULL, CGC char (14) NOT NULL Endereco char(40) NOT NULL, Cidade char(25) NOT NULL, PRIMARY KEY (Cod_Editora), UNIQUE KEY (CGC) ) 9 Linguagem de Definição de Dados (DDL) - Create Table Livro (Titulo, Cod_Autor, Cod_Editora,ValorReal, Publicacao, Volume) Cod_Autor referencia AUTOR CREATE TABLE Livro Cod_Editora referencia EDITORA ( Titulo char(30) NOT NULL, Cod_Autor integer NOT NULL, Cod_Editora integer NOT NULL, ValorReal real NOT NULL, Publicacao date NOT NULL, Volume integer, PRIMARY KEY (Titulo, Cod_Autor), FOREIGN KEY (Cod_Autor) REFERENCES AUTOR, FOREIGN KEY (Cod_Editora) REFERENCES EDITORA) 10 5
Linguagem de Definição de Dados (DDL) - DROP Table DROP TABLE Nome_Tabela DROP TABLE Editora OBS : não exclui se tiverem livros referenciando uma editora. Cláusula ON DELETE CASCADE 11 Linguagem de Definição de Dados (DDL) - Drop Table CREATE TABLE Livro ( Titulo char(30) NOT NULL, Cod_Autor integer NOT NULL, Cod_Editora integer NOT NULL, ValorReal real NOT NULL, Publicacao date NOT NULL, Volume integer, PRIMARY KEY (Titulo, Cod_Autor), FOREIGN KEY (Cod_Autor) REFERENCES AUTOR, FOREIGN KEY (Cod_Editora) REFERENCES EDITORA ON DELETE CASCADE) 12 6
Linguagem de Definição de Dados (DDL) - Alter Table ALTER TABLE Nome_Tabela ADD Campo Tipo Tamanho ALTER TABLE Livro ADD Lingua char(15) OBS: Inclui o campo Lingua na tabela Livro, do tipo varchar com tamanho 15 13 Linguagem de Definição de Dados (DDL) - Alter Table ALTER TABLE Nome_Tabela DROP Campo ALTER TABLE Livro DROP Lingua OBS: Exclui o campo Lingua da tabela Livro. 14 7
Linguagem de Definição de Dados (DDL) - Alter Table Caso tenha sido esquecida a declaração de chave estrangeira ALTER TABLE Livro ADD FOREIGN KEY(Cod_Editora) REFERENCES Cidade 15 Linguagem de Manipulação de Dados (DML) - Comandos Básicos de Manipulação de Dados Sintaxe básica de uma instrução de Consulta SELECT lista de colunas (campos) FROM lista de tabelas WHERE condição 16 8
Linguagem de Manipulação de Dados (DML) - Comandos Básicos de Manipulação de Dados O modelo básico de execução SQL é o seguinte: é feito o produto cartesiano das tabelas envolvidas (caso haja mais de uma); são selecionadas as linhas da tabela que obedecem a condição estabelecida; é feita a projeção sobre as colunas que vão ao resultado. 17 Linguagem de Manipulação de Dados (DML) - Comandos Básicos de Manipulação de Dados Projeção SELECT lista de colunas(campos) FROM lista de tabelas Produto Cartesiano WHERE condição Seleção 18 9
Exemplo: selecionar todas as informações sobre os livros publicados no ano de 2000 SELECT Titulo, CodEditora,ValorReal, Publicacao,Volume FROM Livro WHERE publicacao = 2000 OU SELECT * FROM Livro WHERE publicacao = 2000 19 Operadores Utilizados para a Condição Where =, <>, <, <=, >=, and, not, or (já conhecidos) BETWEEN AND : condição entre um limite de valores LIKE : a coluna pesquisada tem que ser do char ou varchar % - indica um conjunto de caracteres - um caracter 20 10
Exemplo Cláusula Between And : selecionar todas as informações sobre os livros publicados entre os anos de 1980 e 2000 SELECT * FROM Livro WHERE publicacao BETWEEN 1980 AND 2000 21 banco de dados Exemplo Cláusula like : selecionar todos os livros cujos títulos iniciem com a palavra banco SELECT * FROM Livro WHERE Título LIKE banco% Exemplo: banco de jardim 22 11
Exemplo Cláusula like : selecionar todos os livros cujos títulos terminem com a palavra banco SELECT * FROM Livro WHERE Título LIKE %banco Exemplo: caixa de banco 23 Exemplo Cláusula like : selecionar todos os livros cujos títulos tenham a palavra banco SELECT * FROM Livro WHERE Título LIKE %banco% Exemplo: Sistemas de Banco de Dados 24 12
Exemplo Cláusula like : selecionar todos os livros cujos títulos iniciem com a letra B e tenham a terceira letra do título N SELECT * FROM Livro WHERE Título LIKE B_N% Exemplo: BANCO DE DADOS 25 JUNÇÃO DE RELAÇÕES Mostrar os dados da editora que publicou o livro de título Banco de Dados SELECT Editora.Codigo, Editora.CGC, Editora.Razao... FROM Editora, Livro WHERE Editora.CodEditora = Livro.CodEditora AND Livro.Título = Banco de Dados Produto Cartesiano Filtro do Produto Cartesiano 26 13
JUNÇÃO DE RELAÇÕES - Utilizando Apelidos Mostrar os dados da editora que publicou o livro de título Banco de Dados SELECT Editora.Codigo, Editora.CGC, Editora.Razao... FROM Editora E, Livro L WHERE E.CodEditora = L.CodEditora AND Livro.Título = Banco de Dados 27 Obter o nome do autor dos livros da editora Santa Maria, que tenham, nos títulos do livro, a frase Banco de Dados Em primeiro lugar, o que precisamos? Nome do autor : Autor Editoras de Santa Maria - nome da editora somente em : Editora Ter no título do Livro a frase Banco de Dados - título : Livro LIVRO X EDITORA X AUTOR 28 14
Obter o nome do autor dos livros da editora Santa Maria, que tenham, nos títulos do livro, a frase Banco de Dados Em primeiro lugar, o que precisamos? Nome do autor : Autor Editoras de Santa Maria - nome da editora somente em : Editora Ter no título do Livro a frase Banco de Dados - título : Livro LIVRO X EDITORA X AUTOR Condições: Editora - Santa Maria WHERE Razao = Santa Maria Livro - frase Banco de Dados WHERE Título LIKE %Banco de Dados% Relacionamentos dos produtos cartesianos: Livros da Editora : Livro.CodEditora = Editora.CodEditora Autor dos Livros : Livro.CodAutor = Autor.CodAutor 29 Obter o nome do autor dos livros da editora Santa Maria, que tenham, nos títulos do livro, a frase Banco de Dados JUNÇÃO SELECT Autor.Nome FROM Autor,Editora,Livro WHERE Editora.Nome = Santa Maria AND Livro.Titulo like %Banco de Dados% AND Editora.CodEditora = Livro.CodEditora AND Autor.CodAutor = Livro.CodAutor 30 15