SQL활용(기본SQL작성-DML)

min seung moon·2021년 2월 5일
0

Oracle

목록 보기
3/23

DML (Data Manipulation Language)

  • 한 개의 테이블에 대해 데이터를 삽입, 수정, 삭제하고 행을 조회

DML 개요

DML(Data Manipulation Language) 의미

  • 데이터를 조작하는 명령어
  • 여기서 조작은 데이터 관점에서 생명 주기를 제어하는 것을 의미

DML 유형

  • 데이터 생성 ( 삽입 형태로 신규 데이터를 테이블에 저장 )
INSERT INTO 테이블이름 (열이름1, 열이름2, 열이름3, ...) VALUES(데이터1, 데이터2, 데이터3, ....);

insert into userTBL(userID, userName, birtYear, addr, mobile1, mobile2, height, mDate) values('MMS', '문민승', 1997, '대구', '010', '12341234', 168, '2008-8-8');

INSERT INTO 테이블이름 VALUES(데이터1, 데이터2, 데이터3 ....);

INSERT INTO userTBL VALUES('MMS', '문민승', 1997, '대구', '010', '12341234', 168, '2008-8-8');
  • 데이터 조회 ( 테이블의 내용을 조회 )
SELECT * FROM 테이블명;
SELECT 열이름1, 열이름2, ... FROM 테이블명;

SELECT * FROM usertbl;
  • 데이터 변경 ( 테이블 내용을 변경 )
UPDATE 테이블명 SET 열이름1 = 변경할 값, 열이름2 = 변경할 값 WHERE 조건;

UPDATE userTBL SET addr = '남구' where userName = '문민승';
  • 데이터 삭제
DELETE FROM 테이블명 WHERE 조건;

DELETE FROM userTBL where userName = '문민승';

1. 데이터 삽입(INSERT)

  • 데이터를 삽입하기 위한 명령어
  • 데이터 삽입 결과로 하나의 레코드가 추가 (삽입에 사용되는 정보는 하나의 레코드를 충분히 묘사해야 한다)
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
INSERT INTO table_name VALUES (value1, value2, ...);

2. 데이터 조회(SELECT)

  • 데이터의 내용을 조회할 때 사용
  • 다른 DML 명령어와 같이 조합하여 사용되며 가장 많이 사용되는 명령어
  • OPTION
    • ALL : 중복 포함한 조회 결과 출력
    • DISTINCT : 중복 제거한 조회 결과 출력
  • columns
    • 컬럼명 목록 : SELECT 통해 조회할 컬럼명 지정
    • 와이드카드 : 모두 또는 전체를 의미
SELECT [OPTION] columns FROM table [WHERE 절];

3. 데이터 수정(UPDATE)

  • 데이터를 수정할 때 사용
  • WHERE 절을 통해 어떤 조건이 만족할 경우에만 특정 컬럼의 값을 수정하는 용도로 많이 사용
UPDATE table SET column1 = value1, colum2 = value2, ... [WHERE 절];

4. 데이터 수정(UPDATE)

  • 레코드를 삭제할 때 사용하는 명령문
  • WHERE 절 없이 DELTE를 사용하는 경우, 테이블 전체가 한 번에 삭제되는 위험이 있다
DELETE FROM table [WHERE 절];

DML 활용

1. 테이블 설계서를 준비

  • 수행에 사용할 테이블을 생성
    • DML을 이용하여, 데이터를 조작하기 위해 우선 다음과 같은 테이블을 생성
CREATE TABLE salaries ( -- 급여 테이블
	emp_no		INT		NOT NULL,
    salary		INT		NOT NULL,
    from_date	DATE	NOT NULL,
    to_date		DATE,
    FOREIGN KEY (enp_no) REFERENCES employees (UID) ON DELETE CASCADE,
    PRIMARY KEY (enp_no, from_date)
);
  • 생성문에서 DML을 통해 데이터를 조작할 때 유의해야 할 점은 컬럼 이름과 데이터 타입이다!
  • 생성문에서 제약 조건의 확인을 통해 데이터 삽입이나 삭제 과정 제약조건을 활용할 수 있다

2. 데이터를 삽입

    1. 단일 레코드를 삽입
-- do_date는 NULL 허용이고 나머지 컬럼은 NOT NULL 이다
-- 직원 번호가 1002인 레코드가 employees에 미리 존재해야 명령문이 정상 독작한다
-- 이유는 테이블 생성 과정에서 왜래키에 대한 제약 조건 때문이다
INSERT INTO 'salaries' (emp_no, salary, from_date) VALUES (1002, 4000000, '2017-07-01');
  • INSERT INTO table_name VALUES (value1, value2, ...)형태로 추가
-- 위에서는 컬럼을 지정을 해줬기 때문에 문제가 없지만 상대적으로 입력할 때는 오류가 난다
INSERT INTO 'salaries' Values (1002, 4000000, '2017-07-01');
-- 컬럼에 맞춰서 값을 입력을 해줘야 한다
-- 하지만 테이블 생성시 to_date에 DEFAULT 값을 지정하면 오류가 발생하지 않는다

INSERT INTO 'salaries' VALUES (1002, 4000000, '2017-07-01', NULL);
    1. 복수 레코드를 삽입
INSERT INTO 'salaries' (emp_no, salary, from_date) VALUES 
(1002, 2000000, '2012-07-01', '2013-06-30'),
(1002, 3000000, '2013-07-01', '2014-06-30'),
(1002, 4000000, '2014-07-01', '2015-06-30');
  • INSERT INTO table_name VALUES (value1, value2, ...)형태로 추가
INSERT INTO 'salaries' VALUES
(1002, 2000000, '2012-07-01', '2013-06-30'),
(1002, 3000000, '2013-07-01', '2014-06-30'),
(1002, 4000000, '2014-07-01', '2015-06-30');
  • INSERT 명령문 오류 가능성을 조사
    • INSERT 명령문은 테이블 구조에 민감
    • 테이블 생성시의 문장의 내용을 보고 필수 값과 순서를 조사해야 한다
    • 데이터 타입이 틀린 값이 입력되자 않도록 주의

3. 데이터를 조회하고 수정

    1. 데이터를 조회
-- 모든 컬럼에 대해 아무런 조건 없이 검색하는 기본적인 조회 명령문
-- 일부 데이터만 조회하기 위해서는 조건절(WHERE 절)이 필요
-- 컬럼 가운데 일부만을 보고 싶은 경우 와일드카드(*) 대신에 특정 컬럼 명시
SELECT * FROM 'salaries';
  • 직원 번호가 1001인 사원 급여 테이블 정보 보기
SELECT * FROM 'salaries' WHERE emp_no = 1001;
  • 직원 번호 1001번 직원의 급여 테이블 가운데 직원 번호화 급여만들 보고 싶은 경우
SELECT emp_no, salary FROM 'salaries' WHERE emp_no = 1001;
  • 조건절에 가장 최근의 날짜를 구하는 방법 ( Sub Query, 집계 함수 )
SELECT * FROM salaries WHERE from_date = ( SELECT MAX(from_date) FROM salaries);
  • 조건절에 가장 최근의 날짜를 구하는 방법 ( ORDER BY, LIMIT )
-- 보통 SELECT를 이용한 조회는 복수 테이블을 대상으로 하는 경우가 많다
SELECT * FROM salaries ORDER BY from_date DESC LIMIT 1; --M*-SQL 경우
    1. 데이터를 수정
    • Condition : 특정 조건 지정
    • What : 특정 대상 - 컬럼 지정
    • How : 값 - 값 지정
-- Condition은 WHERE 절
-- What, How는 SET 절
UPDATE salaries SET salary = 1100000 
WHERE emp_no = 1001 and from_date = '2014-07-01';

4. 데이터를 삭제

  • 1데이터를 삭제
    • 종속적 개념을 가지는 급여 테이블(salaries)의 특정 항목을 지우는 것은 용이
DELETE FROM salaries WHERE emp_no = 1001;
    1. 데이터 삭제 오류가 발생한 이유를 조사
DELETE FROM emplouees WHERE UID = 1001; -- 오류 발생
  • 테이블 생성시 지정한 왜래키 제약 조건 때문에 오류 발생
  • (무결성 보호 방법) 즉 급여 테이블에 1001번의 데이터가 존재할 경우, 직원 테이블에서 1001번의 데이터를 삭제 할수 없도록 한것이다

수행 TIP

  • 데이터베이스는 조직의 모든 자료가 통합 저장되어 공유하는 형태로 운영되는 데이터
    • 데이터를 사용하려면 약속을 정하고 지키는 것이 중요
    • 조직의 데이터 아키텍처 수립이 필요하며, 표준화 작업이 필요
    • 제한된 자원을 효율적으로 공유하기 위한 필수 사항
  • DML 활용의 예시
    • 'SELECT *' 형태의 명령문을 제시하고 있지만 이러한 사용 방법은 자제해야 한다
    • 모든 컬럼을 조회 대상으로 하는 '*'의 사용은 불필요한 컬럼 정보를 꺼내오는 시간과 이를 전달하는 네트워크상의 부하를 유발
    • 성능을 위해서 사용 자제가 권고
  • INSER 문
    • INSERT INTO 'salaries' VALUES (1002, 2000000, '2012-07-01', '2013-06-30') ... 형태의 명령문은 대상 컬럼을 지정하지 않고 입력 가능
    • 해당 테이블의 컬럼이 추가 또는 삭제되어 구조가 변경되는 경우, 컬럼을 지정하지 않는 INSERT문은 더 이상 유효하지 않게 된다
    • 컬럼을 지정하지 않는 INSERT 문의 사용 방법 역시 자제 권고
profile
아직까지는 코린이!

0개의 댓글