PRODOTTO CARTESIANO Otteniamo un prodotto cartesiano quando: viene omessa la condizione di join una condizione di join non è valida tutte le righe della.

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

Preposizioni semplici e articolate
Simple Past A cura di Mara Cruciani.
Teoria e Tecniche del Riconoscimento
1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
Microsoft SQL Server 2008 Utilizzo. Creazione DataBase CREATE DATABASE CREATE DATABASE Cinema.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
SQL (Standard query language) Istruzioni per la creazione di una tabella: Create table ( tipo, (, [vincoli]) Primary key ( ) CHIVE PRIMARIA Foreign key(
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
MySQL ___.
SQL Structured Query Language Comandi base di DML Rosalba Giugno Rosalba Giugno
4-1 Routing Gerarchico Crediti Parte delle slide seguenti sono adattate dalla versione originale di J.F Kurose and K.W. Ross (© All Rights Reserved)
Un DataBase Management System (DBMS) relazionale client/server.
MySQL Esercitazioni. Ripasso Connessione a MySQL. Creazione delle basi di dati e delle tablelle. Inserimento dei dati. Interrogazioni.
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
Application Code Dato Table Data Base Trigger Code 1° Controllo Procedure Client Side 3° Controllo Integrity Constraint 2° Controllo Event Driven BUSINESS.
SQL: Lezione 2 Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko
Nataliya Rassadko SQL: Lezione 5 Nataliya Rassadko
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
SQL :Structured Query Language: SELECT (II)
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Le regole Giocatori: da 2 a 10, anche a coppie o a squadre Scopo del gioco: scartare tutte le carte per primi Si gioca con 108 carte: 18 carte.
Players: 3 to 10, or teams. Aim of the game: find a name, starting with a specific letter, for each category. You need: internet connection laptop.
Sequence. CREARE UNA SEQUENCE CREATE SEQUENCE nome [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE]
Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
FUNZIONI DI GRUPPO Le funzioni di gruppo operano su un set di record restituendo un risultato per il gruppo. AVG ([DISTINCT|ALL] n) media, ignora i valori.
Creazione e manipolazione tabelle. TABELLE una tabella può essere creata in qualsiasi momento,anche quando gli utenti stanno usando il database la struttura.
Constraints.
MySQL Query Performance Optimization
Ricerca di una chiave: Search(x, k) if x == nil or k == x.key return x
Attribution-NonCommercial-ShareAlike SQL Server.
Microsoft Access Maschere.
JavaScript Lezione 5 Tipizzazione ed operazioni tra tipi diversi Istruzioni di input.
Filtered Index and Statistics Filtered Indexes Sergio Govoni
Uso delle basi di dati Mauro Mezzini Dipartimento di Scienze della Formazione.
Creare grafici con un foglio di calcolo Copyright© owned by Ubaldo Pernigo, please contact: Tutti i contenuti, ove non diversamente.
OUTPUT FORMATTATO La funzione printf consente di effettuare la stampa a video formattata. Sintassi: printf ( stringa_formato, arg0, arg1, … ); La stringa.
Istituzioni di Economia Politica II
Attribution-NonCommercial-ShareAlike SQL Server.
Attribution-NonCommercial-ShareAlike Le novità
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
2000 Prentice Hall, Inc. All rights reserved. I file Apertura e chiusura I file ad accesso sequenziale I file ad accesso casuale Apre un file già esistente.
Dato Table Data Base Application Code 1° Controllo Procedure Client Side 3° Controllo Integrity Constraint Trigger Code 2° Controllo Event Driven BUSINESS.
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
Il linguaggio MDX Il linguaggio MDX (MultiDimensional eXpression) è usato per recuperare e manipolare dati multidimensionali in SQL Server Analysis Services,
CREAZIONE UTENTE SU DATATOP. CREAZIONE UTENTE Andate su //datatop.di.unipi.it/webdb Login come utente: webdb password: ****** Administer -> User Manager.
SQL Developer Lanciare sqldeveloper (alias sul desktop) / c:\Oracle\sqldeveloper Associare tutti i tipi di file, se volete Tasto destro sulla spina “connection”
Dynamic SQL.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Interrogazioni (parte 2)
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
CREAZIONE UTENTE SU ORACLE1
Le operazioni relazionali (continua)
Atzeni-Ceri-Paraboschi-Torlone, Basi di dati, Capitolo 3
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Frequenza di fallimento della terapia di prima linea basata su INI vs
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
SQL per la modifica di basi di dati
Transcript della presentazione:

PRODOTTO CARTESIANO Otteniamo un prodotto cartesiano quando: viene omessa la condizione di join una condizione di join non è valida tutte le righe della prima tabella sono in join con tutte le righe della seconda tabella Per evitare il prodotto cartesiano occorre SEMPRE mettere la clausola di join nella where condition

TIPI DI JOIN Proprietà Oracle Equijoin Non-equijoin Outer join Self join

TIPI DI JOIN SQL Cross join Natural join Full or two sider outer join

JOIN SELECT tabella1.colonna, tabella2.colonna FROM tabella1, tabella2 WHERE tabella1.colonna1 = tabella2.colonna2; la condizione di join deve essere scritta nella clausola WHERE usare il nome della tabella davanti alla colonna quando la stessa colonna compare in più tabelle se si vogliono mettere in join n tabelle, occorrà creare almeno n-1 condizioni di join.

EQUIJOIN SELECT employee_id FROM employees, departments WHERE employees.department_id = departments.department_id La relazione tra le tabelle è un equijoin ovvero i valori della colonna department_id di entrambe le tabelle devono essere uguali.

JOIN SU PIU DI DUE TABELLE SELECT e.employee_id, d.department_name, l.city FROM employees e, departments d,locations l WHERE e.department_id = d.department_id AND d.location_id = l.location_id; Il join fra n tabelle implica un minimo di n-1 condizioni di join. Per esempio, un join tra 3 tabelle implica almeno 2 condizioni di join. ALIAS : -un alias può avere almeno 30 caratteri (è consigliabile un alias breve) - se un alias viene attribuito ad una tabella nella clausola FROM, occorrerà sostituirlo ai nomi di tabella nella cluasola SELECT

NON-EQUIJOIN E una relazione che non contiene unuguaglianza. SELECT e.last_name, e.salary FROM employees e, jobs j WHERE (e.salary BETWEEN j.min_salary AND j.max_salary)

OUTER JOINS DEPARTMENTS EMPLOYEES Se una riga non soddisfa la condizione, non apparirà nel result set. DEPARTMENT_NAMEDEPARTMENT_ID Administration10 Marketing20 Shipping50 IT60 Contracting190 DEPARTMENT_IDLAST_NAME 90King 90Hunold 60Rajs 50Matos 80Zlotkey

OUTER JOINS Occorre usare lOUTER JOIN per vedere anche le righe che non soddisfano la condizione di join. Loperatore di outer join è il (+) SELECT tabella1.colonna, tabella2.colonna FROM tabella1, tabella2 WHERE tabella1.colonna1(+) = tabella2.colonna2; SELECT tabella1.colonna, tabella2.colonna FROM tabella1, tabella2 WHERE tabella1.colonna1 = tabella2.colonna2(+); Il (+) è posizionato dalla parte del join in cui mancano le righe

OUTER JOINS Crea una o più righe nulle con le quali andare in join con le righe della tabella con cui va in join. SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id DEPARTMENT_NAMEDEPARTMENT_ID Administration10 Marketing20 Shipping50 IT60 Contracting

SELF JOINS SELECT worker.last_name || lavora per || manager.last_name FROM employees worker, employees manager WHERE worker.manager_id = manager.employee_id; Si usa per poter mettere in join una tabella con se stessa. Ad esempio per trovare il nome del manager di ogni impiegato. Alla prima passata nella tabella trovo il nome nella colonna LAST_NAME (Whalen) e il MANAGER_ID (101). Alla seconda passata guarda nella EMPLOYEE_ID per trovare il MANAGER_ID che era 101 e nella LAST_NAME trova il nome Kochhar.

JOIN CON SQL SELECT tabella1.colonna, tabella2.colonna FROM tabella1, tabella2 [CROSS JOIN tabella2] | [NATURAL JOIN tabella 2] | [JOIN table2 USING (colonna)] | [JOIN table2 ON (tabella1.colonna = tabella2.colonna)] | [LEFT|RIGHT|FULL OUTER JOIN tabella2 ON (tabella1.colonna = tabella2.colonna)] ;

CROSS JOINS E Lequivalente del prodotto cartesiano SELECT last_name, department_name FROM employees CROSS JOIN departments; SELECT last_name, department_name FROM employees, departments;

NATURAL JOINS è basato su tutte le colonne delle due tabelle che hanno gli stessi nomi di colonne seleziona le righe fra le due tabelle che valori uguali se le colonne hanno lo stesso nome ma sono di tipo differente, ritorna un errore. prima della 9i non era possibile fare un join senza specificare i nomi di colonna delle singole tabelle

NATURAL JOINS SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations; Locations e departments sono in join sulla colonna location_id che è la sola colonna che ha lo steso nome tra le due tabelle. Se altre colonne avessero avuto lo stesso nome (e tipo) il join sarebbe stato su tutte le colonne.

NATURAL JOINS SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations; È equivalente allequijoin SELECT department_id, department_name,departments.location_id, city FROM departments,locations WHERE departments.location_id = locations.location_id;

CLAUSOLA USING se diverse colonne hanno lo stesso nome ma tipo differente, il NATURAL JOIN deve essere modificato con la clausola USING specificando le colonne che devono essere usate per lequijoin non usare nomi di tabella o alias nella clausola using in nessuna clausola della query NATURAL JOIN e USING sono mutualmente esclusivi

CLAUSOLA USING VALIDO: SELECT d.department_name, l.city FROM locations l JOIN departments d USING (location_id) WHERE location_id = 1400; NON VALIDO: SELECT d.department_name, l.city FROM locations l JOIN departments d USING (location_id) WHERE d.location_id = 1400; ORA-25154: column part of USING clause cannot have qualifier

CLAUSOLA USING SELECT e.employee_id, e.last_name, d.location_id FROM employees e JOIN departments d USING (department_id); È lquivalente del equijoin SELECT e.employee_id, e.last_name, d.location_id FROM employees e, departments d WHERE e.department_id = d.departments_id;

CLAUSOLA ON la condizione di join per il natural join è basata sullequijoin di tutte le colonne con lo stesso nome per specificare condizioni arbitrarie o specificare colonne di join occorre usare la clausola ON

CLAUSOLA ON SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id); Può essere usata con colonne con nomi differenti SELECT e.last_name emp, m.last_name mgr, FROM employees e JOIN employees m ON (e.manager_id = m.employee_id); Corrisponde con il SELFJOIN

JOIN SU TRE TABELLE SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id; Corrisponde con lequijoin a tre tabelle…

LEFT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id); La query ritorna tutti i record della tabella EMPLOYEES che sono nella tabella di sinistra del join anche se non ci sono corrispondenze nella DEPARTMENTS. Corrisponde con la notazione: SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE d.department_id(+) = e.department_id;

RIGHT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id); La query ritorna tutti i record della tabella DEPARTMENTS che sono nella tabella di destra del join anche se non ci sono corrispondenze nella EMPLOYEES. Corrisponde con la notazione: SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE d.department_id = e.department_id(+);

FULL OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id); La query restituisce tutte le righe della EMPLOYEES anche se non ci sono righe corrispondenti nella DEPARTMENTS, inoltre restituisce tutte le righe della tabella DEPARTMENTS anche se non cè corrispondenza nella tabella EMPLOYEES.

CONDIZIONI AGGIUNTIVE SELECT e.employee_id, e.last_name, e.department_id, d.department_id. d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) AND e.manager_id = 149;

ORACLE - SQL ORACLESQL Equi-joinNatual Join Outer-joinLeft Outer Join Self-joinJoin ON Non-Equi-JoinJoin USING Prodotto CartesianoCross Join