* SQL의 종류?
종류 | 명령어 |
Query | SELECT문의 6가지 절 |
DML (Data Manipulation Language) | INSERT, UPDATE, DELETE, MERGE, SELECT |
DDL (Data Definition Language) | CREATE, ALTER, DROP, TRUNCATE, RENAME |
DCL (Data Control Language) | GRANT, REVOKE |
TCL (Transaction Control Language) | COMMIT, ROLLACK, SAVEPOINT |
DBA영역 : DDL, DCL
구조 :
1) 일부 컬럼 값만 쓸 경우
INSERT INTO 테이블명(컬럼명1, 컬럼명2, 컬럼명3, 컬럼명4, ...)
VALUES (컬럼1의 값, 컬럼2의 값, 컬럼3의 값, 컬럼4의 값, ... );
2) 모든 컬럼에 대한 값을 쓸 경우
INSERT INTO 테이블명
VALUES (테이블 내 컬럼 순서대로 값 하나씩 나열);
(하지만 가독성을 위해서 보통은 모든 데이터를 넣더라도 컬럼명을 1번처럼 나열해줌)
참고 사항:
나열되지 않은 컬럼의 값은 자동으로 null 값이 들어감.
숫자를 입력할 떄는 양쪽에 ' ' 안둘러줘도 되는데 문자와 날짜를 입력할 때는 해줘야 함.
ORACLE
예제. 사원 테이블에 아래의 데이터를 입력하시오.
사원번호 | 9321 |
사원이름 | JANE |
월급 | 4000 |
입사일 | 오늘날짜 |
INSERT INTO emp(empno, ename, sal, hiredate)
VALUES (9321, 'JANE', 4000, TO_DATE('2023/07/06','RRRR/MM/DD'));
입력한 컬럼들 외에는 null값이 들어가있는 것 확인 가능
문제 432. 부서 테이블에 아래의 데이터를 입력하시오.
부서번호 | 50 |
부서명 | DATA TEAM |
부서위치 | SEOUL |
INSERT INTO dept(deptno, dname, loc)
VALUES(50, 'DATA TEAM', 'SEOUL');
* 추가 : ROLLBACK
ROLLBACK;
COMMIT하지 않은 상태에서 ROLLBACK하면 그동안 작업했던 데이터 입력, 수정, 삭제 작업을 취소함.
SELECT * FROM dept;
새로운 데이터를 넣기 전 상태로 돌아온 것을 확인할 수 있음.
* 추가 : NULL값을 입력하는 방법 2가지
1. 명시적 입력
1) NULL입력
INSERT INTO emp(empno, ename, sal)
VALUES (7234, NULL, 4000);
주의: 'NULL'이라고 작은따옴표로 둘러서 기입하면, 말그대로 NULL이라는 문자가 ename에 들어가게됨.
2) 작은따옴표('')
INSERT INTO emp(empno, ename, sal)
VALUES (7456, '', 5000);
결과 :
ename 컬럼의 값 둘 다 null로 들어간 것 확인 가능
2. 암시적 입력
INSERT INTO emp(empno, ename, sal)
VALUES (3933, 'AAA', 5000);
나열하지 않은 컬럼들의 값은 암시적으로 NULL로 처리
문제 434. 이름이 NULL인 사원들의 이름과 월급을 출력하시오.
SELECT ename, sal
FROM emp
WHERE ename IS NULL;
문제 435. 아래와 같이 이름에 공백을 입력하시오.
사원번호 | 4956 |
사원명 | 공백(NULL X) |
월급 | 6000 |
INSERT INTO emp(empno, ename, sal)
VALUES (4956, ' ', 6000);
문제 436. 이름이 NULL이 아닌 사원들의 이름과 월급을 출력하시오.
SELECT ename,sal
FROM emp
WHERE ename IS NOT NULL;
문제 437. 위의 결과를 다시 출력하는데 이름이 공백인 사원도 제외하고 출력하시오.
실수로 공백을 넣는 경우도 있는데, 공백의 갯수가 몇개인지 모를 때 사용할 수 있는 방법
SELECT ename,sal
FROM emp
WHERE TRIM(ename) IS NOT NULL; -- RTRIM으로도 많이 씀
공백을 제거하는 TRIM, LTRIM, RTRIM
다만 좌변의 컬럼을 가공하게 되면(함수 등으로 두르면) SQL검색 성능이 느려짐.
튜닝이 필요함 (인덱스 이용)
정리
1. INSERT하고 나서 COMMIT을 안했으면 바로 ROLLBACK이 가능.
2. INSERT할 때 양쪽에 공백이 포함되지 않게 주의해야 함.
My SQL
문제 438. (MySQL) Mysql의 emp 테이블에 아래의 데이터를 입력하시오.
사원번호 | 5969 |
사원이름 | JACK |
월급 | 3000 |
부서번호 | 20 |
INSERT INTO emp(empno, ename, sal, deptno)
VALUES (5969, 'JACK', 3000, 20);
ROLLBACK을 하고 다시 한 번 emp테이블을 확인해보시오.
롤백이 되지 않고 그대로 남아있는 것을 확인 할 수 있음
∵ MySQL은 자동 커밋기능이 기본값으로 활성화되어있음.
자동 커밋 기능이 켜져있는지 확인하는 방법
SELECT @@AUTOCOMMIT;
1이라고 뜨면 활성화되어 있는 것.
= > MySQL을 사용하기 전에는 반드시 자동 커밋기능이 활성화되어있는지 확인해야 함.
실수로 데이터를 지웠는데 백업이 없으면 복구할 수 없음.
바로 커밋이 되어버리기 때문. 주의!!!!!!
자동 커밋 기능 끄는 방법
SET @@AUTOCOMMIT = FALSE;
다시 조회해보면 0으로 바뀌어, 자동커밋 기능이 꺼진 것을 확인 할 수 있다.
이 이후에 INSERT한 데이터는 ROLLBACK하면 사라짐.
주의사항!!! Default값이 1이라서 다시 껐다 키면 1로 돌아감. (지금 접속한 session에서만 유효)
매번 반복하기 싫다면 다른 방법으로 설정해줘야 함.
session이아니라 database level로 설정하면, 자동 커밋 기능을 아예 끌 수 있음. (DBA 업무)
문제 439. 아래의 데이터를 emp 테이블에 입력하시오.
사원번호 | 5543 |
사원이름 | JONE |
월급 | 3999 |
입사일 | 오늘날짜 |
INSERT INTO emp(empno, ename, sal, hiredate)
VALUES (5543, 'JONE', 3999, date_format('2023-07-06','%Y/%m/%d'));
위와 같이 날짜를 입력해야 db의 날짜 형식에 상관없이 날짜를 기입할 수 있음.
문제 440. 아래의 데이터를 emp 테이블에 입력하시오.
사원번호 | 3945, 3946 |
사원명 | NULL |
월급 | 3000 |
ORACLE에서 통하던 방법 2가지 수행
1) NULL
INSERT INTO emp(empno, ename, sal)
VALUES (3945, NULL, 3000);
2) 작은따옴표 ''
INSERT INTO emp(empno, ename, sal)
VALUES (3946, '', 3000);
맨 밑의 두 행을 통해 입력이 잘 된 것을 확인할 수 있음.
다만, null을 작은따옴표로 입력한 행의 경우 ename 컬럼에 null이라고 뜨지 않음 (= null로 인식하지 않음)
SELECT *
FROM emp
WHERE ename IS NOT NULL;
다음과 같은 방식으로 이름이 null이 아닌 사원들을 출력하라고 했을 때, 사원번호 3946은 출력됨. (= null로 인식하지 않음)
'Oracle DBA > SQL' 카테고리의 다른 글
080 데이터 삭제하기1 (DELETE) (0) | 2023.07.06 |
---|---|
079 데이터 수정하기(UPDATE) (0) | 2023.07.06 |
077 서브 쿼리 사용하기 7(SELECT절의 서브 쿼리) (0) | 2023.07.05 |
076 서브 쿼리 사용하기 6 (FROM절의 서브 쿼리) (0) | 2023.07.05 |
075 서브 쿼리 사용하기 5(HAVING절의 서브 쿼리) (0) | 2023.07.05 |