티스토리 뷰

mysql

mysql 조건 검색 WHERE(AND, OR , NOT ,LIKE)

안양사람 2020. 6. 23. 17:28
728x90
SMALL

오늘은 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)

728x90
LIST

'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
댓글
공지사항