Sistemas de Informação e Bases de Dados 2012/2013 Linguagem SQL Alberto Sardinha
Bibliografia Raghu Ramakrishnan, Database Management Systems, Cap. 3 e 5 1
Sumário Linguagem SQL 2
História Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R Renomeada para SQL (Structured Query Language) Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2008 2011 Instituto Superior Técnico 3
História Sistemas comerciais suportam: a maior parte do SQL-92 algumas das funcionalidades dos standards mais recentes algumas funcionalidades específicas e proprietárias 2011 Instituto Superior Técnico 4
Âmbito da linguagem SQL Definição de dados SQL/DDL Data Definition Language Manipulação de dados interactiva SQL/DML Data Manipulation Language 2011 Instituto Superior Técnico 5
Âmbito da linguagem SQL Restrições de integridade Definição de vistas Controlo de transações Inclusão em linguagens de programação Autorização e segurança 2011 Instituto Superior Técnico 6
Definição de dados Permite especificar uma estrutura de dados (base de dados, tabelas, etc) Por exemplo, na criação de uma tabela (relação) podemos definir: domínio de cada coluna restrições de integridade chave primária e chave estrangeira índices para a relação 2011 Instituto Superior Técnico 7
Exemplo do banco branch account depositor loan borrower customer IST DEI Bases de Dados
Criar uma base de dados CREATE DATABASE database_name Exemplo: create database bank 9
Definição do esquema Uma tabela define-se com o comando: create table tabela (coluna 1 tipo 1, coluna 2 tipo 2, restrição-integridade 1, restrição-integridade 2,... ) tabela é o nome da tabela (dar um nome adequado) coluna i é o nome de uma coluna 2011 Instituto Superior Técnico 10
Esquema relacional - exemplo account(account_number, branch_name, balance) depositor(customer_name, account_number) 11
Definição do esquema exemplo create table account (account_number char(10), branch_name char(15), balance numeric(12,2), primary key (account_number)) create table depositor (customer_name char(20), account_number char(10), primary key (customer_name, account_number))
Tipos básicos de domínio Tipos de dados suportados em SQL: char(n) cadeia de caracteres de tamanho fixo (pouco usado) varchar(n) tamanho variável, máximo n integer smallint numeric(p,d) p dígitos, d casas decimais real float(n) pelo menos n dígitos 2011 Instituto Superior Técnico 13
Inserção de tuplos Criar uma nova conta com: número A-973 agência de Perryridge saldo inicial 1200 insert into account(account_number, branch_name, balance) values ( A-973, Perryridge,1200) insere 1 registo 14
Alteração de relações Remover colunas alter table tabela drop column coluna!! Exemplo: alter table account drop column balance! 2011! Instituto Superior Técnico 15
Alteração de relações Inserir colunas alter table tabela add coluna tipo! todos os tuplos ficam com null neste novo atributo Exemplo: alter table account add balance numeric(12,2)! 2011 Instituto Superior Técnico 16
Remoção de elementos Remover a tabela Account da base de dados!!drop table account!! Apagar todos os registos de uma tabela!!delete from account!! 17
Esquema relacional Chave Estrangeira account(account_number, branch_name, balance) depositor(customer_name, account_number) account_number: FK(account) 18
Definição do esquema Chave Estrangeira create table account (account_number char(10), branch_name char(15), balance numeric(12,2), primary key (account_number)) Incluir chave estrangeira: create table depositor (customer_name char(20), account_number char(10), primary key (customer_name, account_number), foreign key(account_number) references account(account_number))
Definição do esquema NOT NULL Não aceita valores NULOS: create table depositor (customer_name char(20), account_number char(10) NOT NULL)
Definição do esquema UNIQUE Restrição UNIQUE (valor único): create table depositor (customer_name char(20), account_number char(10) UNIQUE)
Definição do esquema CHECK Restrição CHECK: create table account (account_number char(10), branch_name char(15), balance numeric(12,2), check(balance > 0), primary key (account_number)) 22
Alteração de relações create table depositor (customer_name char(20) NOT NULL, account_number char(10) NOT NULL) Incluir chave primária: alter table depositor add primary key(customer_name, account_number)
Alteração de relações create table depositor (customer_name char(20), account_number char(10), primary key(customer_name, account_number) Incluir chave estrangeira: alter table depositor add foreign key(account_number) references account(account_number)
Estrutura básica de consultas em SQL Consulta típica em SQL select c 1, c 2,..., c n from t 1, t 2,..., t m where P c i colunas t i tabelas ou outras relações P condições lógicas de seleção
Estrutura básica de consultas em SQL (observações) Consulta típica em SQL select c 1, c 2,..., c n from t 1, t 2,..., t m where P se where for omitida, é como se P seja true o resultado pode conter tuplos duplicados! o SGBD pode converter a consulta para a expressão algébrica mais eficiente 26
A cláusula select A cláusula select lista as colunas pretendidas no resultado Exemplo: nomes de todas as agências com empréstimos em SQL select branch_name from loan IST DEI Bases de Dados
A cláusula select duplicados SQL permite duplicados em resultados distinct força a eliminação de duplicados Exemplo: nomes de todas as agências com empréstimos, sem duplicados select distinct branch_name from loan Para forçar a apresentação de duplicados (default) select all branch_name from loan IST DEI Bases de Dados
A cláusula select símbolo * Para obter todas as colunas select * from loan É possível usar também expressões aritméticas: +,, *, /, aplicadas a constantes ou atributos select loan_number, amount * 100 from loan IST DEI Bases de Dados
A cláusula from Indica as relações envolvidas na pergunta (produto) exemplo: produto cartesiano select * from borrower, loan IST DEI Bases de Dados
Produto cartesiano Combinar os dados de duas relações exemplo: select * from borrower, loan IST DEI Bases de Dados
A cláusula where A cláusula where especifica as condições que o resultado deve verificar (seleção) Exemplo: números dos empréstimos da agência de Perryridge com quantias superiores a 1200 select loan_number from loan where branch_name= Perryridge and amount >1200 condições: =, >, <, >=, <=, <>, like, is null operadores lógicos: and, or, not IST DEI Bases de Dados
Exemplo de consulta SQL Nomes dos clientes com empréstimo na agência de Perryridge select customer_name from borrower, loan where borrower.loan_number = loan.loan_number and branch_name = Perryridge borrower loan IST DEI Bases de Dados
Exemplo de consulta SQL Nomes dos clientes com empréstimo na agência de Perryridge passo 1 IST DEI Bases de Dados
Exemplo de consulta SQL Nomes dos clientes com empréstimo na agência de Perryridge passo 2 IST DEI Bases de Dados
Exemplo de consulta SQL Nomes dos clientes com empréstimo na agência de Perryridge passo 3 IST DEI Bases de Dados
Renomeação em SQL Para renomear usa-se a cláusula as na forma nome_antigo as novo_nome Exemplo: nomes dos clientes e quantias dos empréstimos select customer_name as nome, amount as quantia from borrower, loan where borrower.loan_number = loan.loan_number IST DEI Bases de Dados
Variáveis Definidas na cláusula from com recurso à cláusula as exemplo: nomes dos clientes e quantias dos empréstimos select T.customer_name, S.amount from borrower as T, loan as S where T.loan_number = S.loan_number IST DEI Bases de Dados
Variáveis outro exemplo Nomes das agências com ativo superior a alguma agência de Brooklyn select distinct T.branch_name from branch as T, branch as S where T.assets > S.assets and S.branch_city = Brooklyn IST DEI Bases de Dados
Sumário Linguagem SQL 40