Linguagem SQL Bancos de Dados II Linguagem SQL
SQL - Principais conceitos Machado cap.14 Introdução Importância da linguagem SQL; 1970 - Fundamentada no modelo relacional de CODD; 1974 1ª versão - SEQUEL definida na IBM; 1975 Primeiro protótipo em 1975; 1976 Primeira revisão passando após ampliações para SQL por razões jurídicas; 1977 SYSTEM R ORACLE é lançado; 1983 Popularizou-se: SQL/DS e DB2 (IBM), ZIM, RDB, SYBASE; 1983 Padrão de acesso a SGBD Relacionais de fato ; 1986 ANSI padrão oficial; Vários dialetos; 1989 SQL recebe reforço de integridade versão SQL/89; 1992 É apresentada a versão SQL2; 1999 É apresentada a versão SQL3. 2
SQL - Principais conceitos Machado cap.14 Conceitos Bancos de Dados Relacionais Linhas (registros); Colunas (campos); Não ordenadas; Localizadas por campo chave PK; Facilidade de manipulação e entendimento; Voltada para ambiente relacional mas pode ser usada em outros ambientes; 3
SQL - Principais conceitos Machado cap.14 Linguagem SQL Originalmente só interativa; Após acréscimos passou a ser suportada por linguagens hospedeiras (COBOL, PL/I, C, VB, DELPHI, etc.) - DML Embutido; 4
SQL - Principais conceitos Machado cap.14 Variedade de Enfoques FORMS SQL LIGAÇÃO COM OUTROS COMPUTADORES SQL SGBD Sistema Gerenciador de Banco de Dados SQL Consultas AD HOC SQL SQL Relatórios SQL SQL Ferramentas Front-End BD Gateway Programas de Aplicação DBA Bancos de Dados Outros Bancos de Dados Queries AD-HOC 5
SQL - Principais conceitos Machado cap.14 Linguagem SQL - Usos Linguagem interativa de Consulta; Linguagem de programação DML Embutido; Linguagem de Administração de Banco de Dados; Linguagem cliente/servidor; Linguagem para Banco de Dados Distribuído; Caminho de acesso a outros Bancos de Dados em outras máquinas. 6
SQL - Principais conceitos Machado cap.14 Classes de Objetos (principais) DDL Criar Destruir Modificar Implementação do Ambiente SQL Segurança Controle Administração DML Consultar Inserir Alterar Apagar 7
SQL - Principais conceitos Machado cap.14 Classes de Objetos DDL Data Definition Language (Linguagem de Definição de Dados); Create, Alter, Drop DML Data Manipulation Language (Linguagem de Manipulação de Dados); Select, Insert, Update Controle de acessos; Grant, Revoke Compartilhamento de Dados; Controle de Usuários e instâncias Integridade dos Dados; Foreign Keys, constraints 8
SQL - Principais conceitos Machado cap.14 Vantagens Independência de fabricante; Portabilidade entre computadores; Redução dos custos com treinamento; Sentenças padrão em inglês para acesso e manipulação; Consulta interativa (atualmente há ferramentas visuais que facilitam ainda mais); Múltiplas visões dos dados; Definição dinâmica dos dados. 9
SQL - Principais conceitos Machado cap.14 Desvantagens A maioria dos fabricantes implementa suas próprias versões muitas vezes ignorando os padrões ISO e ANSI; A portabilidade é relativa em função das limitações do item acima; Padronização leva à inibição da criatividade; Interfaces gráficas; Não atende a todas as necessidades de processamento. 10
SQL - Principais conceitos SQL Ferramenta de acesso aos bancos de dados Relacionais Algumas características: PL/SQL Linguagem não procedural; Não atende a todas as necessidades de processamento. Linguagem de acesso a bancos de dados Relacionais Algumas características: Linguagem procedural; Supre as limitações de processamento da linguagem SQL. 11
SQL - Principais conceitos Classes de Comandos DRL Data Retrieval Language Recuperação ou extração de dados do BDR; Seleção (Select); DML Data Manipulation Language Linguagem de Manipulação de Dados do BDR; Inclusão (Insert), Alteração (Update) e Exclusão (Delete); DDL Data Definition Language Linguagem de Definição Tabelas no BDR; Criar (Create), Alterar (Alter), Eliminar (Drop); DCL Data Configuration Language Define autorização de acesso aos dados do BDR; Garanta (Grant), Revogue (Revoke). 12
SQL - Principais conceitos Estrutura básica dos DRL O que mostrar? SELECT atributos (colunas de tabelas, constantes, variáveis de sistema, resultados de cálculos, etc...); De onde? FROM tabelas apelidos (quais tabelas preciso consultar para obter os dados necessários para a consulta); Em que condições? WHERE condições de seleção (critérios de seleção ou filtragem para obtenção dos dados desejados); Organizado como? ORDER atributos (quais atributos deverão ser utilizados para ordenação dos resultados); 13
SQL - Principais conceitos Modelo e tabelas utilizadas para os exemplos e exercícios. Registro de trabalhos selecionados para eventos acadêmicos. Modelo Conceitual POSSUI (1:N) ACEITOS (N:1) POSSUI ARTIGOS AUTOR TÍTULO UNIVERSIDADEORIGEM ÓRGÃOFINANCIADOR NOTA EVENTO AUTOR TITULO EVENTOS EVENTO LOCAL MÊS NUMPARTICIPANTES UNIVERSIDADEORGANIZADORA NOTA_DE_CORTE NOTA_CORTE 14
SQL - Principais conceitos Modelo e tabelas utilizadas para os exemplos e exercícios. Registro de trabalhos selecionados para eventos acadêmicos. Modelo Lógico ACEITOS ARTIGOS AUTOR TÍTULO UNIVERSIDADEORIGEM ÓRGÃOFINANCIADOR NOTA EVENTO AUTOR TITULO EVENTOS EVENTO LOCAL MÊS NUMPARTICIPANTES UNIVERSIDADEORGANIZADORA NOTA_DE_CORTE NOTA_CORTE 15
SQL - Principais conceitos Modelo e tabelas utilizadas para os exemplos e exercícios. Modelo Físico AUTOR ARTIGOS TÍTULO UNIVERSIDADEORIGEM ÓRGÃOFINANCIADOR NOTA VARCHAR2(30) Varchar2(30) Varchar2(30) Varchar2(30) Number(2,1) EVENTOS EVENTO LOCAL MÊS NUMPARTICIPANTES UNIVERSIDADEORGANIZADORA Varchar2(30 VARCHAR2(30) NUMBER(02) NUMBER(03)S VARCHAR2(30) ACEITOS EVENTO AUTOR TITULO VARCHAR2(30) VARCHAR2(30) VARCHAR2(30) NOTA_DE_CORTE NOTA_CORTE NUMBER(2,1) 16
SQL - Principais conceitos Morelli Comandos para criar ou alterar Tabelas CREATE TABLE parâmetros CREATE TABLE [schema.] tabela (coluna1 tipo_de_dado [default expressão] [constraint_coluna],... (colunan tipo_de_dado [default expressão] [constraint_coluna], [constraint_tabela] ); ALTER TABLE parâmetros ALTER TABLE [schema.] tabela [add (coluna tipo_de_dado [default expressão] [constraint_coluna],...)]... [modify (coluna tipo_de_dado [default expressão] [constraint_coluna],...)] [rename to novo_nome_tabela] [add constraint_coluna/constraint_tabela] [drop constraint_coluna/constraint_tabela [cascade]] [enable/disable constraint_coluna/constraint_tabela]; 17
SQL - Principais conceitos Bandeira Criação das Tabelas do exemplo: ARTIGOS CREATE TABLE artigos ( Autor varchar2(30), Titulo varchar2(30), Universidadeorigemvarchar2(30), Orgaofinanciador varchar2(30), Nota number(2,1) ); EVENTOS CREATE TABLE eventos ( Evento varchar2(30), Local varchar2(30), Mês number(02), numparticipantes number(03), universidadeorganizadora varchar2(30) ); 18
SQL - Principais conceitos Bandeira Criação das Tabelas do exemplo (cont): ACEITOS CREATE TABLE aceitos ( Evento varchar2(30), Autor varchar2(30), Titulo varchar2(30) ); NOTA_DE_CORTE CREATE TABLE nota_de_corte ( Nota_corte number(2,1) ); 19
SQL - Principais conceitos Morelli pág. 12 Tipos de dados (principais) CHAR(N) Campos caracter de tamanho fixo. VARCHAR2(N) Campos caracter de tamanho variável (só considera os caracteres utilizados). LONG Utilizado para campos muito grandes. RAW e LONG RAW Equivalentes aos VARCHAR2 e LONG respectivamente mas binários para guardar imagens, sons, etc... NUMBER(p,e) Campos numéricos (p=parte inteira e e=número de decimais). DATE Campos de datas. 20
SQL - Principais conceitos Morelli pág. 12 Restrições de dados (constraints) Destinadas a garantir a integridade dos dados em determinadas condições NULL NOT NULL Coluna aceita ou não valores nulos. UNIQUE Coluna somente aceita valores únicos. CHECK Coluna aceita somente os valores constantes na lista informada. PRIMARY KEY Identifica a chave primária da tabela. FOREIGN KEY Identifica que a coluna é uma chave estrangeira. 21
SQL - Principais conceitos Morelli pág. 15 Operadores Relacionais = <> > < >= <= Igual Diferente Maior Menor Maior ou igual Menor ou igual 22
SQL - Principais conceitos Morelli pág. 15 Operadores Lógicos And Or Not Is null Operador restritivo equivale a uma intersecção Operador associativo equivale a uma união Negação Se o campo é nulo 23
SQL - Principais conceitos Machado cap.14 Comando para recuperar dados de Tabelas SELECT parâmetros SELECT [distinct] {*,colunas [alias], expressões, funções,...} FROM {tabelas [alias],} [WHERE condição] [GROUP BY colunas] [HAVING condição] [ORDER BY colunas [asc desc]]; 24
SQL - Principais conceitos Machado cap.14 Funções de linha para manipular dados UPPER/LOWER; Cálculos (SELECT 10 * 20 FROM DUAL); CONCAT ou ; INITCAP; LENGTH; SUBSTR; LTRIM/RTRIM; ROUND; TRUNC MOD (resto da divisão); 25
SQL - Principais conceitos Machado cap.14 Funções de linha para manipular datas ADD_MONTHS (data,n); MONTHS_BETWEEN (data1,data2); NEXT_DAY (data, dia_da_semana ); TO_DATE(campo,máscara); TO_CHAR(campo,máscara); 26
SQL - Principais conceitos Machado cap.14 Funções de linha para efetuar cálculos; AVG (campo); COUNT (campo *); MAX (campo); MIN(campo); SUM(campo); 27
SQL - Principais Morelli 3.1 e 3.2 Seleções básicas, ordenações e filtros SELECT [distinct] {*,colunas [alias], expressões, funções,...} FROM {tabelas [alias],} [WHERE condição] [GROUP BY colunas] [HAVING condição] [ORDER BY colunas [asc desc]]; Exercícios: 28
SQL - Principais Recuperando dados de várias tabelas; Conceitos Qualificadores de nomes Permitem a efetivação de uma junção entre tabelas em uma consulta pois, pode haver colunas de mesmo nome em tabelas diferentes. Duas sintaxes diferentes: Padrão standard Equalização de colunas na cláusula WHERE (utilizada pelo MS-SQL e ORACLE). Padrão ANSI SQL Parâmetro JOIN na cláusula FROM 29
SQL - Principais Recuperando dados de várias tabelas; Padrão ANSI SQL Parâmetro JOIN na cláusula FROM Tipos: INNER JOIN Inclui somente as linhas que satisfacam a condição de junção; CROSS JOIN Inclui cada uma das combinações de todas as linhas entre as tabelas; OUTER JOIN Inclui as linhas que satisfaçam a condição de junção mais as linhas restantes de uma das tabelas da junção 30
SQL - Principais Recuperando dados de várias tabelas; Padrão ANSI SQL (cont) Exemplos: INNER JOIN Ver os títulos de cada autor aceitos para um evento qualquer; Select artigos.autor, aceitos.titulo From artigos INNER JOIN aceitos ON artigos.autor = aceitos.autor; CROSS JOIN (produto cartesiano) Mostrar os eventos de todos os artigos; Select artigos.autor, artigos.titulo, aceitos.evento From artigos CROSS JOIN aceitos; 31
SQL - Principais Recuperando dados de várias tabelas; Padrão ANSI SQL (cont) Exemplos (cont) : OUTER JOIN Possui um parâmetro adicional para indicar de qual tabela se deseja incluir todas as linhas. Utilidades: verificar quais linhas de uma tabela possuem relacionamento com a outra e quais não possuem. Qualificadores: LEFT OUTER JOIN inclui todas as linhas da tabela do primeiro lado (esquerdo) RIGHT OUTER JOIN inclui todas as linhas da tabela do segundo lado (direito) Select artigos.autor, aceitos.titulo From artigos LEFT OUTER JOIN aceitos ON artigos.autor = aceitos.autor; 32
SQL - Principais Morelli 3.3 Seleções join (junção) de tabelas; Tipos de junções (relações) Padrão STANDARD. Equijoin campos iguais de tabelas diferentes; SELECT [distinct] {*,alias.colunas [alias_coluna], expressões, funções,...} FROM tabela1 alias1, tabela2 alias2 WHERE alias1.coluna1 = alias2.coluna2; Exemplo: Ver os títulos de cada autor aceitos para um evento qualquer; Select art.autor, ace.titulo From artigos art, aceitos ace Where art.autor = ace.autor; 33
SQL - Principais Morelli 3.3 Seleções join (junção) de tabelas (cont); Tipos de junções (relações) (cont); Outerjoin campos em comum existam em duas tabelas e os que faltam; SELECT [distinct] {*,alias.colunas [alias_coluna], expressões, funções,...} FROM tabela1 alias1, tabela2 alias2 WHERE alias1.coluna1 = alias2.coluna2(+) [ORDER BY colunas]; Exemplos: Ver os títulos de cada autor aceitos para um evento qualquer e os que não o foram; Select art.autor, art.titulo, ace.evento From artigos art, aceitos ace Where art.autor(+) = ace.autor; 34
SQL - Principais Morelli 3.32 Seleções join (junção) de tabelas (cont); Tipos de junções (relações) (cont); NonEquijoin reunir campos de tabelas que não tenham nada em comum. SELECT [distinct] {*,alias.colunas [alias_coluna], expressões, funções,...} FROM tabela1 alias1, tabela2 alias2, tabela3 alias3 WHERE alias1.coluna1 = alias2.coluna2 AND alias3.coluna3 between valor_mínimo AND valor_máximo; Exemplo: Ver os títulos, as notas, os eventos e a nota de corte dos trabalhos aceitos; Select art.titulo, art.nota, ace.evento, nc.nota_corte From artigos art, aceitos.ace, nota_de_corte nc Where art.autor = ace.autor And art.titulo = ace.titulo; 35
SQL - Principais Morelli 3.3 Seleções join (junção) de tabelas (cont); Tipos de junções (relações) (cont); Selfjoin reunir campos diferentes de uma mesma tabela que possam ter conteúdo do mesmo tipo. SELECT [distinct] {*,alias.colunas [alias_coluna], expressões, funções,...} FROM tabela1 alias1, tabela1 alias2 WHERE alias1.coluna1 = alias2.coluna2; Nota: note que a tabela é a mesma embora os aliases sejam diferentes; Exemplos: Ver os artigos financiados pela própria universidade; Select art1.autor, art1.titulo, art1.universidadeorigem, art2.orgaofinanciador From artigos art1, artigos art2 Where art1.universidadeorigem = at2.orgaofinanciador; 36
SQL - Principais Morelli 3.4.1 Seleções usando funções de linha; Funções de caracteres; Função lower/upper (coluna) initcap (coluna) concat (coluna1,coluna2) substr (coluna, posição,tamanho) length (coluna) lpad/rpad (campo, n,c) Descrição Converte caracteres em minúsculas ou maiúsculas. Converte o primeiro caractere de cada palavra em maiúsculo e o resto minúsculo. Concatena duas colunas ou cadeia de caracteres (semelhante ao operador de concatenação ). Extrai parte dos caracteres de uma coluna ou grupo de caracteres. Informa a quantidade de caracteres da coluna. Preenche à esquerda ou à direita com o caractere indicado em c até o tamanho n, o campo indicado. 37
SQL - Principais Morelli 3.4.2 Seleções usando funções de linha; Funções de datas; No ORACLE, o tipo DATE armazena internamente: século, ano, mês, dia, hora, minuto e segundo. O formato padrão é DD-MMM-AA. O usuário poderá, a seu critério, utilizar estes dados de formas diferentes, utilizando as funções abaixo. A variável de sistema sysdate, armazena a data/hora corrente. Função months_between (data1,data2) add_months (data, n) next_day (data, dia_da_semana ) last_day (data) round (data, formato) trunc (data, formato) Descrição Retorna o número de meses entre duas datas. Adiciona n meses à data informada Retorna uma data, após a data informada, em que o dia da semana seja igual a dia_da_semana. Retorna a data do último dia do mês em que se encontra a variável data. Arredonda a data informada para o primeiro ou último dia do mês (quando o formato for MONTH) ou ano (quando formato for YEAR). Trunca data informada (idem round) 38
SQL - Principais Morelli 3.4.3 Seleções usando funções de linha; Funções de numéricas; Função round (coluna, d) trunc (coluna, d) mod (a,b) power (n1, n2) sqrt (n) ceil/floor (num) Descrição Arredonda o valor ou coluna informada, em que d indica o número de casas decimais desejado. Trunca o valor ou coluna informada, em que d indica o número de casas decimais desejado. Retorna o resto da divisão de a por b, em que a e b podem ser constantes, colunas ou expressões. Calcula n1 elevado a n2. Calcula a raiz quadrada de n. Arredonda num para cima ou para baixo. 39
SQL - Principais Morelli 3.4.4 Seleções usando funções de linha; Funções de conversão de dados; Função to_char (número ou data, formato ) to_number (char) to_date (char, formato ) nvl (coluna, valor) Descrição Converte um campo numérico ou data em uma cadeia de caracteres do tipo varchar2, com o formato definido pela variável formato. Converte a cadeia de caracteres numericos informados em um número inteiro. Converte uma cadeia de caracteres, informando uma data, no tipo date, de acordo com a variável formato. Converte um null encontrado na coluna, em um valor especificado. 40
SQL - Principais Morelli 3.4.5 Seleções usando funções de linha; Funções de grupo; Função Avg (coluna) Count (coluna) Max (coluna) Min (coluna) Sum (coluna) Descrição Calcula a média dos valores de uma coluna. Informa o total de linhas selecionadas. Informa o valor máximo de uma coluna. Informa o valor mínimo de uma coluna. Calcula a soma dos valores de uma coluna. Todas as funções desconsideram valores nulos, exceto count, quando o argumento for *. 41
SQL - Principais Morelli 3.5 Seleções usando operadores de conjunto; Operador Union Intersect Minus Descrição Retorna a união entre dois conjuntos de dados com estruturas semelhantes. Retorna os dados que são comuns a dois conjuntos de dados. Retorna o que um conjunto possui e o outro não. 42
SQL - Principais Morelli 3.5 Seleções usando conjuntos; Lista de valores Parâmetro IN no comando WHERE; Ver os eventos dos meses de férias escolares (01, 07 e 12); Select evento, mês From eventos Where mês IN (1, 7, 12); Intervalos Parâmetro BETWEEN no comando WHERE; Ver os eventos dos meses letivos do primeiro semestre (02 a 06); Select evento, mês From eventos Where mês BETWEEN 2 AND 6; 43
SQL - Principais Morelli 4.2 Atualização de dados; Alteração de linhas; UPDATE tabela SET coluna = valor [, coluna = valor...] [WHERE condição]; Se a cláusula WHERE for omitida, todas as linhas da tabela serão alteradas. 44
SQL - Principais Morelli 4.3 Atualização de dados; Eliminação de linhas; DELETE [from] tabela [WHERE condição]; Se a cláusula WHERE for omitida, todas as linhas da tabela serão eliminadas. 45
SQL - Principais Morelli 6.3 Outras estruturas de dados; Visões de dados; Uma visão (view) é uma tabela virtual na qual os dados não estão fisicamente armazenados. É apenas uma visão de um grupo de colunas de uma ou mais tabelas do banco. Vantagens: Evitar que usuários não autorizados tenham acesso a todos os dados de uma tabela; Associar a uma visão, consultas que utilizam critérios de seleção complexos, para facilitar o acesso pelos usuários. 46
SQL - Principais Outras estruturas de dados; Criando visões; CREATE [OR REPLACE] [force noforce] VIEW nome_visão [alias,...] as subquery; Onde: Opção replace force noforce Descrição Recria a view, se ela já existir Morelli 6.3 Cria a view, mesmo que a tabela base não exista Só cria a view se a tabela base existir. subquery Sentença select na qual será baseada a view. Há outros parâmetros que foram omitidos e que poderão ser consultados no livro. 47
SQL - Principais Outras estruturas de dados; Criando seqüências; Valores que podem ser gerados automaticamente pelo Oracle. Morelli 6.4 Muito útil na geração de valores para chaves primárias; 48
SQL - Principais Morelli 6.4 Outras estruturas de dados; Criando seqüências; CREATE SEQUENCE seqüência [increment by n] [start with n] [maxvalue n nomaxvalue] [cycle nocycle] [cache n nocache]; Onde: Opção seqüência increment by n start with n maxvalue/minvalue n cycle nocycle cache n nocache Descrição Nome da seqüência que não pode ser o mesmo de uma tabela ou view. Informa de quanto será o incremento ou decremento da seqüência. Informa o primeiro número a ser gerado. Informa o valor máximo ou mínimo que a seqüência pode assumir. Indica que, quando atingir o valor máximo, a numeração continuará a partir do valor inicial ou não. Indica ao Oracle quantos valores são pré-alocados em memória 49
SQL - Principais Outras estruturas de dados; Criando sinônimos; Morelli 6.5 Estabelece nomes alternativos para tabelas, views, índices ou seqüências; Objetiva facilitar a manipulação desses objetos por outros usuários que não o seu dono, dando-lhes nomes mais curtos ou mais significativos; Preservar a definição de um objeto por seu usuário original; Utilizado como forma de compartilhamento de objetos por vários usuários. 50
SQL - Principais Morelli 6.5 Outras estruturas de dados; Criando sinônimos; CREATE [public] SYNONYM sinônimo for objeto; Onde: Opção public objeto Descrição Indica que o sinônimo poderá ser usado por qualquer usuário. Informa o nome do objeto sobre o qual se aplica o sinônimo. 51
SQL - Principais Morelli 7 Subqueries; Consulta utilizada dentro de um comando SQL em diversas situações. Subqueries de uma linha; Quando se espera que a consulta retorne apenas um valor. Formato: SELECT coluna [, coluna...] FROM tabela1 WHERE [tabela1.]coluna = (SELECT [tabela2.]coluna2 FROM tabela2 [WHERE condição] ); Observe: a presença do operador relacional =; que, de fato, a subquery retorne somente um valor; Que a subquery é colocada entre parênteses; Pode ser utilizada para outros alem do select. 52
SQL - Principais Subqueries; Morelli 7 Subqueries de múltiplas linhas; Quando se espera que a consulta retorne um, ou mais de um valor em apenas uma coluna. Formato: SELECT coluna [, coluna...] FROM tabela1 WHERE [tabela1.]coluna IN NOT IN (SELECT [tabela2.]coluna2 FROM tabela2 [WHERE condição] ); Observe: a presença do operador relacional IN, ou NOT IN; que, de fato, a subquery retorne somente uma coluna; Que a subquery é colocada entre parênteses. 53
SQL - Principais Subqueries; Morelli 7 Subqueries de múltiplas colunas; Quando se espera que a consulta retorne um, ou mais de um valor em apenas uma ou várias colunas. Formato: SELECT coluna [, coluna...] FROM tabela1 WHERE [tabela1.]coluna IN NOT IN (SELECT [tabela2.]coluna2, [tabela2.]coluna3 FROM tabela2 [WHERE condição] ); Observe: a presença do operador relacional IN, ou NOT IN; que a subquery retorna mais de uma coluna; Que a subquery é colocada entre parênteses. 54
SQL - Principais Subqueries; Subqueries correlatas; Morelli 7 Quando se utiliza uma coluna da consulta externa na subquery. Formato: SELECT coluna1 [, coluna2...] FROM tabela1 WHERE [tabela1.]coluna IN NOT IN (SELECT [tabela2.]coluna2 FROM tabela2 WHERE tabela2.coluna2 = tabela1.coluna2 ); Observe: a presença do operador relacional IN, ou NOT IN; que a subquery utiliza uma coluna da tabela 1 (mais externa) na sua condição de comparação; Que a subquery é colocada entre parênteses. 55
Orientação Final Página do professor na internet: http://prof.cle.sites.uol.com.br Dúvidas?!? 56