지금까지 우리가 만든 데이터베이스에 테이블을 생성하고 데이터를 추가하는 것까지 성공했습니다. 그럼 이제 추가한 데이터를 가져올수 있어야겠죠. 데이터를 가져오기 위해 데이터베이스에서는 SELECT 문을 사용합니다. 데이터베이스에서는 데이터를 추가하는 것보다 가져올 일이 더 많습니다. 그만큼 SELECT 문은 아주 중요한 역할을 합니다.

SELECT 기본

Select 문의 기본은 ''어디서(어떤 테이블) 무엇을(데이터) 가지고 온다'' 라고 적습니다. SQL 문으로 적으면 다음과 같습니다.

SELECT 열명 FROM 테이블명

열명에 '*'을 사용하면 테이블명에서 지정한 테이블의 전체 열을 지정할 수도 있고, 임의의 열을 복수로 지정하는 것도 가능합니다.

복습차원에서 테이블을 만들고 데이터를 넣어봅시다.

CREATE DATABASE my_service;
USE my_service;
CREATE TABLE users
(
    name VARCHAR(64),
  email VARCHAR(64),
  sex CHAR(1),
  age INT
);
INSERT INTO users VALUES ('연지민', 'gmini.y@gmail.com', 'M', 30);

my_service 라는 database를 만들고 user 테이블을 만들었습니다. 이 테이블은 name, email, sex라는 속성을 갖고 sex는 'M' 혹은 'F' 로 표시할거라서 고정길이 1 byte를 갖는 CHAR(1)이라는 데이터타입을 설정해주었습니다. 그리고 모든 열에 대해 값을 넣어줄 것이기 때문에 INSERT문에서 '열 리스트'부분은 생략하고 값들을 적어주었습니다. 그럼 이제 우리가 넣은 데이터를 SELECT 문을 이용해가져와봅시다.

SELECT * FROM users; // 모든 열에 대한 정보를 가져옵니다.
SELECT name, email FROM users; // name과 email 열에 대한 정보만 가져옵니다.

WHERE 조건

이제 우리는 필요한 속성에 대한 정보를 가져올 수 있습니다. SQL에서는 WHERE를 통해 원하는 속성 뿐만 아니라 우리가 원하는 조건에 맞는 레코드만 가져올 수도 있습니다. 우리가 만든 테이블에 데이터를 더 추가해봅시다.

INSERT INTO users VALUES ('연지강', 'gmini1.y@gmail.com', 'M', 40);
INSERT INTO users VALUES ('연지순', 'gmini2.y@gmail.com', 'F', 23);
INSERT INTO users VALUES ('연지산', 'gmini3.y@gmail.com', 'M', 38);
INSERT INTO users VALUES ('연지희', 'gmini4.y@gmail.com', 'F', 55);
INSERT INTO users VALUES ('연지문', 'gmini5.y@gmail.com', 'M', 60);

user 테이블에는 2명의 여성과 4명의 남성이 있습니다. 이중에 우리는 여성의 데이터만 가져오고 싶을때 WHERE 조건절을 사용하게 됩니다.

SELECT name, email, age FROM users WHERE sex='F';

sex 속성이 'F'인 데이터의 name, email, age 열을 가져오는 명령입니다.

WHERE 조건에 사용되는 연산자

WHERE 조건절은 다양한 연산자와 함께 사용됩니다. 가장 대표적으로는 AND와 OR가 있습니다.

그리고 아래와 같은 비교연산자가 사용됩니다.

연산자 종류 의미
= 같다
<> 같지 않다
>= 같거나 크다
> 보다 크다
< = 같거나 작다
< 보다 작다

이를 응용해서 나이가 30 이상인 남성의 정보만 가져와봅시다.

SELECT * FROM users WHERE age >= 30 AND sex='M';

NULL 찾기

NULL 값은 직접 사용할 수가 없습니다. 하지만 키워드를 써서 NULL을 찾을 수 있습니다.

INSERT INTO users VALUES ('연지창', NULL, 'M', 88);

email 이 없는 88세 연지창 할아버지의 데이터를 추가했습니다. email 이 NULL인 데이터를 가져오려면 IS NULL이라는 키워드를 사용해야합니다.

SELECT * FROM users WHERE email IS NULL;

와일드카드 LIKE

LIKE라는 키워드와 와일드카드 문자를 같이 사용하면 문자의 일부만으로 일치하는 결과를 가져올 수 있습니다.

INSERT INTO users VALUES ('연지몽', 'believe@naver.com', 'F', 30);

Naver email 을 사용하는 유저를 등록했습니다. naver 이메일인 데이터는 LIKE를 사용해서 다음과 같이 가져올 수 있습니다.

SELECT * FROM users WHERE email LIKE '%@naver.com';

퍼센트 기호는 다수의 불특정 문자를 의미하고 '_'는 하나의 불특정 문자를 의미합니다.

기타 등등

이 외에 BEETWEN, IN, NOT 등의 키워드가 있으니 한번 찾아보시길!