지금까지 우리가 만든 데이터베이스에 테이블을 생성하고 데이터를 추가하는 것까지 성공했습니다. 그럼 이제 추가한 데이터를 가져올수 있어야겠죠. 데이터를 가져오기 위해 데이터베이스에서는 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 열에 대한 정보만 가져옵니다.
이제 우리는 필요한 속성에 대한 정보를 가져올 수 있습니다. 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 조건절은 다양한 연산자와 함께 사용됩니다. 가장 대표적으로는 AND와 OR가 있습니다.
그리고 아래와 같은 비교연산자가 사용됩니다.
연산자 종류 | 의미 |
---|---|
= | 같다 |
<> | 같지 않다 |
>= | 같거나 크다 |
> | 보다 크다 |
< = | 같거나 작다 |
< | 보다 작다 |
이를 응용해서 나이가 30 이상인 남성의 정보만 가져와봅시다.
SELECT * FROM users WHERE age >= 30 AND sex='M';
NULL 값은 직접 사용할 수가 없습니다. 하지만 키워드를 써서 NULL을 찾을 수 있습니다.
INSERT INTO users VALUES ('연지창', NULL, 'M', 88);
email 이 없는 88세 연지창 할아버지의 데이터를 추가했습니다. email 이 NULL인 데이터를 가져오려면 IS NULL이라는 키워드를 사용해야합니다.
SELECT * FROM users WHERE email IS NULL;
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 등의 키워드가 있으니 한번 찾아보시길!