2017의 게시물 표시

Database Basic_SQL_DML_INSERT

  <DML : 데이터 조작어 > INSERT 문 * TCL : Transaction language. 1) commit : 변경된 것을 저장하겠다 . 2)rollback : 가장 최근에 변경했던 것을 되돌리겠다 . *insert : 테이블에 새 행을 추가하는 것 . 1) col 의 속성을 변경할 때는 modify alter table emp_new modify (hire_date default sysdate); select * from dept_new; select * from emp_new; 2) emp_new 라는 아무런 데이터 값이 없는 테이블에 employees 의 테이블에 있는 칼럼들을 추가하는것 -- -- 먼저 dept_new 의 칼럼들을 추가해야 가능하다 . insert into emp_new select employee_id, first_name, salary, hire_date, department_id from employees where department_id = 20; 3) departments 테이블의 department_id, department_name, location_id 가 가르키는 실제 도시인 locations 를 dept_new 의 테이블에 추가하기 . insert into dept_new select department_id, department_name, l.city from departments d, locations l where d.location_id = l.location_id; 4) emp_new 테이블에 각 col 마다 데이터를 넣어주기 -- * hire_date 는 defalt sysdate 를 해주었기 때문에 따로 값을 안넣어도 자동적으로 오늘날짜가올라온다 . insert into emp_new (empno, ename, salary, deptno) values(...

Database : Basic SQL_DDL_Table

<DDL – Table 생성 > ------ 테이블 생성하기 - create + 제약조건 사용하기 ------------- create table dept_new ( deptno number(4) constraint deptno_pk primary key, -- deptno col 의 유형은 숫자이며 길이는 4 이며 제약조건은 primary key 이다 . dname varchar2(30) not null, loc varchar2(30) ); select * from dept_new; ------ 테이블 생성하기 - create + 제약조건 사용하기 ------------- create table emp_new ( empno number(4), ename varchar2(30) not null, salary number(10) not null, hire_date date not null, deptno number(4) , constraint empno_pk primary key(empno), constraint salary_ck check (salary >= 500), constraint deptno_fk foreign key(deptno) references dept_new(deptno) );                 ----- 서브쿼리를 이용해서 테이블 만들기 ------------ create table emp_dept80 as select employee_id, last_name, sala...

Database : Basic SQL_집합연산자_union,interset,minus

< 집합연산자 - union, interset, minus > 1. 합집합 union 사용하기 1) union의 사용 : 110건 union은 중복을 제거한 합집합입니다. 쓰이는 col과 동일한 형태이어야 합니다. 사원이 과거에 가졌던 근무와 현재 근무지가 중복되는 데이터들이 있다 하지만..! 중요한 것은 employee_id와 job_id가 중복되는 경우를 없애고 보여주기 때문에 union이 저절로 '정렬작업'을 해준다는 것입니다. select * from job_history; select employee_id, job_id from   employees union  select employee_id, job_id from   job_history; 2) union이 아닌 join의 사용 :  join문장으로서 중복되는 값만 보여줍니다. 과거에 job_history가 있는 사원들을 출력하는 것이다. 즉, 과거에 직업이 바뀐 사원들을 나올 수 있습니다. select e.employee_id, j.job_id from   employees e, job_history j where e.employee_id = j.employee_id; 2. union all 사용하기  1) union all : 117건 union all은 중복을 제거하지 않는 합집합입니다. ex) 176번의 사원은 sa_rep가 2번이나 출력됩니다. select employee_id, job_id from   employees union all  select employee_id, job_id from   job_history order by 1, 2; 3.교집합  interset 사용하기 1) interset : 과거에 근무했던 직업과 현재 근무하고 있는 직업이 같은 사람. ...

Database : Basic SQL_Subquery & Join_QUIZ(2)

이미지
Subquery & Join_QUIZ 1. 모든 사원의 평균급여보다 많은 급여를 받고 성(last_name)에 'u'가 포함된 사원과 같은 부서에 근무하는 모든 사원의 사원 번호(employee_id)와 성, 급여를 표시하는 쿼리를 작성합니다. 풀이 (1)모든 사원의 평균급여보다 많은 급여를 받고 / 성(last_name)에 (2)'u'가 포함된 사원과 같은 부서에 근무하는 모든 사원의 사원 번호(employee_id)와 성, 급여를 표시하는 쿼리를 작성합니다. select avg(salary) from employees; (2) select department_id from employees where last_name like '%u%'; 정답 - 1과 2를 사용한 정답 쿼리문장) select employee_id, last_name, salary from   employees where  salary > (select avg(salary) from employees) and    department_id in(select department_id                                      from employees                             ...

Database : Basic SQL문_퀴즈(1)

QUIZ 1. 각 직무 유형 (job_id) 에 대해 최소 , 최대 , 합계 및 평균 급여를 표시하도록 쿼리를 작성합니다 . 정답) select job_id, max(salary), min(salary), sum(salary), avg(salary) from employees group by job_id order by job_id; * jobid 의 경우는 개별행이기 때문에 그룹행으로 묶어주어야 합니다 .--      2. 사원의 총 수와 2002 년 , 2003 년 , 2004 년 및 2005 년에 채용 사원의 수를 표시하는 쿼리를 작성합니다 . 적절한 열 머리글을 지정하십시오 . 정답) select count(*) AS " 총 사원 수 ", sum(decode(to_char(hire_date,'yyyy'), '2002', 1, 0)) "2002 년 ", sum(decode(to_char(hire_date,'yyyy'), '2003', 1, 0)) "2003 년 ", sum(decode(to_char(hire_date,'yyyy'), '2004', 1, 0)) "2004 년 ", sum(decode(to_char(hire_date,'yyyy'), '2005', 1, 0)) "2005 년 " from employees;   * decode ( 조건부 표현식 -where 같은 기능을 보입니다. ). * count 보다는 sum 함수를 더 많이 사용합니다 . * 2001 년도와 같으면 1 이며 그 1 을 더해라 . 즉 2001 년에 입사한 사람 수를 알 수 있습니 다. *  to_char( 입사 일자 , 연...

Database : Basic SQL문_GROUP BY

<GROUP BY 절 사용해보기 > 1. GROUP BY 사용 : 부서별로 평균 급여 구하기   SELECT department_id, avg(salary) from employees group by department_id order by department_id; -- 현업에서는 group by 의 데이터를 그대로 order by 에 넣어 나타냅니다 .     2. having 절 배우기 : 평균 급여가 최소한 7000 이상인 급여를 구하기 - 그룹핑은 WHERE 이 대신 HAVING 이라는 조건문을 사용합니다 . -where 조건에는 절대로 그룹핑 함수를 들어갈 수 없습니다 . -where avg(salary) > 7000 (X)   select department_id, avg(salary) from employees group by department_id having avg(salary) >= 7000 order by department_id;     3. MAX 함수 : 최고 평균 급여를 구하기 SELECT MAX(AVG(SALARY)) FROM employees GROUP BY department_id;

Database : Basic SQL문(3) - JOINS 유형 및 구분

< Database : Basic SQL 문 (3) > 조인을 사용하여 여러 테이블의 데이터 표시 1. JOINS 유형 및 구문 – NATURAL JOIN 절 – USING 절 – ON 절 1) 조인을 사용하여 둘 이상의 테이블에서 데이터를 합칩니다 첫 번째 방법) join + where 문장 해보기 (2개의 테이블을 통해 원하는 col을 볼 수 있습니다.) select  empno, ename, d.deptno, e.deptno, loc, dname from    emp1 e, dept1 d where  e.deptno = d.deptno;  <중요> * t able의 alias를 쓰기 위해서는 from, select, where 절 등 다 alias를 써야합니다. * deptno은 emp1테이블에도 dept1테이블에도 존재하기 때문에 에러가 난다. 여러테이블에 중복된 칼럼을 가진 부분을 선택을 할때는 어느 테이블에서 갔고올 것인지 지정해주어야만 합니다. 그러기 위해 where 라는 문장을 통해 조건을 알려주는 것은 필수입니다. * join 조건 절 : where는 'WHERE Table.col 연산자 Table2.col (여러개의 비교해야하는 칼럼에서 중복되는 것만을 뽑고싶다.) * join은 널 값은 제외하고 비교한다. 두 번째 방법)  natural join 문장 해보기 (natural join은 '='의 기능을 수행합니다.) select  emp1.empno, ename, deptno, loc, dname from    emp1 natural join dept1; * join에 참여하는 칼럼에는 접두어를 쓸 수 없지만 아닌 경우는 emp1.empno처럼 쓸 수 있습니다. *natural join은 두 테이블의 칼럼의 형태(숫자, 날짜, 문자)가 같아야...

Database : Basic SQL문(2)

< Database : Basic SQL문(2) > - TOPIC :   1. select last_name||' '||first_name, upper(last_name||' '||first_name), lower(last_name||' '||first_name), initcap(last_name||' '||first_name) from employees; -- 직원이 이름을 검색할 때 소문자이든지 대문자이던지 상관없이 데이터를 추출하기 위함에 upper,lower,initcap 이 필요하다 .-- 2. select concat(last_name,first_name) from employees; --|| 대신에 쓸 수 있는 것이 concat 이다 . 그러나 사실 concat 은 거의 안쓰임 ... 왜냐하면 딱 2 개의 값만 출력하는 것이라서 . -- 3. select concat(last_name,first_name), substr(concat(last_name,first_name),1,3), substr(concat(last_name,first_name),6,2) from employees; --substr 은 1~3 번째 문자열을 출력 , 6 번째 문자열부터 2 자리만큼 문자열을 출력 -- --QUIZ) 사원의 성이 첫 번째 글자가 s 로 시작하는 것을 찾아라 -- 4. select last_name from employees where last_name like 's%'; 5. select last_name from employees where substr(last_name,1,1) = 'S'; 6. select concat(last_name,first_n...