DML - data manipluation language 데이터 조작언어
insert into 테이블명 ( 컬럼이름1, 컬럼이름2,컬럼이름3,,,)
→ 만약 컬럼이름을 기술하지 않았다면 원래있던 순서에 맞게 작성해야한다..
values ( 컬럼값1, 컬럼값2, 컬럼값3 ,,,,,,,,,,,,) —→위에 썼던 컬럼 순서대로 작성
예제 사원테이블에 데이터를 입력하는데 사원번호는 2812 사원이름은 JACK 월급은 3500, 입사일은 2021.11.16 직업은 ANALYST
insert into emp(empno, ename, sal, hiredate,job)
values (2812, 'JACK', 3500, to_date('2021/11/16', 'RRRR/MM/DD'),'ANALYST');
숫자는 그냥써도 되지만
문자와 날짜 는 '' 싱글쿼테이션마크 둘러주고,
날짜는 to_date 함수를 이용하여 정확하게 작성한다 (어느나라에서도 insert 문의 날짜데이터를 잘 입력할 수 있도록 하기 위함)
문제 382 empno 4832 ,ename jane, sal 6800, deptno 20 으로 데이터 입력하시오
insert into emp( empno, ename, sal, deptno)
values (4832, 'JANE', 6800, 20);
문제 383 DEPT 테이블에 DEPTNO 50, DNAME TRANSPORT , LOC SEOUL 데이터입력 .
insert into dept (deptno, dname, loc)
values (50, 'TRANSPORT', 'SEOUL');
문제 384
insert into emp (empno,ename, hiredate)
values (8392,'JAMES',sysdate);
입사일에 sysdate 를 넣어봤다.
\(결론만 말하자면 sysdate 를 입력하게 되면 시분초 까지 입력 되기때문에 나중에 검색할때 결과값이 안나오게 된다. )
문제 385 오늘 입사한 사원의 이름과입사일 출력
select ename, hiredate
from emp where hiredate = sysdate;
값이 나오지 않는다
이유는 sysdate 는 날짜뿐만 아니라 시분초까지 입력이 되기때문에..
아까전에 입력한 sysdate 의 시분초와, 지금 찾으려는 sysdate 의 값이 서로 같지 않아서
문제
insert into emp (empno,ename, hiredate,job)
values (8392,'JAMES',to_date('2021/11/16','RRRR/MM/DD'),'ANALYST');
날짜형식을 입력할때는 위와같이 to_date 를 이용하여 입력해야한다
번외로 SYSDATE 관련된 설명
insert in emp(empno, ename, hiredate)
values(1111, 'james', to_date(sysdate, 'RRRR/MM/DD'));
위와같이 SYSDATE에 to_date 를 중첩하여 입력하면 시분초는 00시 00분 00초로 바뀌어서 입력 된다.
select ename, hiredate
from emp
where hiredate = to_date('2021/11/17','RRRR/MM/DD');
위의 SYSDATE를 사용해 INSERT 한 문장을 검색할때에는 WHERE 절에 위와같이 입력 하면 된다.
테이블에 NULL 을 입력하는 방법
1. 암시적으로 NULL 입력
insert into 테이블 (컬럼명1, 컬럼명2, 컬럼명 3 , ....................)
values (데이터 1, 데이터2, 데이처3, ...................)
→ 컬럼명1,2,3 외에 다른 컬럼에는 모두 null 로 데이터가 입력 된다.
2. 명시적으로 NULL 입력
2.1 null
insert into emp(empno, ename, sal)
values (3456, null, 3200);
2.2 '' 싱글 쿼테이션 마크 2개를 붙여서 입력
insert into emp(empno, ename, sal)
values (2345, '', 3500)
→ ' ' 이런식으로 싱글 쿼테이션 안에 공백이 있다면 null 이 아닌 공백으로 데이터가 출력된다.
그러나, 도스창 에서는 '' 과 ' ' , 공백이 구분되지 않고 null 로 출력된다.
문제 이름이 null 이 아닌 사원들의 이름,월급 출력 (이름의 공백도 나오지 않도록)
select ename , sal
from emp
where trim(ename) is not null ;
웬만하면 where 절에 ename 을 가공하지 않는게 좋다.
하지만 밑의 SQL 식보다는 정확한 값을 주므로 이 SQL 을 사용하는게 좋다.
select ename , sal
from emp
where ename is not null
and ename not like '% %';
이렇게하면 가공되지않고 출력이되지만, 만약 이름사이에 공백이 있는 이름이 있다면 그것도 제외 된 채 출력 될 가능성이 높다.
select ename, sal
from emp
where ename != ' ';
이렇게 되면 where 절에 있는 공백에 수가 맞는 사람들만 제껴져서 나오기 때문에 맞지 않는 SQL 이다.
'Oracle > SQL' 카테고리의 다른 글
SQL [DML문] Delete 데이터삭제 (0) | 2021.11.28 |
---|---|
SQL [DML문] Update 데이터 수정 (0) | 2021.11.28 |
SQL Sub Query Select 절 = Scalar 서브쿼리 (0) | 2021.11.28 |
SQL Sub Query From 절 In Line View (0) | 2021.11.28 |
SQL Sub Query Having 절 서브쿼리 (0) | 2021.11.28 |