115
Structured Query Language SELECT DML( Data Manipulation Language) DDL( Data Definition Language) DCL( Data Control Language) Commit, Rollback, Savepoint

Structured Query Language

  • Upload
    roxy

  • View
    43

  • Download
    4

Embed Size (px)

DESCRIPTION

Structured Query Language. SELECT DML( Data Manipulation Language) DDL( Data Definition Language) DCL( Data Control Language) Commit, Rollback, Savepoint. Select Statement. SELECT 는 표시할 대상 열을 지정합니다 . FROM 은 대상 열을 포함하는 해당 테이블을 지정합니다. - PowerPoint PPT Presentation

Citation preview

  • Structured Query Language SELECT DML( Data Manipulation Language) DDL( Data Definition Language) DCL( Data Control Language) Commit, Rollback, Savepoint

  • Select StatementSELECT*|{[DISTINCT] column|expression [alias],...}FROMtable;SELECT .FROM .

  • Select Statement SELECT *FROM departments; SELECT department_id, location_idFROM departments;

  • SQL SQL . SQL . . . SQL .

  • .+-* / SELECT last_name, salary, salary + 300FROM employees;

  • NULL , , , . 0 .SELECT last_name, job_id, salary, commission_pctFROM employees;

  • NULL SELECT last_name, 12*salary*commission_pctFROM employees; .

  • Column Alias() . . . AS . . SELECT last_name AS name, commission_pct commFROM employees;

  • : . (||) . .

    SELECTlast_name||job_id AS "Employees"FROM employees;

  • Literal SELECT , . . (row) .

    SELECT last_name||' is a '||job_id AS "Employee Details"FROM employees;

  • SELECT DISTINCT .SELECT DISTINCT department_idFROM employees;

  • SQL vs. iSQL*PlusSQL

    SQL ANSI

    iSQL*Plus iSQL*Plus

  • WHERE .

    WHERE FROM .

    SELECT*|{[DISTINCT] column|expression [alias],...}FROMtable[WHEREcondition(s)];

    SELECT employee_id, last_name, job_id, department_idFROM employeesWHERE department_id = 90 ;

  • . . DD-MON-RR.SELECT last_name, job_id, department_idFROM employeesWHERE last_name = 'Whalen';

  • => >=<
  • Between

    BETWEEN .SELECT last_name, salaryFROM employeesWHERE salary BETWEEN 2500 AND 3500;

  • Like

    LIKE . .% ._ .SELECTfirst_nameFROM employeesWHEREfirst_name LIKE 'S%';

  • SELECT last_name, job_id, salaryFROM employeesWHERE job_id = 'SA_REP'OR job_id = 'AD_PRES'AND salary > 15000;

  • Order By

    SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date ;ORDER BY .ASC: , DESC: ORDER BY SELECT .

  • SQL

  • LOWERUPPERINITCAPCONCATSUBSTRLENGTHINSTRLPAD | RPADTRIM

  • .LOWER('SQL Course')UPPER('SQL Course')INITCAP('SQL Course')sql courseSQL COURSESql Course

    SELECT employee_id, last_name, department_idFROM employeesWHERE LOWER(last_name) = 'higgins';

  • CONCAT('Hello', 'World')SUBSTR('HelloWorld',1,5)LENGTH('HelloWorld')INSTR('HelloWorld',O,2)LPAD(salary,10,'*')RPAD(salary,10,'*')TRIM('H' FROM 'HelloWorld')HelloWorldHello107*****2400024000*****elloWorld .

  • ROUND: .ROUND(45.926, 2) 45.93TRUNC: .TRUNC(45.926, 2)45.92MOD: .MOD(1600, 300)100SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1)FROM DUAL;

  • . , , , , , , DD-MON-RR. 20 21 . 21 20 . SELECT last_name, hire_dateFROM employeesWHERE last_name like 'G%';

  • . . 24 .SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKSFROM employeesWHERE department_id = 90;

  • MONTHS_BETWEENADD_MONTHSNEXT_DAYLAST_DAYROUNDTRUNC

  • MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')ADD_MONTHS ('11-JAN-94',6)NEXT_DAY ('01-SEP-95','FRIDAY') LAST_DAY('01-FEB-95') 19.6774194'11-JUL-94''08-SEP-95''28-FEB-95'

  • ROUND(SYSDATE,'MONTH') 01-AUG-95ROUND(SYSDATE ,'YEAR') 01-JAN-96TRUNC(SYSDATE ,'MONTH') 01-JUL-95 TRUNC(SYSDATE ,'YEAR') 01-JAN-95Assume SYSDATE = '25-JUL-95':

  • (implicit) (explicit)

  • NUMBERCHARACTERTO_CHAR

  • TO_CHAR ( -> ) . . fm . .TO_CHAR(date, 'format_model')

  • YYYYYEARMMMONTHDYDAY ()() MON (DDD, DD, D) ( Q : ), fm

  • .

    .

    .

  • to_char SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATEFROM employees;

  • TO_CHAR ( -> )TO_CHAR .TO_CHAR(number, 'format_model')90$L., .0 . $ . . . .

  • TO_NUMBER, TO_DATETO_NUMBER .

    TO_DATE .

    fx . TO_DATE .TO_NUMBER(char[, 'format_model'])TO_DATE(char[, 'format_model'])

  • RR 1995199520012001 27-OCT-9527-OCT-1727-OCT-1727-OCT-95RR 1995201720171995YY 1995191720172095 ( )04904950995099 . . . . ( )

  • NVL . , . .NVL(commission_pct,0)NVL(hire_date,'01-JAN-97')NVL(job_id,'No Job Yet')

    SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SALFROM employees;

  • NVL2

    SELECT last_name, salary, commission_pct, NVL2(commission_pct, 'SAL+COMM', 'SAL') incomeFROM employees WHERE department_id IN (50, 80);

    1212

  • Coalesce SELECT last_name, COALESCE(commission_pct, salary, 10) commFROM employeesORDER BY commission_pct;

  • CASE SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END "REVISED_SALARY"FROM employees;IF-THEN-ELSE .

  • DECODE SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARYFROM employees;

  • EMPLOYEES DEPARTMENTS

  • Catersian product . WHERE .

  • 1.

  • .

    WHERE . .SELECTtable1.column, table2.columnFROMtable1, table2WHEREtable1.column1 = table2.column2;

  • SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_idFROM employees, departmentsWHERE employees.department_id = departments.department_id;

  • . . .

  • SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e , departments dWHERE e.department_id = d.department_id; . . .

  • EMPLOYEESJOB_GRADES

  • SELECT e.last_name, e.salary, j.grade_levelFROM employees e, job_grades jWHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;

  • (Outer join)EMPLOYEESDEPARTMENTS

  • ( (+))

    SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id(+) = d.department_id ;

  • Cross join CROSS JOIN . (Cartesian Product) . SELECT last_name, department_nameFROM employeesCROSS JOIN departments ;

  • Natural joinNATURAL JOIN . . . SELECT department_id, department_name, location_id, cityFROM departmentsNATURAL JOIN locations ;

  • Using , NATURAL JOIN USING .USING . .NATURAL JOIN USING .

  • Using SELECT e.employee_id, e.last_name, d.location_idFROM employees e JOIN departments dUSING (department_id) ;

  • ON . ON . .ON . SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id);

  • vs. SQL: 1999 . ( ) ( ) . .

  • Left outer join SELECT e.last_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id = d.department_id) ;

  • SELECT e.last_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN departments dON (e.department_id = d.department_id) ;Right outer join

  • SELECT e.last_name, e.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON (e.department_id = d.department_id) ;Full outer join

  • SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id)AND e.manager_id = 149 ;

  • .EMPLOYEESEMPLOYEES

  • AVG COUNT MAXMIN STDDEV SUMVARIANCE

  • SELECT[column,] group_function(column), ...FROMtable[WHEREcondition][GROUP BYcolumn][ORDER BYcolumn];

  • SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)FROM employeesWHERE job_id LIKE '%REP%'; AVG SUM .

    MIN MAX .SELECT MIN(hire_date), MAX(hire_date)FROM employees;

  • NULL

    SELECT COUNT(*)FROM employeesWHERE department_id = 50;COUNT(*) .

    COUNT(expr) expr .EMPLOYEES .SELECT COUNT(commission_pct)FROM employeesWHERE department_id = 80;

  • NVL

    SELECT AVG(commission_pct)FROM employees; .

    SELECT AVG(NVL(commission_pct, 0))FROM employees;NVL .

  • EMPLOYEESEMPLOYEES 440095003500640010033

  • SELECTcolumn, group_function(column)FROMtable[WHEREcondition][GROUP BYgroup_by_expression][ORDER BYcolumn];GROUP BY .Group by

  • Group by

    SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id ;SELECT GROUP BY .

  • having

    SELECT department_id, MAX(salary)FROM employeesGROUP BY department_idHAVING MAX(salary)>10000 ;

  • SELECT job_id, SUM(salary) PAYROLLFROM employeesWHERE job_id NOT LIKE '%REP%'GROUP BY job_idHAVING SUM(salary) > 13000ORDER BY SUM(salary); having

  • Abel ? Abel ??Abel ??

  • ( ) . ( ) .SELECTselect_listFROMtableWHEREexpr operator (SELECTselect_list FROMtable);

  • SELECT last_nameFROM employeesWHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');

    11000

  • . . ORDER BY Top-N . .

  • ST_CLERKST_CLERKSA_MAN

  • . .=> >=<
  • SELECT last_name, job_id, salaryFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees);2500

    SELECT department_id, MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);2500

  • SELECT employee_id, last_nameFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id);ERROR at line 4:ORA-01427: single-row subquery returns more than one row .

  • . . IN ANY ALL . . .

  • 9000, 6000, 4200SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id 'IT_PROG';

  • 9000, 6000, 4200SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id 'IT_PROG';

  • SELECT emp.last_nameFROM employees empWHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr);

    no rows selected

  • Insert INSERT .

    .INSERT INTOtable [(column [, column...])]VALUES(value [, value...]);INSERT INTO departments(department_id, department_name, manager_id, location_id)VALUES (70, 'Public Relations', 100, 1700);1 row created. . .

  • NULL Insert

    INSERT INTOdepartmentsVALUES(100, 'Finance', NULL, NULL);1 row created.INSERT INTOdepartments (department_id, department_name )VALUES(30, 'Purchasing');1 row created.

    INSERT INTO employeesVALUES (114, 'Den', 'Raphealy', 'DRAPHEAL', '515.127.4561', TO_DATE('FEB 3, 1999', 'MON DD, YYYY'), 'AC_ACCOUNT', 11000, NULL, 100, 30);1 row created.

  • Insert INSERT .

    VALUES .INSERT .

    INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%';

    4 rows created.

  • Update UPDATE . .UPDATEtableSETcolumn = value [, column = value, ...][WHERE condition];UPDATE employeesSET department_id = 70WHERE employee_id = 113;1 row updated.UPDATE copy_empSET department_id = 110;22 rows updated.

  • update

    UPDATE employeesSET job_id = (SELECT job_id FROM employees WHERE employee_id = 205), salary = (SELECT salary FROM employees WHERE employee_id = 205) WHERE employee_id = 114;1 row updated.

  • UPDATE employees *ERROR at line 1:ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not foundUPDATE employeesSET department_id = 55WHERE department_id = 110; 55 .

  • Update DELETE .DELETE [FROM] table[WHERE condition]; DELETE FROM departments WHERE department_name = 'Finance';1 row deleted.DELETE FROM copy_emp;22 rows deleted.

  • update

    DELETE FROM employeesWHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE '%Public%');1 row deleted.

  • DELETE FROM departmentsWHERE department_id = 60;DELETE FROM departments *ERROR at line 1:ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found .

  • DML with check option DML .WITH CHECK OPTION .INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary FROM employees WHERE department_id = 50 WITH CHECK OPTION)VALUES (99998, 'Smith', 'JSMITH', TO_DATE('07-JUN-99', 'DD-MON-RR'), 'ST_CLERK', 5000);INSERT INTO *ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation

  • Default INSERT INTO departments (department_id, department_name, manager_id) VALUES (300, 'Engineering', DEFAULT);UPDATE departments SET manager_id = DEFAULT WHERE department_id = 10;INSERT DEFAULT

    UPDATE DEFAULT

  • . DML DDL DCL DML SQL . . DDL DCL ( ) COMMIT ROLLBACK iSQL*Plus

  • .DDL DCL

    iSQL*Plus .COMMIT ROLLBACK (explicit) iSQL*Plus

  • Lock (exclusive): (share): DML: , : DDL: .

  • Structured Query Language DDL( Data Definition Language) CREATE ALTER DROP TRUNCATE

  • : .1 30 .A-Z, a-z, 0-9, _, $, # . .Oracle server .

  • Create table .

    . ,

    CREATE TABLE [schema.]table (column datatype [DEFAULT expr][, ...]);CREATE TABLE

  • . . .

    , SQL . . .

    ... hire_date DATE DEFAULT SYSDATE, ...

  • .

    . DESCRIBE dept

  • VARCHAR2(size) CHAR(size) NUMBER(p,s) DATE LONG 2GB CLOB 4GB RAW LONG RAW BLOB 4GB BFILE ( 4GB)ROWID 64

  • Timestamp TIMESTAMP INTERVAL YEAR TO MONTH INTERVAL DAY TO SECOND , , ,

    TIMESTAMP DATE .DATE , , , , . TIMESTAMP . TIMESTAMP[(fractional_seconds_precision)]

  • CREATE TABLE AS subquery .

    . .

    CREATE TABLE table [(column, column...)]AS subquery;

  • DESCRIBE dept80CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;Table created.

  • Alter table ALTER TABLE , .

    ALTER TABLE tableADD (column datatype [DEFAULT expr] [, column datatype]...);ALTER TABLE tableMODIFY (column datatype [DEFAULT expr] [, column datatype]...);

    ALTER TABLE tableDROP (column);

  • ALTER TABLE dept80ADD (job_id VARCHAR2(9));Table altered.ADD .

    . , .

    Alter table

  • DROP COLUMN .

    ALTER TABLE tableSET UNUSED(column);ALTER TABLE tableSET UNUSED COLUMN column;

    ALTER TABLE tableDROP UNUSED COLUMNS;Alter table

  • . . .DROP TABLE .

    DROP TABLE dept80;Table dropped.

    RENAME dept TO detail_dept;Table renamed., , RENAME .

  • TRUNCATE TABLE : . .

    TRUNCATE . DELETE .

    TRUNCATE TABLE detail_dept;Table truncated.