본문 바로가기

데이터베이스(DB)

[DB/SQL] 4. DML(Data Manipulate Language) - INSERT, SELECT

반응형

 

[목차]

 

1. INSERT

 

2. SELECT

 

1) FROM, WHERE

2) AND, OR, NOT

3) LIKE

4) ORDER BY

5) DISTINCT 

 


DML(Data Manipulate Language), 데이터 조작 언어는 사용자가 데이터베이스에 대해 검색, 등록, 삭제, 갱신 등을 할 수 있도록 하는 데이터베이스 언어이다. 

이전 게시글에 이어서 현재 테이블이 아래와 같이 이루어져 있다고 가정하자. 아직 열의 타입만 정의된 상태이다. 

 

 

 

  1. INSERT

 

INSERT 명령어는 데이터를 테이블에 추가할 때 사용한다. 입력하지 않은 값은 자동으로 NULL값이 입력된다. 

만약 입력하지 않은 열이 NOT NULL 속성을 가지고 있다면 default value를 가지고 있지 않다는 에러가 발생한다. 

 

문법은 다음과 같다. 

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

 

이제 테이블의 맞게 데이터를 추가해보자. 

mysql> INSERT INTO tb (Id, Name, Age, Country) VALUES (1, 'Kim', 23, 'Korea');
mysql> INSERT INTO tb (Name, Age, Country) VALUES ('John', 20, 'USA')

 

테이블의 원소를 출력하면 다음과 같이 나온다. 원소를 보기 위해서는 SELECT 명령어를 이용하는데 바로 뒤에서 자세히 설명하겠다. 

 

 

위의 코드를 보면 두 번째 데이터를 삽입할 때에는 Id 값을 넣지 않았지만 올바르게 추가된 것을 볼 수 있다. 그 이유는, Id 열은 auto_increment 속성 때문에 자동으로 제일 큰 Id값 + 1이 디폴트 값으로 들어가기 때문이다. 

Id가 PRIMARY KEY이므로 반드시 중복되지 않으면서 NULL값을 갖지 않도록 하기 위함이다. 

 

주의해야 할 점은 숫자가 아닌 문자열인 경우에는 항상 따옴표(' ')로 감싸주어야 한다는 것이다. 

만약 열의 수와 맞게 데이터를 입력한다면 (column1, column2,...)는 생략할 수 있다. 

mysql> INSERT INTO tb VALUES(5, 'Mike', 21, 'USA', NULL);

 

  2. SELECT

 

SELECT 명령어는 데이터를 조회할 때 사용한다. 

문법은 다음과 같다.

 

정말 복잡하게 이루어져 있지만, 대괄호 '[ ]'로 이루어진 부분은 생략 가능한 부분이고, 실제로 자주 이용하는 부분이 많지는 않다. 따라서 간단한 예시부터 약간의 응용까지 차례대로 살펴보자. 

 

이전 테이블에서 아래와 같이 데이터를 더 추가한 상황이라고 하자.

 

 

1) 기본 (FROM, WHERE)

 

가장 기본적인 형태는 SELECT select_expr [FROM table_references] [WHERE where_condition]이다. 

 

mysql> SELECT * FROM tb;

 

*은 정규표현식에서와 동일하게 모두(all)를 의미한다. 즉, 모든 열을 조회한다는 의미이므로 테이블 전체를 조회하는 것과 동일하다. 

만약 Age가 21 이상인 데이터 중에서 Id와 Name만 조회하고 싶다면 다음과 같다. 

mysql> SELECT Id, Name FROM tb WHERE Age >= 21;

 

이처럼 조회하고자 하는 열의 이름들을 select_list 자리에 넣어주고, 조건을 추가하고 싶다면 뒤에 WHERE를 이용해주면 된다.

 

 

2) AND, OR, NOT

 

검색하는 조건을 조합할 수도 있다. 검색 조건은 AND, OR, NOT을 이용하여 여러 조건들을 결합한다. 프로그래밍을 조금 해봤다면 쉽게 이해할 수 있을 것이다. 아래 예시를 참고하자.

 

 

 

3) 패턴 매칭(LIKE)

 

문자열인 열을 검색할 때 '패턴 매칭'을 이용할 수 있다. 

LIKE라는 키워드를 이용하며, 입력한 패턴과 일치하거나, 포함하는 행을 뽑아낼 수 있다.

mysql> SELECT * FROM tb WHERE Name LIKE 'Rebro';

 

위와 같이 작성하면, Name열이 'Rebro'와 일치하는 행 전체를 조회한다. 

 

 

'Reb'와는 일치하는 행이 없으므로 Empty set을 반환하는 것을 볼 수 있다. 

정확히 일치하는 행이 아니라 부분적으로 일치하는 행도 뽑아낼 수 있다. 이 경우에는 % 기호를 사용한다. 

% 기호는 해당 부분에는 빈 문자열을 포함한 어떠한 문자열이 와도 무방하다는 뜻이다. 

예를 들어서 '%ab'라고 하면 해당 패턴과 일치하는 문자열로는 'ab', 'ccab', 'qesfsdfab' 등이 다 가능하다. 

 

이걸 조금 더 응용하면, 패턴이 포함되는지만을 따지기 위해서는 '%ab%'와 같이 양쪽에 % 기호를 붙여주면 된다. 

이를 이용한 예시들을 아래에서 참고해보자.

 

 

추가적으로, '%' 문자를 검색하고 싶다면 '\%'으로 % 앞에 역슬래시(\)를 붙여주어야 %를 문자로 인식한다. 

또, 따옴표(')를 문자로 인식하기 위해서는 따옴표 2개('')를 붙여서 작성해야 문자로 인식한다. 그렇지 않으면 문자열의 시작으로 생각해서 에러가 발생한다. 

 

 

4) ORDER BY

 

기본적으로 SELECT를 사용하면 테이블에 들어있는 순서대로 출력된다. 하지만 ORDER BY 명령어를 이용하면 데이터를 오름차순 또는 내림차순으로 정렬하여 출력할 수 있다. 

기본 문법은 다음과 같다. 

mysql> SELECT * FROM table_name ORDER BY column_name [ASC|DESC]

 

ORDER BY는 숫자뿐만 아니라 문자열도 사전 순으로 정렬시켜준다. 디폴트로는 오름차순이다.

 

 

열의 이름을 지정하지 않고 열의 숫자를 넣어줄 수도 있다. 예를 들어 ORDER BY 3이라고 하면 세 번째 열을 기준으로 정렬한다. 

내림차순으로 정렬하고 싶다면 마지막에 'DESC'를 넣어준다. 

 

 

마지막으로, 여러 열을 기준으로도 정렬할 수 있다. ORDER BY 뒤에 정렬하고자 하는 열을 콤마(,)로 차례대로 작성한다.

예를 들어 ORDER BY Age, Country; 이면 Age기준으로 먼저 정렬한 상태에서 Country 기준으로 정렬한다. 

아래의 세 예시들로 이해해보자.

 

 

 

5) DISTINCT

 

DISTINCT는 column명 앞에 붙여주며, SELECT의 결괏값에 중복되는 행이 있는 경우에 중복을 제거해준다. 

 

 

 

PC로 보시는 것을 권장합니다. 

피드백은 언제나 환영입니다. 댓글로 달아주세요 ^-^

반응형