SQL(Structured Query Languages)
Standard Languages for Databases
ANSI (American National Standard Institute) Standard
Used to Interact / communicate with database
Once Learned user every where
SQL is re-categorized in sub-languages according to tasks:
DCL(Data Control Languages)
Used to Control Database Security
Create User, Change Password, Assign Rights, snatch rights
CREATE USER, GRANT RIGHTS, REVOKE RIGHTS
CREATE USER
You can create new users by this command and assign password to it.
CREATE USER SCOTT IDENTIFIED BY TIGER;
ALTER USER
ALTER USER SCOTT IDENTIFIED BY TIGERS;
GRANT RIGHTS
GRANT RESOURCE, CONNECT, CREATE TABLE, CREATE SESSION,DBA TO SCOTT;
REVOKE RIGHTS
REVOKE CREATE SESSION FROM SCOTT;
DDL(Data Definition Language)
Used to interact with database
Define objects, change objects, remove objects
CREATE, ALTER, DROP
CREATE TABLE
CREATE TABLE EMP(
EMPNO NUMBER(10) primary key,
ENAME VARCHAR2(30),
SAL NUMBER(12,2),
COMM NUMBER(12,2),
DEPTNO NUMBER(10)
);
ALTER TABLE
ALTER TABLE EMP
ADD MGR NUMBER(5);
ALTER TABLE EMP
MODIFY ENAME VARCHAR2(50);
DROP TABLE
DROP TABLE EMP;
TRUNCATE
TRUNCATE TABLE EMP_HISTORY;
DML (Data Manipulation Language)
Used to interact with tables
Store new records, change records, remove records, select data from tables.
INSERT,UPDATE, DELETE, SELECT
INSERT
INSERT INTO EMP
VALUES (1,’ASAD’,5000,500,7787,10);
INSERT INTO EMP(EMPNO,ENAME,SAL)
VALUES (2,’ALEEM’,7000);
INSERT INTO EMP(EMPNO,ENAME,SAL)
VALUES (&no,’&name’,&salary);
INSERT INTO EMP_HISTORY
SELECT * FROM EMP;
UPDATE
UPDATE EMP
SET MGR = 7767;
UPDATE EMP
SET COMM = 200
WHERE COMM IS NULL;
UPDATE EMPLOYEES
SET JOB_ID = (SELECT JOB_ID
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 205),
SALARY = (SELECT SALARY
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 205)
WHERE EMPLOYEE_ID = 114;
UPDATE COPY_EMP
SET DEPARTMENT_ID = (SELECT DEPARTMENT_ID
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 100)
WHERE JOB_ID = (SELECT JOB_ID
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 200);
DELETE
DELETE FROM EMP;
DELETE FROM EMP
WHERE SAL < 2000;
DELETE FROM EMPLOYEES
WHERE DEPARTMENT_ID =
(SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME
LIKE '%PUBLIC%');
SELECT
SELECT * FROM EMP;
SELECT ENAME,JOB,SAL
FROM EMP;
SELECT ENAME EMPLOYEE,JOB DESIGNATION, SAL SALARY
FROM EMP;
SELECT ENAME,JOB,SAL,SAL*.2 BONUS
FROM EMP;
SELECT ‘The name of Employee is’||ENAME
FROM EMP;
SELECT * FROM EMP
ORDER BY ENAME;
SELECT * FROM EMP
ORDER BY 2;
SELECT * FROM EMP
ORDER BY JOB,DEPTNO;
SELECT * FROM EMP
ORDER BY JOB DESC,DEPTNO;
SELECT * FROM EMP
WHERE SAL < 3000;
SELECT * FROM EMP
WHERE SAL > 5000;
SELECT * FROM EMP
WHERE DEPTNO = 20;
SELECT * FROM EMP
WHERE DEPTNO IN (10,30,40);
SELECT * FROM EMP
WHERE SAL BETWEEN 2000 AND 5000;
SELECT * FROM EMP
WHERE ENAME LIKE ‘A%;’
SELECT * FROM EMP
WHERE ENAME LIKE ‘%ALI%’;
SELECT * FROM EMP
WHERE JOB = ‘MANAGER’
AND SAL < 3000;
SELECT * FROM EMP
WHERE JOB = ‘CLERK’
OR SAL > 2000;
SELECT * FROM EMP
WHERE COMM IS NOT NULL;
TCL (Transaction Control Language)
Used to control Transactions
COMMIT, ROLLBACK, SAVEPOINT
COMMIT;
ROLLBACK;
SAVEPOINT;
Operator Precedence
Operator | Meaning |
1 | Arithmetic operators |
2 | Concatenation operator |
3 | Comparison conditions |
4 | IS [NOT] NULL, LIKE, [NOT] IN |
5 | [NOT] BETWEEN |
6 | Not equal to |
7 | NOT logical condition |
8 | AND logical condition |
9 | OR logical condition |
Functions
Single Row
CHARACTER FUNCTIONS
UPPER
SELECT UPPER(ENAME) FROM EMP;
LOWER
SELECT LOWER(ENAME FROM EMP;
INITCAP
SELECT INITCAP(ENAME) FROM EMP;
LENGTH
SELECT LENGTH(ENAME) FROM EMP;
SUBSTR
SELECT SUBSTR(ENAME,2,3) FROM EMP;
INSTR
SELECT INSTR(ENAME,’A’) FROM EMP;
LPAD
SELECT LPAD(ENAME,10,’~’) FROM EMP;
RPAD
SELECT RPAD(ENAME,10,’~’) FROM EMP;
REPLACE
SELECT REPLACE(ENAME,’S’,’A’) FROM EMP;
TRIM
SELECT TRIM (‘H’ FROM ‘HELLO WORLD’) FROM EMP;
NUMERIC FUNCTIONS
ROUND
SELECT ROUND(17879.879,2) FROM DUAL;
SELECT ROUND(17879.241,2) FROM DUAL;
TRUNC
SELECT TRUNC(17879.879,2) FROM DUAL;
SELECT TRUNC(17879.241,2) FROM DUAL;
MOD
SELECT MOD(15,4) FROM DUAL;
DATE FUNCTIONS
ADD_MONTHS
SELECT ADD_MONTHS(HIREDATE,10) FROM EMP;
MONTHS_BETWEEN
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;
LAST_DAY
SELECT LAST_DAY(SYSDATE) FROM DUAL;
NEXT_DAY
ROUND
TURNC
CONVERSION FUNCTIONS
TO_CHAR
SELECT TO_CHAR(SYSDATE,’DD-MM-RR HH:MI’) FROM DUAL;
SELECT TO_CHAR(SAL,’999,999.00’) FROM EMP;
TO_NUMBER
SELECT TO_NUMBER(SUBSTR(HIREDATE,1,2)) FROM EMP;
TO_DATE
SELECT TO_DATE(’10-10-04’,’MM-DD-YY’) FROM DUAL;
OTHER FUNCTIONS
NVL
SELECT NVL(SAL,100) FROM EMP;
NVL2
SELECT NVL2(COMM,SAL+COMM,SAL) FROM EMP;
NULLIF (if both parameters in the function are equal then return null)
SELECT NULLIF(1234,1234) FROM DUAL;
COALESCE (return first non null value)
SELECT COALESCE(SUBSTR('ABC',4),'NOT BC','NO SUBSTRING') FROM DUAL;
DECODE
SELECT DECODE(JOB,’MANAGER’,SAL*.2,’CLERK’,SAL*.1,SAL*.05) FROM EMP;
CASE EXPRESSION
SELECT CASE JOB WHEN ‘PRESIDENT’ THEN ‘A+’
WHEN ‘MANAGER’ THEN ‘A’
ELSE ‘B’ END
FROM EMP;
Group Functions
SUM
SELECT SUM(SAL) FROM EMP;
SELECT SUM(SAL) FROM EMP
GROUP BY DEPTNO;
SELECT SUN(SAL) FROM EMP
GROUP BY JOB;
AVG
SELECT AVG(SAL) FROM EMP
GROUP BY DEPTNO;
MIN
SELECT MIN(SAL) FROM EMP;
MAX
SELECT MAX(SAL) FROM EMP;
COUNT
SELECT COUNT(*) FROM EMP;
SELECT COUNT(*) FROM EMP
GROUP BY JOB;
Having Clause
SELECT SUM(SAL)
FROM EMP
GROUP BY JOB
HAVING SUM(SAL) > 5000;
Joins
INNER JOIN
SELECT DNAME,ENAME,JOB,SAL
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
OUTER JOIN
SELECT DNAME,ENAME,JOB,SAL
FROM EMP,DEPT
WHERE EMP.DEPTNO(+) = DEPT.DEPTNO;
SELF JOIN
SELECT A.ENAME MANAGER,A.EMPNO MANAGERID,
B.ENAME SUBORDINATE,B.EMPNO SUBORDINATEID
FROM EMP A,EMP B
WHERE A.EMPNO = B.MGR;
NATURAL JOIN
SELECT DEPTNO,DNAME,ENAME,JOB,SAL
FROM DEPT
NATURAL JOIN EMP
USING CLAUSE
SELECT DNAME,JOB,SAL
FROM EMP
JOIN DEPT
USING (DEPTNO)
ON CLAUSE
SELECT DNAME,ENAME,JOB,SAL
FROM EMP JOIN DEPT
ON (EMP.DEPTNO = DEPT.DEPTNO);
SELF JOIN USING ON CLAUSE
SELECT A.ENAME SUBNAME,A.JOB SUBJOB,
A.EMPNO SUBNO, B.ENAME MNGNAME,
B.JOB MNGJOB,B.EMPNO MNGNO
FROM EMP A JOIN EMP B
ON (A.MGR = B.EMPNO)
Three way join with ON CLAUSE
SELECT EMPNO,CITY,DNAME
FROM EMP
JOIN DEPT
ON (EMP.DEPTNO = DEPT.DEPTNO)
JOIN LOC
ON (LOC.LOCATION_ID = DEPT.LOCATION_ID)
Non equi join
SELECT E.LAST_NAME,E.SALARY,J.GRADE_LEVEL
FROM EMP E JOIN JOB_GRADES J
ON E.SAL BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL
LEFT OUTER JOIN
SELECT DNAME,ENAME,JOB,SAL
FROM EMP E LEFT OUTER JOIN DEPT D
ON (E.DEPTNO = D.DEPTNO)
RIGHT OUTER JOIN
SELECT DNAME,ENAME,JOB,SAL
FROM EMP E RIGHT OUTER JOIN DEPT D
ON (E.DEPTNO = D.DEPTNO)
FULL OUTER JOIN
SELECT DNAME,ENAME,JOB,SAL
FROM EMP E FULL OUTER JOIN DEPT D
ON (E.DEPTNO = D.DEPTNO)
CORSS JOIN
SELECT DNAME,ENAME,JOB,SAL
FROM EMP
CROSS JOIN DEPT
Sub-Query
SINGLE ROW SUBQUERY
SELECT * FROM EMP
WHERE SAL < (SELECT SAL FROM EMP WHERE ENAME = ‘SMITH’);
MULTIPLE ROW SUBQUERY (IN)
SELECT * FROM EMP
WHERE SAL IN (SELECT SAL FROM EMP WHERE DEPTNO = 10)
MULTIPLE ROW SUBQUERY (ANY)
SELECT * FROM EMP
WHERE SAL < ANY (SELECT SAL FROM EMP WHERE DEPTNO = 10)
MULTIPLE ROW SUBQUERY (ALL)
SELECT * FROM EMP
WHERE SAL < ALL (SELECT SAL FROM EMP WHERE DEPTNO = 10)
Set Operators
UNION(returns both queries after eliminating duplications)
UNION ALL (returns results from both queries, including all duplications)
INTERSECT(returns rows that are common to both queries)
MINUS(returns rows in the first query that are not present in second query)
Views
CREATE VIEW ORG_EMP_V AS
SELECT A.ENAME MANAGER,A.EMPNO MANAGERID,
B.ENAME SUBORDINATE,B.EMPNO SUBORDINATEID
FROM EMP A,EMP B
WHERE A.EMPNO = B.MGR;
Sequence
CREATE SEQUENCE SEQ_EMP1
START WITH 1
INCREMENT BY 1
NOCACHE;
CREATE SEQJUENCE SEQ_EMP2
START WITH 100
INCREMENT BY 1
MINVALUE 90
MAXVALUE 150
CYCLE;
SELECT SEQ_EMP1.NEXTVAL
FROM DUAL;
SELECT SEQ_EMP1.CURRVAL
FROM DUAL;
Synonym
CREATE SYNONYM E FOR EMP;
Index
CREATE INDEX IDX_EMP_ENAME ON EMP(ENAME);
Constraints
PRIMARY KEY
UNIQUE
NOT NULL
FOREIGN KEY
CHECK
CREATE TABLE DEPT(
DEPTNO NUMBER(10) PRIMARY KEY,
DNAME VARCHAR2(100) NOT NULL);
CREATE TABLE EMP(
EMPNO NUMBER(10) PRIMARY KEY,
ENAME VARCHAR2(100) NOT NULL,
PHONE VARCHAR2(15) UNIQUE,
SAL NUMBER(15,2),
DEPTNO NUMBER(10),
CHECK (SAL < 3000),
FOREIGN KEY (DEPTNO) REFERENCES EMP);
Security
CREATE ROLE R1 IDENTIFIED BY R1;
GRANT SELECT ON EMP TO R1;
GRANT UPDATE,DELETE ON EMP TO R1;
GRANT R1 TO SCOTT;
PL/SQL NOTES
Block
Declaration Section (Declare all variable, constants, cursors, exceptions)
Executable Section (All executable PL/SQL Commands, call other procedures,DML)
Exception Section (Tran Run time errors and give your own messages)
Variable
PL/SQL Variable
Scalar variable
Composite variable
Declare
X number(10);
V_EMPNO EMP.EMPNO%TYPE;
V_EMP EMP%ROWTYPE;
BEGIN
SELECT *
INTO V_EMP
FROM EMP
WHERE EMPNO = 7788;
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
END;
DML in PL/SQL
SELECT
INSERT
UPDATE
DELETE
Declare
X number(10);
V_EMPNO EMP.EMPNO%TYPE;
V_EMP EMP%ROWTYPE;
BEGIN
SELECT *
INTO V_EMP
FROM EMP
WHERE EMPNO = 7788;
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
INSERT INTO EMP1 (EMPNO,ENAME,JOB,SAL)
VALUES (V_EMP.EMPNO,V_EMP.ENAME,V_EMP.JOB,V_EMP.SAL);
UPDATE EMP1
SET SAL = V_EMP.SAL
WHERE EMPNO = V_EMP.EMPNO;
DELETE FROM EMP1
WHERE DEPTNO = V_EMP.DEPTNO;
END;
Flow Control
If condition
DECLARE
V_EMP EMP%ROWTYPE;
BEGIN
SELECT *
INTO V_EMP
FROM EMP
WHERE ENAME = ‘SCOTT’;
IF V_EMP.SAL < 3000 THEN
DBMS_OUTPUT.PUT_LINE(‘A’);
ELSIF V_EMP.SAL < 2000 THEN
DBMS_OUTPUT.PUT_LINE(‘B’);
ELSIF V_EMP.SAL < 1000 THEN
DBMS_OUTPUT.PUT_LINE(‘C’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘D’);
END IF;
END;
Basic loop
DECLARE
X NUMBER := 1;
BEGIN
LOOP
X := X +1 ;
DBMS_OUTPUT.PUT_LINE(X);
EXIT WHEN X = 10;
END LOOP;
END;
While loop
DECLARE
X NUMBER := 1;
BEGIN
WHILE X < 10 LOOP
X := X +1;
DBMS_OUTPUT.PUT_LINE(X);
END LOOP;
END;
For loop
BEGIN
FOR I IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE(I):
END LOOP;
END;
Exceptions
DECLARE
V_EMP EMP%ROWTYPE;
BEGIN
SELECT *
INTO V_EMP
FROM EMP
WHERE DEPTNO = 1;
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘SORRY, NO DATA FOUND’);
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE(‘SORRY, MANY RECORDS FOUND’);
END;
Cursor
DECLARE
V_EMP EMP%ROWTYPE;
CURSOR C_EMP IS
SELECT *
INTO V_EMP
FROM EMP
WHERE DEPTNO = 10;
BEGIN
OPEN C_EMP;
LOOP
FETCH C_EMP INTO V_EMP;
EXIT WHEN C_EMP%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
END LOOP;
END;
Cursor for Loop
BEGIN
FOR I IN (SELECT * FROM EMP) LOOP
DBMS_OUTPUT.PUT_LINE(I.ENAME);
END LOOP;
END;
Procedures
IN PARAMETER
CREATE OR REPLACE PROCEDURE P_EMP(P_EMPNO NUMBER)
IS
V_ENAME EMP.ENAME%TYPE;
BEGIN
SELECT ENAME
INTO V_ENAME
FROM EMP
WHERE EMPNO = P_EMPNO;
DBMS_OUTPUT.PUT_LINE(V_ENAME);
END;
Call Procedure
BEGIN
P_EMP(100);
END;
OUT PARAMETER
CREATE OR REPLACE PROCEDURE P_EMP(P_EMPNO IN NUMBER, P_ENAME OUT VARCHAR2)
IS
BEGIN
SELECT ENAME
INTO P_ENAME
FROM EMP
WHERE EMPNO = P_EMPNO;
END;
Call Procedure
DECLARE
X NUMBER;
BEGIN
P_EMP(100,X);
END;
IN OUT PARAMETER
CREATE OR REPLACE PROCEDURE P_EMP(P_EMPNO_SAL IN OUT NUMBER)
IS
BEGIN
SELECT SAL
INTO P_EMPNO_SAL
FROM EMP
WHERE EMPNO = P_EMPNO_SAL;
END;
DECLARE
X NUMBER := 100;
BEGIN
P_EMP(X);
END;
Functions
CREATE OR REPLACE FUNCTION F_EMP(P_EMPNO IN NUMBER)
RETURN VARCHAR2
IS
V_EMP EMP%ROWTYPE;
BEGIN
SELECT ENAME
INTO P_ENAME
FROM EMP
WHERE EMPNO = P_EMPNO;
END;
CALL FUNCTION
SELECT F_EMP(7788) FROM DUAL;
TRIGGER
CREATE OR REPLACE TRIGGER INS_EMP
AFTER INSERT OR DELETE OR UPDATE OF SAL ON EMP
REFERENCES NEW AS N OLD AS O
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO EMP1(EMPNO,ENAME,JOB)
VALUES (:
ELSIF UPDATING THEN
UPDATE EMP1
SET SAL = :N.SAL
WHERE EMPNO = :O.EMPNO;
ELSIF DELETING THEN
DELETE FROM EMP
WHERE EMPNO = :O.EMPNO;
END IF;
END;
No comments:
Post a Comment