Structured Query Language

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

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

Transcript of Structured Query Language

  • 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.