티스토리 뷰
오늘은 mysql에서 꼭 필요한 조건문에 대해 알아보겠습니다. 이 글만 보면 검색기능을 만들수 있습니다.
먼저 데이터베이스와 테이블을 생성하겠습니다. 코드를 읽고 복사 붙여넣기 하시면 됩니다.
CREATE DATABASE ex;
USE ex
CREATE TABLE category(
id INT NOT NULL auto_increment,
name VARCHAR(30) NOT NULL ,
PRIMARY KEY(id)
);
CREATE TABLE post(
id INT NOT NULL auto_increment,
title VARCHAR(30) NOT NULL,
category_id INT NOT NULL,
content TEXT NULL,
PRIMARY KEY(id)
);
INSERT INTO category(name) VALUES ('한식');
INSERT INTO category(name) VALUES ('중식');
INSERT INTO category(name) VALUES ('일식');
INSERT INTO post(title, category_id, content) VALUES ('김치찌개', 1, '김치찌개는 ...');
INSERT INTO post(title, category_id, content) VALUES ('된장찌개', 1, '된장찌개는 ...');
INSERT INTO post(title, category_id, content) VALUES ('짜장면', 2, '짜장면은 ...');
INSERT INTO post(title, category_id, content) VALUES ('짬뽕', 2, '짬뽕은 ...');
INSERT INTO post(title, category_id, content) VALUES ('스테이크', 4, '스테이크는 ...');
1. AND
WHERE AND는 두 개의 조건이 모두 만족되는 경우만 출력합니다.
mysql> select * from post where category_id=1 AND title='김치찌개';
+----+--------------+-------------+---------------------+
| id | title | category_id | content |
+----+--------------+-------------+---------------------+
| 1 | 김치찌개 | 1 | 김치찌개는 ... |
+----+--------------+-------------+---------------------+
1 row in set (0.00 sec)
mysql> select * from post where category_id=1 AND title='김치찌개2';
Empty set (0.00 sec)
2. OR
WHERE OR은 둘 중 하나의 조건만 만족하면 출력합니다.
mysql> select * from post where category_id=1 OR category_id=2;
+----+--------------+-------------+---------------------+
| id | title | category_id | content |
+----+--------------+-------------+---------------------+
| 1 | 김치찌개 | 1 | 김치찌개는 ... |
| 2 | 된장찌개 | 1 | 된장찌개는 ... |
| 3 | 짜장면 | 2 | 짜장면은 ... |
| 4 | 짬뽕 | 2 | 짬뽕은 ... |
+----+--------------+-------------+---------------------+
4 rows in set (0.00 sec)
3. NOT
not은 조건에 해당하지 않은 행을 제외하고 출력합니다.
mysql> select * from post where not category_id=1;
+----+--------------+-------------+---------------------+
| id | title | category_id | content |
+----+--------------+-------------+---------------------+
| 3 | 짜장면 | 2 | 짜장면은 ... |
| 4 | 짬뽕 | 2 | 짬뽕은 ... |
| 5 | 스테이크 | 4 | 스테이크는 ... |
+----+--------------+-------------+---------------------+
3 rows in set (0.00 sec)
4. LIKE
where like는 단어를 포함한 행을 출력한다.
참고로 %가 뒤에 있으면 특정 문자로 시작되는 데이터를 검색하고
%가 앞에 있으면 특정 문자로 끝나는 데이터를 검색한다.
그래서 만약 일반적인 웹사이트의 검색기능을 넣고 싶다면 %를 앞뒤로 써줘야 한다.
mysql> select * from post where title like '찌개%';
Empty set (0.00 sec)
mysql> select * from post where title like '%찌개';
+----+--------------+-------------+---------------------+
| id | title | category_id | content |
+----+--------------+-------------+---------------------+
| 1 | 김치찌개 | 1 | 김치찌개는 ... |
| 2 | 된장찌개 | 1 | 된장찌개는 ... |
+----+--------------+-------------+---------------------+
2 rows in set (0.00 sec)
mysql> select * from post where title like '찌개%';
Empty set (0.00 sec)
mysql> select * from post where title like '%찌개%';
+----+--------------+-------------+---------------------+
| id | title | category_id | content |
+----+--------------+-------------+---------------------+
| 1 | 김치찌개 | 1 | 김치찌개는 ... |
| 2 | 된장찌개 | 1 | 된장찌개는 ... |
+----+--------------+-------------+---------------------+
2 rows in set (0.00 sec)
예제
이제 위에 4가지를 합친 예제를 보여드리겠습니다.
and와 like
mysql> select * from post where title like '%찌개%' and content like '%김치%';
+----+--------------+-------------+---------------------+
| id | title | category_id | content |
+----+--------------+-------------+---------------------+
| 1 | 김치찌개 | 1 | 김치찌개는 ... |
+----+--------------+-------------+---------------------+
1 row in set (0.00 sec)
or과 like
mysql> select * from post where title like '%찌개%' or content like '%김치%';
+----+--------------+-------------+---------------------+
| id | title | category_id | content |
+----+--------------+-------------+---------------------+
| 1 | 김치찌개 | 1 | 김치찌개는 ... |
| 2 | 된장찌개 | 1 | 된장찌개는 ... |
+----+--------------+-------------+---------------------+
2 rows in set (0.00 sec)
and, or, not, like 모두사용
mysql> select * from post where (title like '%찌개%' or content like '%김치%') and not id=1;
+----+--------------+-------------+---------------------+
| id | title | category_id | content |
+----+--------------+-------------+---------------------+
| 2 | 된장찌개 | 1 | 된장찌개는 ... |
+----+--------------+-------------+---------------------+
1 row in set (0.00 sec)
'mysql' 카테고리의 다른 글
mysql 정규화2 (0) | 2020.07.23 |
---|---|
mysql 정규화1(이상현상, 함수적 종속성) (0) | 2020.07.23 |
mysql 비밀번호변경, 시간설정, 한글설정(aws ec2 ubuntu) (0) | 2020.06.21 |
mysql join (0) | 2020.05.24 |
mysql 기본 쿼리문 (0) | 2020.05.15 |