Bogdan Shishedjiev SQL1 SQL Reminder of SQL
Bogdan Shishedjiev SQL 2 Subsets of language Data definition language (DDL) –Domain definition –Schema definition –Constraint definition –View definition –Access right definition Data manipulation language (DML) –Queries –Tuple insertion –Tuple deletion –Tuple modification
Bogdan Shishedjiev SQL 3 DDL Domain definition –Simple domains Chars Numbers Date/Time Raw BLOB Logical –Named domain – only in some DBMS
Bogdan Shishedjiev SQL 4 DDL Create Table CREATE TABLE име ( Attribut1 type1, Attribut2 type2,...); –Definition by Query CREATE TABLE nom AS SELECT.... –Default Value Definition default(expression) –Constraints UNIQUE NOT NULL Primary Key CONSTRAINT Keyname PRIMARY KEY (Attrname1,Attrname2,...) Foreign Key CONSTRAINT Keyname FOREIGN KEY(Attrname,...) REFERENCES Tablename (Attrname,...) CHECK(expression)
Bogdan Shishedjiev SQL 5 DDL Table elimination DROP TABLE name; Table modification ALTER TABLE name ADD COLUMN(name_of_column type,...); - adds an attribute/ attributs ALTER TABLE name ADD CONSTRAINT...; ALTER TABLE name MODIFY(column type....); changes the attribute type ALTER TABLE name DROP column,....; removes attribute
Bogdan Shishedjiev SQL 6 DDL Indexes –Creation CREATE [UNIQUE] INDEX name_index ON name_table (attribut [ASCIDESC],...); –Deletion DROP INDEX name_index; Views –Creation CREATE VIEW name [(names of columns)] AS SELECT....; –Deletion DROP VIEW name ;
Bogdan Shishedjiev SQL 7 Example CREATE TABLE DEPT ( DEPTNOINTEGER NOT NULL, DNAMEVARCHAR(14) CHARACTER SET ISO8859_1, LOCVARCHAR(13) CHARACTER SET ISO8859_1, CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO) ); CREATE TABLE EMP ( EMPNOINTEGER NOT NULL, ENAMEVARCHAR(10) CHARACTER SET ISO8859_1, JOBVARCHAR(9) CHARACTER SET ISO8859_1, MGRINTEGER CHECK (MGR isNULL or DeptNo = (select DeptNo from Employee E where E.RegNo = Superior), HIREDATETIMESTAMP, SALNUMERIC(9, 2), COMMNUMERIC(9, 2), DEPTNOINTEGER, CONSTRAINT PK_EMP PRIMARY KEY (EMPNO) ); ALTER TABLE EMP ADD CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO);
Bogdan Shishedjiev SQL 8 Example EMP NOENAMEJOBMGRHIREDATESAL COMM DEPTNO 7369SMITHCLERK ALLENSALESMAN WARDSALESMAN JONESMANAGER MARTINSALESMAN BLAKEMANAGER CLARKMANAGER SCOTTANALYST KINGPRESIDENT TURNERSALESMAN ADAMSCLERK JAMESCLERK FORDANALYST MILLERCLERK DEPTNODNAMELOC 10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON
Bogdan Shishedjiev SQL 9 Queries SELECT Statement SELECT [DISTINCT | ALL ]{* | expression| attribute },... FROM,... [WHERE Logical expression – condition for selection or join] [GROUP BY list of attributes] [HAVING Logical expression – condition for group selection] [UNION | INTERSECT | MINUS SELECT...] [ORDER BY list of attributes [ASC | DESC] ];
Bogdan Shishedjiev SQL 10 Projection SELECT job, mgr FROM emp; /* Query12 */ JOBMGR CLERK7902 SALESMAN7698 SALESMAN7698 MANAGER7839 SALESMAN7698 MANAGER7839 MANAGER7839 ANALYST7566 PRESIDENT SALESMAN7698 CLERK7788 CLERK7698 ANALYST7566 CLERK7782 JOBMGR CLERK7902 SALESMAN7698 MANAGER7839 ANALYST7566 PRESIDENT CLERK7788 CLERK7698 CLERK7782 SELECT DISTINCT job, mgr FROM emp; /* Query13 */
Bogdan Shishedjiev SQL 11 Operators CodeOperator -Inversing the sign *, /Multiplication, division +, -, || (&) Addition, substraction, concatenation SELECT ENAME || '(' || EMPNO || ')' 'NAME', 2 * SAL 'DoubleSal' FROM EMP; (Query 39) 'NAME''DoubleSal' SMITH(7369)1600 ALLEN(7499)3200 WARD(7521)2500 JONES(7566)5950 MARTIN(7654)2500 BLAKE(7698)5700 CLARK(7782)4900 SCOTT(7788)6000 KING(7839)10000 TURNER(7844)3000 ADAMS(7876)2200 JAMES(7900)1900 FORD(7902)6000 MILLER(7934)2600
Bogdan Shishedjiev SQL 12 Selection SELECT * FROM emp WHERE deptno=10; /* Query14 */ EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO 7782CLARKMANAGER KINGPRESIDENT MILLERCLERK
Bogdan Shishedjiev SQL 13 Selection & Projection SELECT ename, job, sal FROM emp WHERE job = ‘MANAGER’ AND sal>2500; /* Query15 */ ENAMEJOBSAL JONESMANAGER2975 BLAKEMANAGER2850
Bogdan Shishedjiev SQL 14 Predicates BETWEEN / NOT BETWEEN SELECT ename FROM emp WHERE hiredate BETWEEN AND ; /* Query1 */ IN / NOT IN SELECT ename FROM emp WHERE job In ('ANALYST','MANAGER'); /* Query2 */ ENAME SMITH JONES BLAKE CLARK ADAMS JAMES MILLER ENAME ALLEN WARD JONES MARTIN BLAKE CLARK KING TURNER JAMES FORD
Bogdan Shishedjiev SQL 15 Predicates LIKE/NOT LIKE compares strings with wildcards “%” substitutes for any 0 or more characters, “_” substitutes for any one character. In Microsoft DBMSs the corresponding examples are “ * “ and “? “. Examples: LIKE 'TARKO%', LIKE '%WSKI', LIKE 'A_C‘ SELECT ename, job FROM Emp WHERE.ename LIKE "b*";/* Query4 */. SELECT ename, job,sal FROM emp WHERE ename LIKE '%mi%'; /*Query16*/ ENAMEJOB BLAKEMANAGER enamejobsal SMITHCLERK800 MILLERCLERK1300
Bogdan Shishedjiev SQL 16 Aggregate SELECT count(*) FROM emp WHERE deptno=20; /* Query10 */ SELECT AVG(sal) average FROM emp WHERE deptno=20; /* Query11 */ SELECT count(Job) as Jobs FROM emp; SELECT count(DISTINCT Job) as Jobs FROM emp; Count 5 Average 2175 Jobs 14 Jobs 5
Bogdan Shishedjiev SQL 17 Join Cartesian product SELECT * FROM emp, dept; /* Query17 */ Join SELECT * FROM emp,dept WHERE emp.deptno = dept.deptno; /* Query18 */ SELECT * FROM emp INNER JOIN dept ON emp.deptno = dept.deptno; /* Query19 */ SELECT * FROM emp E,dept D WHERE E.deptno = D.deptno; /*Query20 */ SELECT * FROM emp as E INNER JOIN dept as D ON E.deptno = D.deptno; /* Query21 */
Bogdan Shishedjiev SQL 18 Join EMPN O ENAMEJOBMGRHIREDSALCOMME.DEPTNOD.DEPTNODNAMELOC 7782CLARKMANAGER ACCOUNTINGNEW YORK 7839KINGPRESIDENT ACCOUNTINGNEW YORK 7934MILLERCLERK ACCOUNTINGNEW YORK 7369SMITHCLERK RESEARCHDALLAS 7566JONESMANAGER RESEARCHDALLAS 7788SCOTTANALYST RESEARCHDALLAS 7876ADAMSCLERK RESEARCHDALLAS 7902FORDANALYST RESEARCHDALLAS 7499ALLENSALESMAN SALESCHICAGO 7521WARDSALESMAN SALESCHICAGO 7654MARTINSALESMAN SALESCHICAGO 7698BLAKEMANAGER SALESCHICAGO 7844 TURNE R SALESMAN SALESCHICAGO 7900JAMESCLERK SALESCHICAGO
Bogdan Shishedjiev SQL 19 All operators SELECT ename, job, dept.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno AND job = 'CLERK'; /* Query22 */ SELECT ename, job, dept.deptno, dname FROM emp INNER JOIN dept ON emp.deptno = dept.deptno WHERE job = 'CLERK'; enamejobdeptnodname SMITHCLERK20RESEARCH ADAMSCLERK20RESEARCH JAMESCLERK30SALES MILLERCLERK10ACCOUNTING
Bogdan Shishedjiev SQL 20 Grouping SELECT deptno, MIN(sal), MAX (sal) FROM emp GROUP BY deptno; /* Query26 */ SELECT deptno, MIN(sal), MAX (sal)FROM emp WHERE job = 'CLERK' GROUP BY deptno; /* Query27 */ deptnoMinsalMaxsal deptno MinsalMaxsal
Bogdan Shishedjiev SQL 21 Grouping GROUP BY groups resulting rows by the identical values of some attributes and aggregate functions to be applied on each group. All attributes that are not parameters of an aggregate function MUST participate in grouping. Order of execution: –WHERE clause removes all rows that don’t satisfy the condition. –The grouping is accomplished and all aggregate values are calculated. –All groups that don’t satisfy the condition of HAVING clause are removed.
Bogdan Shishedjiev SQL 22 Grouping HAVING SELECT deptno, MIN(sal), MAX(sal) FROM emp GROUP BY deptno HAVING MAX(sal) >1200; /* Query28 */ SELECT deptno, MIN(sal), MAX(sal) FROM emp WHERE job = 'CLERK' GROUP BY deptno HAVING MIN(sal)<1000; /* Query29 */ deptno MinsalMaxsal deptno MinsalMaxsal
Bogdan Shishedjiev SQL 23 Ordering ORDER BY ORDER BY {ASC | DESC} SELECT ename, deptno, sal FROM emp ORDER BY deptno, sal DESC; /* Query30 */ enamedeptnosal KING CLARK MILLER FORD SCOTT JONES ADAMS SMITH20800 BLAKE ALLEN TURNER MARTIN WARD301250
Bogdan Shishedjiev SQL 24 Updating Insertion INSERT INTO table [(col1[,col2…])] VALUES(list of values); or : INSERT INTO table [(col1[,col2…])] VALUES SELECT... ; –Example : INSERT INTO Emp ( EMPNO, ENAME, JOB, HIREDATE, SAL, COMM, DEPTNO ) SELECT [EMPNO]+20 AS Expr5, ENAME, "CLERK" AS Expr2, #9/1/99# AS Expr4, 800 AS Expr3, COMM, 40 AS Expr1 FROM Emp WHERE DEPTNO=10;
Bogdan Shishedjiev SQL 25 Updating Update UPDATE table или view SET {column = expression | (list of columns)=(list of expressions)} [WHERE condition] ; –Example: UPDATE Emp SET Emp.SAL = [Sal]+100 WHERE DEPTNO=40; Delete DELETE FROM table [WHERE condition]; –Example: DELETE FROM emp WHERE DEPTNO=40;