select*from hr.EMPLOYEES;select*from hr.countries;select*from hr.countries,hr.departments;select region_id,country_name from hr.countries;select employee_id, first_name, last_name, salary*(1+0.1)from hr.employees;select employee_id, first_name, last_name, salary, salary*(1+0.1) new_salary from hr.employees;selectdistinct department_id from hr.employees;-- 通配符 模糊查询 likeselect employee_id, first_name, last_name from hr.employees where first_name like'B%';SELECT EMPLOYEE_ID,first_name,LAST_NAME from hr.EMPLOYEES WHERE first_name like'A%';--连接运算符 and/orSELECT employee_id, first_name, LAST_NAME, SALARY from hr.EMPLOYEES WHERE DEPARTMENT_ID=60and SALARY>2000;SELECT employee_id,first_name,LAST_NAME,DEPARTMENT_ID from hr.EMPLOYEES WHERE DEPARTMENT_ID=60or DEPARTMENT_ID=30;--null值INSERTinto hr.DEPARTMENTS(DEPARTMENT_ID,DEPARTMENT_NAME,MANAGER_ID)values(300,'数据库',NULL);SELECT DEPARTMENT_ID,DEPARTMENT_NAME,MANAGER_ID from hr.DEPARTMENTS WHERE MANAGER_ID isnull;--order by 子句SELECT EMPLOYEE_ID,first_name,LAST_NAME,SALARY from hr.EMPLOYEES WHERE SALARY >2000ORDERBY SALARY;SELECT EMPLOYEE_ID,first_name,LAST_NAME,SALARY from hr.EMPLOYEES WHERE SALARY >2000ORDERBY SALARY DESC;--group by 子句SELECT JOB_ID,SALARY from hr.EMPLOYEES orderby JOB_ID;SELECT JOB_ID,avg(salary),sum(SALARY),max(SALARY),count(JOB_ID)from hr.EMPLOYEES groupby JOB_ID;SELECT JOB_ID,avg(salary),sum(SALARY),max(SALARY),count(JOB_ID)from hr.EMPLOYEES groupby JOB_ID;SELECT JOB_ID,avg(SALARY),max(SALARY),min(SALARY),sum(SALARY),count(*)from hr.EMPLOYEES groupby DEPARTMENT_ID, JOB_ID;--汇总信息SELECT JOB_ID,avg(SALARY),sum(SALARY),max(SALARY),count(*)from hr.EMPLOYEES groupby rollup(JOB_ID);SELECT JOB_ID,avg(SALARY),sum(SALARY),max(SALARY),count(*)from hr.EMPLOYEES groupby cube(JOB_ID);--having 子句SELECT JOB_ID,avg(SALARY),sum(SALARY),max(SALARY),count(*)from hr.EMPLOYEES groupby JOB_ID havingavg(SALARY)>10000;--多表联合查询--简单链接 - 基本形式 笛卡尔积SELECT EMPLOYEE_ID,LAST_NAME,DEPARTMENT_NAME from hr.EMPLOYEES,hr.DEPARTMENTS;--简单链接 - 条件限定SELECT EMPLOYEE_ID,LAST_NAME,DEPARTMENT_NAME from hr.EMPLOYEES,hr.DEPARTMENTS WHERE EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID;select EMPLOYEE_ID,LAST_NAME,DEPARTMENT_NAME from hr.EMPLOYEES,hr.DEPARTMENTS
where EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID
and DEPARTMENTS.DEPARTMENT_NAME='Shipping';-- 表别名SELECT em.EMPLOYEE_ID,em.LAST_NAME,dep.DEPARTMENT_NAME from hr.EMPLOYEES em,hr.DEPARTMENTS dep WHERE em.DEPARTMENT_ID=dep.DEPARTMENT_ID and dep.DEPARTMENT_name='Shipping';-- 内连接SELECT em.employee_id,em.last_name,dep.DEPARTMENT_name from hr.EMPLOYEES em JOIN hr.DEPARTMENTS dep
on em.DEPARTMENT_ID=dep.DEPARTMENT_ID where em.JOB_ID='AD_ASST';-- 自然连接 --连接的各表之间必须有相同名称的列SELECT em.employee_id,em.first_name,em.last_name,dep.DEPARTMENT_name
from hr.EMPLOYEES em naturaljoin hr.DEPARTMENTS dep
WHERE dep.DEPARTMENT_NAME='Sales';-- 外连接insertinto hr.EMPLOYEES(employee_id,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID,DEPARTMENT_ID)values(1000,'blaine','blaine@hotmail.com',to_date('2009-05-01','yyyy-mm-dd'),'IT_PROG',null);SELECT em.employee_id,em.last_name,dep.DEPARTMENT_name from hr.EMPLOYEES em innerjoin hr.DEPARTMENTS dep
on em.DEPARTMENT_ID=dep.DEPARTMENT_ID WHERE em.JOB_ID='IT_PROG';SELECT em.employee_id,em.last_name,dep.DEPARTMENT_name from hr.EMPLOYEES em leftjoin hr.DEPARTMENTS dep
on em.DEPARTMENT_ID=dep.DEPARTMENT_ID WHERE em.JOB_ID='IT_PROG';
ELECT em.employee_id,em.last_name,dep.DEPARTMENT_name from hr.EMPLOYEES em RIGHTJOIN hr.DEPARTMENTS dep
on em.DEPARTMENT_ID=dep.DEPARTMENT_ID WHERE dep.LOCATION_ID=1700;-- 全连接SELECT em.employee_id,em.last_name,dep.DEPARTMENT_name from hr.EMPLOYEES em fulljoin hr.DEPARTMENTS dep
on em.DEPARTMENT_ID=dep.DEPARTMENT_ID WHERE dep.LOCATION_ID=1700or em.JOB_ID='IT_PROG';-- 自连接SELECT employee_id,LAST_NAME,JOB_ID,MANAGER_ID from hr.EMPLOYEES orderby employee_id;SELECT em1.last_name 'manager',em2.last_name 'employee'from hr.EMPLOYEES em1 LEFTJOIN hr.EMPLOYEES em2
on em1.EMPLOYEE_ID=em2.EMPLOYEE_ID orderby EMPLOYEE_ID;-- 集合操作 --union/union all 并运算SELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES WHERE LAST_NAME like'C%'or LAST_NAME like'S%'unionSELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES WHERE LAST_NAME like'S%'or LAST_NAME like'T%';--union 与 union all union all 操作符形成的结果集中包含两个子结果集中重复的行SELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES WHERE LAST_NAME like'C%'or LAST_NAME like'S%'unionallSELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES WHERE LAST_NAME like'S%'or LAST_NAME like'T%';-- intersect 交集运算SELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES WHERE LAST_NAME like'C%'or LAST_NAME like'S%'intersectSELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES WHERE LAST_NAME like'S%'or LAST_NAME like'T%';--minus 差集--返回所有从第一个查询中返回的,但是没有在第二个查询中返回的记录SELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES WHERE LAST_NAME like'C%'or LAST_NAME like'S%'
minus
SELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES WHERE LAST_NAME like'S%'or LAST_NAME like'T%';/*
在使用结合操作符编写复合查询时,规则包括:
1.在构成复合查询的各个查询中,各select语句指定的列必须在数量上和数据类型上相匹配;
2.不允许在构成复合查询的各个查询的规定order by 子句,
3.不允许在blob、long这样的大数据类型对象上使用集合操作符
*/-- 子查询SELECT EMPLOYEE_ID,LAST_NAME,DEPARTMENT_ID from hr.EMPLOYEES WHERE DEPARTMENT_ID in(SELECT DEPARTMENT_ID from hr.DEPARTMENTS where LOCATION_ID=1700);--EXISTSSELECT EMPLOYEE_ID,LAST_NAME from hr.EMPLOYEES em WHEREEXISTS(SELECT*from hr.DEPARTMENTS dep WHERE em.DEPARTMENT_ID=dep.DEPARTMENT_ID
and LOCATION_ID=1700);SELECT EMPLOYEE_ID,LAST_NAME,JOB_ID,SALARY from hr.EMPLOYEES WHERE JOB_ID='PU_MAN'and
SALARY>=(SELECTavg(SALARY)from hr.EMPLOYEES where JOB_ID='PU_MAN');