Professional Documents
Culture Documents
Curse Feb 28.02-01.03
Curse Feb 28.02-01.03
2017
sql: structure query language
column: group by
scalar: case
DB2: IBM product
Entity: table=department
Attribute: column
Instance of ENTITY: row
tables= entity
column= attribute
row= is a particular instance of an entity
delete vs drop
delete: eliminate the valus inside the table
drop: elimante the table
ACY
Data typ:
VARCHAR(9)- daca nu stim valoarea campului: nume---varying length—more then 254 bytes
SMALLINT: year id ---binary integer—16 Bit
INTEGER--
DECIMAL(7,2): sallary, comm
CHAR(5): job--- alphanumeric fix length—254 bytes
DecFloat- decimal floating point
1
Clause:
SELECT--- attributes
FROM which table---* all tables
WHERE—condition, fillter
ORDER BY
CRUD: CREATE , READ, UPDATE, DELETE
ID
NAME
DEPT
JOB
YEARS
SALARY
COMM
10 mario
20 mario
20 martin
suma +
minus -
divided /
inmultit *
SELECT ID , SALARY, COMM AS COMMISSION—rename the column in commission
2
so:
SALARY+COMM AS ‘TOTAL INCOME’
QUERY 2 TBL
SELEC *
FROM DB2
WHERE JOB=’SALES’ AND ( COMM<250 OR COMM IS NULL)
IS OK
SELECT DEPT,SUM(SALARY) AS TOTAL_SALARY
FROM DB2
WHERE JOB<> ‘MGR’
GROUP BY DEPT
IS NOT OK
SELECT DEPT, JOB, YEARS
FROM DB2
WHERE JOB<>’MGR”
GROUP BY DEPT----- should be GROUP BY DEPT,JOB, YEARS
COUNT(*) --- count the no of rows that satisfy the where condition
COUNT(DISTINCT column name)
3
COUNT considera NULL
GROUP BY DEPT
EXAMPLES
SELECT COUNT(*)
FROM DB2C.ACY0TA01
WHERE AC01_DT_REG >= '2013-10-01' AND AC01_OPER_TERM LIKE 'FIN%' AND
AC01_ATT_IMPORTO<>0
SELECT
AC01_TIPO,
AC01_CAT,
AC01_NUM,
4
AC01_SUB,
AC01_DT_REG,
AC01_OPER_TERM,
AC01_ATT_IMPORTO AS "FIRST_AMOUNT",
AC01_IMPO AS "SECOND_AMOUNT",
DECIMAL (AC01_ATT_IMPORTO-AC01_IMPO,17,1) AS "DIFF"
FROM DB2C.ACY0TA01
WHERE AC01_DT_REG BETWEEN '2013-10-01' AND '2013-11-30' AND AC01_OPER_TERM LIKE
GROUP BY …HAVING
WHERE vs HAVING
SELECT….WHERE
GROUP BY…HAVING
SCALAR FUNCTION
CONCAT ||
SELECT NAME || ‘HAS A JOB OF’ || JOB OF POSITION, SALARY
FROM DBORDER BY 1
COALESCE
Useful when we have NULL value
takes the first NOT NULL value in the argument list
SELECT ID, COALESCE(COMM, 0)
5
current time--- now
current timestamp—current date and current time that are converted in timestamp
DATE yyymmdd
TIME hhmmss
TIMESTAMP yyymmddhhmmssmm
DATE date-date= date duration
clumn function like: min , max opr count can be used with DATA/TIME
DAY(expersion)
SELECT
AC01_TIPO,
AC01_CAT,
AC01_NUM,
AC01_SUB,
AC01_DT_REG,
AC01_OPER_TERM,
AC01_ATT_IMPORTO,
CURRENT DATE AS Today,
CURRENT DATE- AC01_DT_REG as "DURATION"
FROM DB2C.ACY0TA01
WHERE AC01_DT_REG BETWEEN '2013-10-01' AND '2013-11-30' AND AC01_OPER_TERM LIKE
'%WEB%' AND AC01_ATT_IMPORTO>0
2013-11-07 vs 2017-03-01
SELECT
AC01_CAT,
DECIMAL (MAX (AC01_ATT_IMPORTO),17,2) AS MAX,
DECIMAL (MIN (AC01_ATT_IMPORTO),17,2) AS MIN,
DECIMAL (AVG (AC01_ATT_IMPORTO),17,2) AS AVG
FROM DB2C.ACY0TA01
WHERE AC01_DT_REG >='2013-01-01' AND AC01_OPER_TERM LIKE '%WEB%' AND
AC01_ATT_IMPORTO<>0
GROUP BY AC01_CAT
SELECT
AC01_SUB,
DECIMAL (MAX (AC01_ATT_IMPORTO),17,2) AS MAX,
DECIMAL (MIN (AC01_ATT_IMPORTO),17,2) AS MIN,
DECIMAL (AVG (AC01_ATT_IMPORTO),17,2) AS AVG
FROM DB2C.ACY0TA01
6
WHERE AC01_DT_REG >='2013-01-01' AND AC01_OPER_TERM LIKE '%WEB%' AND
AC01_ATT_IMPORTO<>0
GROUP BY AC01_SUB
HAVING AVG (AC01_ATT_IMPORTO)>2000
CASE
is applied to SELECT
WHEN… THEN… AS
or
WHEN… THEN… ELSE --- cand nu avem valorile prestabilite in CASE clause
when we have problems with the same name in two or more tables
7
outer join
Left
column data from both tbl but also the rows of the first tbl
SELECT
FROM DB2 S, LEFT OUTER JOIN DB3 O
ON S.KEY=O.KEY
right
column data from both tbl but also the rows of the second tbl
SELECT D.DEPTNAME, E. LASTNAME
FROM ACY0EMPLOYEE E, INNER JOIN ACY0DEPARTMENT D
ON E.WORKDEPT=D.DEPTNO
WHERE E.JOB =’Manager’
index table
SELECT
E. LASTNAME,
E.FIRSTNAME,
D. DEPTNAME
FROM ACY0EMPLOYEE E,
INNER JOIN ACY0DEPARTMENT.D
ON E.WORKDEPT=D.DEPTNO
ORDER BY D.DEPTNAME,
E.LASTNAME,
E.FIRSTNAME
SELECT
E.LASTNAME,
E.FIRSTNME,
D.DEPTNAME,
E.JOB
FROM DB2C.ACY0EMPLOYEE E
INNER JOIN DB2C.ACY0DEPARTMENT D
ON E.WORKDEPT=D.DEPTNO
where E.worKDEPT between 'A02' AND 'D22' and e.job<>'Manager'
ORDER BY D.DEPTNAME,
E.LASTNAME,
E.FIRSTNME,
E.JOB
SELECT
D.DEPTNAME,
E.LASTNAME,
E.FIRSTNME
FROM DB2C.ACY0EMPLOYEE E
INNER JOIN DB2C.ACY0DEPARTMENT D
on E.EMPNO=D.MGRNO
ORDER BY D.DEPTNAME,
E.LASTNAME,
E.FIRSTNME
8
Fast DB2/SQL and Practical with QMF for Windows—02.03.2017
CASE
Cartesian product
SELECT NAME, DEPTNAME,
FROM STAFF,ORG
correlation name---- renaming the table for the ones that have commune attribute
UNION
works with multiple select
the two tbl that are merged needs to have the same no of columns
SELECT A,B
FROM DB2
FROM A2=’Z’
UNION
SELECT B3,B4+B2
FROM DB3
WHERE B1>’N’
ORDER BY 2
UNION ALL
EXCEPT
the rows that are present into the first tbl and not present into seconf tbl ( also known as
minus command)
INTERSECT
only the rows present into both tbls
SUBQUERY
queries executed into other SELECT,
can be executed into WHERE, HAVING OR FROM ( to create a new table for our analysis)
SELECT
MAX(SALARY) AS MAX
9
SELECT NAME, SALARY
FROM DB2
WHERE SALARY = ( SELECT MAX(SALARY)
FROM DB2)
ANY, IN , ALL
select name
from staf
where salary< all(select avg(salary)
from staf
group by dept
order by name
1. SELECT THE NAME AND THE JOB TITELS OF ALL EMPLOYESS WITH THE SAME JOB
AS JONES.
3, THE NAME, SALARY AND WORKDEPT OF THE EMPLOYEE THAT HAS THE SALLARY HIGHEST
THEN THE AVG SALARY OF ALL DEPARTMENT
4. THE NAME, SALARY AND WORKDEPT of the employee whose salary is higher than the avg salary
of any department
5.
SELECT LASTNAME,EMPNO
FROM DB2C. ACY0EMPLOYEE
WHERE EMPNO IN ( SELECT DISTINCT EMPNO
FROM DB2C. ACY0EMPLOYEE
INNER JOIN DB2C.ACY0DEPARTMENT
ON WORKDEPT=DEPTNO
WHERE JOB = 'SALESMAN' OR JOB =' MANAGER')
10
6. DISPLAY THE NAME OF ALL EMPLOYEES OF THE SAME DEPARTMENT WHOSE
LOCATION IS NEW YORK
SELECT LASTNAME
FROM DB2C. ACY0EMPLOYEE
WHERE WORKDEPT = ( SELECT WORKDEPT
FROM DB2C. ACY0EMPLOYEE
INNER JOIN DB2C.ACY0DEPARTMENT
ON WORKDEPT=DEPTNO
WHERE LOCATION = 'NEW YORK')
11
update db2c.acy0ta15
set ac15_torre =’yy’
where ac15_tipo=’aa’ and ac15_rap=101
and ac15_userid=’uq00788’
SELECT AC16_TIP,
AC16_CAT,
AC16_NUM,
AC16_IMPO_EROG
FROM ACY0TA16
WHERE C16_CAT= 0 AS ‘A’
union
SELECT AC16_TIP,
AC16_CAT,
AC16_NUM,
AC16_IMPO_EROG
FROM ACY0TA16
WHERE C16_CAT= 6 as ‘B’
GROUP BY
AC16_TIP,
AC16_CAT,
HAVING SUM (AC16_NUM) AS Total A
12