본문 바로가기
코드이그나이터와 php7와 mysql

검색진열대 MySQL

1. 오토셋 APM 인스톨러 ( apache + php7.2 + mariadb ) 설치 | https://itadventure.tistory.com/93

2. 코드이그나이터 4 ( codeigniter 4 ) 설치 | https://itadventure.tistory.com/95

3. 비주얼 스튜디오 코드 에디터 설치 & 한글 설정 | https://itadventure.tistory.com/96

4. 폴더열기 / 웹페이지 편집(1) | https://itadventure.tistory.com/97

5. 웹페이지 편집(2) | https://itadventure.tistory.com/101

6. 코드이그나이터4의 URL 규칙 | https://itadventure.tistory.com/105

7. php, 네임스페이스 [ namespace ] ?! | https://itadventure.tistory.com/118

8. 코드이그나이터의 네임스페이스, 그리고 모델 | https://itadventure.tistory.com/122

9. 코드이그나이터 뷰의 파라미터 전달 | https://itadventure.tistory.com/147

10. 코드이그나이터 뷰를 나눠 볼까요? | https://itadventure.tistory.com/174

11. MYSQL 이 뭐여? [ 마이에스큐엘은 서류철이다! ] | https://itadventure.tistory.com/175

12. MYSQL 콘솔에 접속해보자! | https://itadventure.tistory.com/178

13. MySql에 넣었다가 꺼냈다가, 뭘? | https://itadventure.tistory.com/265

14. 검색진열대 MYSQL


검색진열대 MySQL

이번 챕터에서는 데이터 베이스에서 사용하는 용어를 소개하면서 시작하도록 하겠습니다.

처음에만 용어가 익숙하지 않아 혼동될 수 있지만, 여러번 접하다 보시면 자연스레 익숙해지실 겁니다 :)

용어

테이블 ( Table )
도서 장부, 회원 장부 등 한 가지 범주에 관련된 내용을 세로방향으로 무한대로 나열되는 표를 구성한 것

데이터베이스 ( Database )
테이블을 주제별로 묶은 것을 데이터베이스라고 하며, 경우에 따라서는 단일 데이터베이스에 모든 테이블을 포함할 수도 있습니다.

컬럼(Column), 필드(Field)
컬럼은 '열'이란 뜻으로 두가지 모두 동일한 의미로 사용됩니다.
데이터 베이스에서 테이블 내의 각 항목을 구분짓는 용도로 사용되는 것을 컬럼 또는 필드라고 합니다.
서적 테이블의 경우 제목, 저자, 페이지수 등의 각 항목을 컬럼 또는 필드라 칭하기도 합니다.

로우(Row), 레코드(Record)
로우는 '행'이란 뜻으로 두가지 모두 동일한 의미로 사용됩니다.
테이블에 기록되는 한줄 한줄이 자료가 바로 로우 또는 레코드에 해당합니다.
그러니까 서적 테이블의 경우 제목, 자자, 페이지수 등의 한줄에 해당하는 모든 자료를 바로 레코드(Record) 또는 로우(Row)라 부릅니다.

문자(Char)
1개의 문자를 의미합니다.
'A', 'B', 'C' 등의 알파벳을 비롯하여, '1', '2', '3' 등의 숫자나 특수기호 '%', '&', 등도 하나의 문자라 부릅니다.

문자열(String)
문자를 모아 놓은 것을 문자열이라 칭합니다.
'ABCDEF', '크레이의 IT탐구' 등등을 의미합니다.

타입(Type)
'저 사람은 내 타입이야~' 라는 말을 들어보셨는지요? 타입은 한국어로 '형태'란 의미인데요. 
데이터베이스에서도 타입(Type)은 필드(Field)의 '형태'을 의미합니다.
정확히는 필드에 어떠어떠한 값을 입력할 수 있는지 형태를 정하는 것인데요.

이를테면 '제목' 필드(Field)의 경우 '이것은 문자열이다'라고 타입(Type)을 정하고,
'페이지수' 필드(Field)의 경우 '이것은 숫자다'라고 타입(Type)을 정하는 것이지요.

단순히 문자열, 숫자 타입을 정하는 것에서 그치는 것이 아니라,
문자열은 문자열에 입력가능한 글자수를 제한하기도 하고,
숫자의 경우 수치의 범위를 정하기도 합니다.

이를 테면 제목은 128글자로 입력을 제한하거나,
숫자는 MYSQL 내부 수치에 따라 -2147483648 ~ 2147483647 ( INT 타입 기준 ) 으로 수치 범위를 제한하는 것이지요.

글자수나 수치의 범위를 제한하는 이유는 바로 속도 때문입니다.


용어 소개는 여기까지 진행하구요.
이제 지난 챕터에 이어 서적 테이블에서 특정 조건에 해당하는 서적을 뽑아내는 방법을 알아보도록 하겠습니다.

만일 독자 분께서 도서관에 가보시면 검색진열대를 보실 수 있을 겁니다.
검색 진열대에서 내가 원하는 단어를 입력하여 책을 검색하기도 하고 때로는 
저자명을 입력하여 책을 검색하기도 하실텐데요.

만일 book 테이블에 10,000 권의 도서 자료가 입력되었다고 가정해볼까요?
그 중에서 제목에 '블렌더'가 들어가 있는 책을 찾으려고 일일히 한줄 한줄씩 본다면 
휴.. 언제나 끝날까요?
하지만 우리의 훌륭한 mysql 은 제목에 '블렌더'라는 단어가 있는 자료만 골라서 보여줄 수 있는 멋진 녀석입니다.

지난번 select 를 기억하시나요?
select 를 통해서 특정 필드만 '선택해서' 보여주는 기능이 있다고 지난 챕터에 보아 오셨지요?
그런데 거기에 특정 조건에 해당하는 행, 곧 레코드(Record)만 골라서 보여줄수도 있습니다.
바로 where 라는 검색조건 규칙을 통해서 말이지요.

다음과 같이 입력해볼까요?

select title, totalpage, author from book
where title like '%블렌더%';

참고로 모두 한줄로 적어도 되지만 2줄로 쓰는게 더 이해가 쉽기 때문에 2줄로 나열하였습니다.

where 는 '어디'라는 뜻의 단어이지만, '~인 경우'의 뜻으로 사용되기도 하는데요.
where 뒤에 나오는 부분을 검색 조건이라고 하여,
조건에 맞는 레코드만 골라서 보여주는 형식입니다.

title like '%블렌더%'는 무슨 의미일까요?
테이블 중에서 title 에 '블렌더'라는 글자가 들어가 있는 행만 보여줘라~ 라는 뜻입니다.

한번 실행해볼까요?

MariaDB [library]> select title, totalpage, author from book

    -> where title like '%블렌더%';

+----------------------+-----------+--------+

| title                | totalpage | author |

+----------------------+-----------+--------+

| 3D 모델링 블렌더 2.8 |       452 | 크레이 |

+----------------------+-----------+--------+

1 row in set (0.006 sec)

그러자 book 테이블 내의 2개의 레코드 중 1개만 나열되었습니다.
2개의 자료중 1개, '오토셋으로 구현하는 코드이그나이터 4'는 전혀 흔적도 보이지 않는군요.
그렇다면 이번에는 반대로 '오토셋'이란 글자가 들어가는 자료만 나열해볼까요?

쿼리문을 아래와 같이 구성해주시면 됩니다.

select title, totalpage, author from book

where title like '%오토셋%';

실행결과는 아래와 같습니다.

MariaDB [library]> select title, totalpage, author from book

    -> where title like '%오토셋%';

+--------------------------------------+-----------+--------+

| title                                | totalpage | author |

+--------------------------------------+-----------+--------+

| 오토셋으로 구현하는 코드이그나이터 4 |       500 | 크레이 |

+--------------------------------------+-----------+--------+

1 row in set (0.000 sec)

지금 자료가 2개밖에 없기 때문에 큰 유용성을 느끼지 못할수도 있지만,
자료가 많은 경우 이러한 검색 기능은 매우 유용하게 사용될 수 있습니다.

where 다음에 사용할 수 있는 검색조건으로 매우 다양한 방법이 있는데요. 몇가지 예를 들어보겠습니다.

where 문자열필드='%검색문자열%'

금방 다루었던 내용입니다. 검색문자열이 문자열필드에 포함된 자료를 검색합니다.

예) where title='오토셋%'

where 문자열필드='검색문자열%'

검색문자열로 시작하는 문자열필드가 포함된 자료를 검색합니다.

예) where title='오토셋%'

where 문자열필드='검색문자열%'

검색문자열로 끝나는 문자열필드가 포함된 자료를 검색합니다.

예) where title='오토셋%'

where 숫자필드=값

숫자필드를 검색조건으로 사용할 때는 따옴표를 붙이지 않습니다.

예) where totalpage=500  // 총페이지수가 500인 자료를 검색합니다.

where 숫자필드<수치
where 숫자필드<=수치

where 숫자필드>수치
where 숫자필드<=수치
where 숫자필드!=수치

주어진 수치보다 작거나(<) 큰(>), 또는 작거나(<=) 같은, 크거나같은(>=), 다른(!=) 숫자필드 조건으로도 검색이 가능합니다.

예) where totalpage<470  // 총페이지수가 470 미만인 자료를 검색합니다.

and 조건

복수 조건이 모두 성립하는 자료만 검색합니다.

예) where totalpage>=200 and totalpage<=700

 -> 총페이지수가 200페이지보다 크고, 700페이지보다 작은 자료만 검색합니다.

 

or 조건

복수조건중 하나라도 성립하는 자료는 모두 검색합니다.

예) where title like '블렌더%' or title like '코드이그나이터%'

 -> title 이 '블렌더' 또는 '코드이그나이터'로 시작하는 자료를 검색합니다.