读书人

Oracle 10g SQL Fundamentals II(学习

发布时间: 2012-07-15 20:11:40 作者: rapoo

Oracle 10g SQL Fundamentals II(学习笔记二第3-4章)

第三章 大数据集合    从一个表中拷贝数据insert into sales(id,name,salary,commission_pct)select employee_id,last_name,salaryfrom employeeswhere job_id like '%REP%';将子查询作为insert的目标INSERT INTO(SELECT employee_id, last_name,email, hire_date, job_id, salary, department_id FROM   empl3 WHERE  department_id = 50) VALUES (99999, 'Taylor', 'DTAYLOR',TO_DATE('07-JUN-99', 'DD-MON-RR'),'ST_CLERK', 5000, 50);            获取数据使用子查询作为数据源            SELECT  a.last_name, a.salary,                     a.department_id, b.salavgFROM    employees a, (SELECT   department_id,   AVG(salary) salavg  FROM     employees  GROUP BY department_id) bWHERE   a.department_id = b.department_idAND     a.salary > b.salavg;    update emp   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;      INSERT ALL插入多个表的数据               语法INSERT  ALL  INTO table_a VALUES(…,…,…)  INTO table_b VALUES(…,…,…)  INTO table_c VALUES(…,…,…)     SELECT …    FROM  sourcetab      WHERE …;              例如一:  INSERT  ALLINTO sal_history VALUES(EMPID,HIREDATE,SAL)   INTO mgr_history VALUES(EMPID,MGR,SAL)  SELECT employee_id EMPID, hire_date HIREDATE,           salary SAL, manager_id MGR   FROM  employees     WHERE employee_id > 200;            例如二:  INSERT ALLWHEN SAL > 10000 THEN   INTO sal_history VALUES(EMPID,HIREDATE,SAL) WHEN MGR > 200   THEN    INTO mgr_history VALUES(EMPID,MGR,SAL)    SELECT employee_id EMPID,hire_date HIREDATE,  salary SAL, manager_id MGR   FROM   employees     WHERE  employee_id > 200;             实例三: INSERT FIRSTWHEN SAL  > 25000          THEN    INTO special_sal VALUES(DEPTID, SAL)  WHEN HIREDATE like ('%00%') THEN    INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)  WHEN HIREDATE like ('%99%') THEN    INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)  ELSE  INTO hiredate_history VALUES(DEPTID, HIREDATE)SELECT department_id DEPTID, SUM(salary) SAL,         MAX(hire_date) HIREDATE  FROM   employeesGROUP BY department_id;实例四:INSERT ALLINTO sales_info VALUES(employee_id,week_id,sales_MON)INTO sales_info VALUES(employee_id,week_id,sales_TUE)INTO sales_info VALUES(employee_id,week_id,sales_WED)INTO sales_info VALUES(employee_id,week_id,sales_THUR)INTO sales_info VALUES(employee_id,week_id,sales_FRI)                     SELECT employe_id,week_id,sales_mon,sales_tue,sales_wed,sales_thur,sale_pri                     FROM sales_source_data;MERGE语句的使用:      语法:     MERGE INTO table_name table_alias  USING (table|view|sub_query) alias  ON (join condition)  WHEN MATCHED THENUPDATE SET col1 = col_val1,col2 = col2_val  WHEN NOT MATCHED THENINSERT (column_list)VALUES (column_values);                     例如:插入或者更新empl3表信息 MERGE INTO empl3  c  USING employees e  ON (c.employee_id = e.employee_id)WHEN MATCHED THEN  UPDATE SET c.first_name     = e.first_name, c.last_name      = e.last_name, ... c.department_id  = e.department_idWHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name,  e.email, e.phone_number, e.hire_date, e.job_id,  e.salary, e.commission_pct, e.manager_id,   e.department_id);             第四章分组相关的函数 语法: SELECT[column,] group_function(column)... FROMtable[WHEREcondition][GROUP BYgroup_by_expression][HAVING having_expression] [ORDER BYcolumn]; SELECT   department_id, job_id, SUM(salary),  COUNT(employee_id)FROM     employeesGROUP BY department_id, job_id ;SELECT   department_id, job_id, SUM(salary)FROM     employees  WHERE    department_id < 60GROUP BY ROLLUP(department_id, job_id);SELECT   department_id, job_id, SUM(salary)FROM     employees  WHERE    department_id < 60GROUP BY CUBE (department_id, job_id) ;SELECT   department_id DEPTID, job_id JOB,  SUM(salary), GROUPING(department_id) GRP_DEPT, GROUPING(job_id) GRP_JOBFROM     employeesWHERE    department_id < 50GROUP BY ROLLUP(department_id, job_id);SELECT   department_id, job_id,  manager_id,avg(salary)FROM     employeesGROUP BY GROUPING SETS((department_id,job_id), (job_id,manager_id));SELECT   department_id, job_id, manager_id,  SUM(salary)FROM     employees GROUP BY ROLLUP( department_id,(job_id, manager_id));SELECT   department_id, job_id, manager_id,  SUM(salary)FROM     employees  GROUP BY department_id, ROLLUP(job_id), CUBE(manager_id);

?

读书人网 >SQL Server

热点推荐