Carnegie Mellon Carnegie Mellon Univ. Dept. of Computer Science Database Applications C. Faloutsos Rel. model - SQL part3
Carnegie Mellon C. Faloutsos2 General Overview - rel. model Formal query languages –rel algebra and calculi Commercial query languages –SQL –QBE, (QUEL)
Carnegie Mellon C. Faloutsos3 Overview - detailed - SQL DML –select, from, where, renaming, ordering, – aggregate functions, nested subqueries –insertion, deletion, update other parts: DDL, embedded SQL, auth etc
Carnegie Mellon C. Faloutsos4 Reminder: our Mini-U db
Carnegie Mellon C. Faloutsos5 DML - insertions etc insert into student values (“123”, “smith”, “main”) insert into student(ssn, name, address) values (“123”, “smith”, “main”)
Carnegie Mellon C. Faloutsos6 DML - insertions etc bulk insertion: how to insert, say, a table of ‘foreign-student’s, in bulk?
Carnegie Mellon C. Faloutsos7 DML - insertions etc bulk insertion: insert into student select ssn, name, address from foreign-student
Carnegie Mellon C. Faloutsos8 DML - deletion etc delete the record of ‘smith’
Carnegie Mellon C. Faloutsos9 DML - deletion etc delete the record of ‘smith’: delete from student where name=‘smith’ (careful - it deletes ALL the ‘smith’s!)
Carnegie Mellon C. Faloutsos10 DML - update etc record the grade ‘A’ for ssn=123 and course update takes set grade=“A” where ssn=“123” and c-id=“15-415” (will set to “A” ALL such records)
Carnegie Mellon C. Faloutsos11 DML - view update consider the db-takes view: create view db-takes as (select * from takes where c-id=“15-415”) view updates are tricky - typically, we can only update views that have no joins, nor aggregates even so, consider changing a c-id to
Carnegie Mellon C. Faloutsos12 DML - joins so far: ‘INNER’ joins, eg: select ssn, c-name from takes, class where takes.c-id = class.c-id
Carnegie Mellon C. Faloutsos13 Reminder: our Mini-U db
Carnegie Mellon C. Faloutsos14 inner join o.s.: gone!
Carnegie Mellon C. Faloutsos15 outer join
Carnegie Mellon C. Faloutsos16 outer join select ssn, c-name from takes outer join class on takes.c- id=class.c-id
Carnegie Mellon C. Faloutsos17 outer join left outer join right outer join full outer join natural join
Carnegie Mellon C. Faloutsos18 Overview - detailed - SQL DML –select, from, where, renaming, ordering, – aggregate functions, nested subqueries –insertion, deletion, update other parts: DDL, embedded SQL, auth etc
Carnegie Mellon C. Faloutsos19 Data Definition Language create table student (ssn char(9) not null, name char(30), address char(50), primary key (ssn) )
Carnegie Mellon C. Faloutsos20 Data Definition Language create table r( A1 D1, …, An Dn, integrity-constraint1, … integrity-constraint-n)
Carnegie Mellon C. Faloutsos21 Data Definition Language Domains: char(n), varchar(n) int, numeric(p,d), real, double precision float, smallint date, time
Carnegie Mellon C. Faloutsos22 Data Definition Language integrity constraints: primary key foreign key check(P)
Carnegie Mellon C. Faloutsos23 Data Definition Language create table takes (ssn char(9) not null, c-id char(5) not null, grade char(1), primary key (ssn, c-id), check grade in (“A”, “B”, “C”, “D”, “F”))
Carnegie Mellon C. Faloutsos24 Data Definition Language delete a table: difference between drop table student delete from student
Carnegie Mellon C. Faloutsos25 Data Definition Language modify a table: alter table student drop address alter table student add major char(10)
Carnegie Mellon C. Faloutsos26 Overview - detailed - SQL DML –select, from, where, renaming, ordering, – aggregate functions, nested subqueries –insertion, deletion, update other parts: DDL, embedded SQL, auth etc
Carnegie Mellon C. Faloutsos27 Embedded SQL from within a ‘host’ language (eg., ‘C’, ‘VB’) EXEC SQL END-EXEC Q: why do we need embedded SQL??
Carnegie Mellon C. Faloutsos28 Embedded SQL SQL returns sets; host language expects a tuple - impedance mismatch! solution: ‘cursor’, ie., a ‘pointer’ over the set of tuples. example:
Carnegie Mellon C. Faloutsos29 Embedded SQL main(){ … EXEC SQL declare c cursor for select * from student END-EXEC …
Carnegie Mellon C. Faloutsos30 Embedded SQL - ctn’d … EXEC SQL open c END-EXEC … while( !sqlerror ){ EXEC SQL fetch c into :cssn, :cname, :cad END-EXEC fprintf( …, cssn, cname, cad); }
Carnegie Mellon C. Faloutsos31 Embedded SQL - ctn’d … EXEC SQL close c END-EXEC … } /* end main() */
Carnegie Mellon C. Faloutsos32 dynamic SQL main(){ /* set all grades to user’s input */ … char *sqlcmd=“ update takes set grade = ?”; EXEC SQL prepare dynsql from :sqlcmd ; char inputgrade[5]=“a”; EXEC SQL execute dynsql using :inputgrade; … } /* end main() */
Carnegie Mellon C. Faloutsos33 Overview - detailed - SQL DML –select, from, where, renaming, ordering, – aggregate functions, nested subqueries –insertion, deletion, update other parts: DDL, embedded SQL, auth etc
Carnegie Mellon C. Faloutsos34 SQL - misc Later, we’ll see authorization: grant select on student to transactions other features (triggers, assertions etc) see, e.g.:
Carnegie Mellon C. Faloutsos35 General Overview - rel. model Formal query languages –rel algebra and calculi Commercial query languages –SQL –QBE, (QUEL)
Carnegie Mellon C. Faloutsos36 Rel. model - QBE Inspired by the R.D.C. “P.” -> print (ie., ‘select’ of SQL) _x, _y: domain variables (ie., attribute names) Example: find names of students taking
Carnegie Mellon C. Faloutsos37 Rel. model - QBE
Carnegie Mellon C. Faloutsos38 Rel. model - QBE
Carnegie Mellon C. Faloutsos39 Rel. model - QBE names of students taking
Carnegie Mellon C. Faloutsos40 Rel. model - QBE condition box self-joins (Tom’s grandparents) ordering (AO., DO.) aggregation (SUM.ALL., COUNT.UNIQUE., …) group-by (G.)
Carnegie Mellon C. Faloutsos41 Rel. model - QBE aggregate: avg grade overall:
Carnegie Mellon C. Faloutsos42 Rel. model - QBE aggregate: avg grade per student:
Carnegie Mellon C. Faloutsos43 General Overview - rel. model Formal query languages –rel algebra and calculi Commercial query languages –SQL –QBE, (QUEL)
Carnegie Mellon C. Faloutsos44 Rel. model - QUEL Used in INGRES only - of historical interest. Eg.: find all ssn’s in mini-U: range of s is student; retrieve (s.ssn);
Carnegie Mellon C. Faloutsos45 Rel. model - QUEL general syntax: range of …. is t-name retrieve (attribute list) where condition SQL select attr. list from t-name where condition
Carnegie Mellon C. Faloutsos46 Rel. model - QUEL very similar to SQL also supports aggregates, ordering etc
Carnegie Mellon C. Faloutsos47 General Overview Formal query languages –rel algebra and calculi Commercial query languages –SQL –QBE, (QUEL) Integrity constraints Functional Dependencies Normalization - ‘good’ DB design