:meta-keywords: cubrid any, cubrid some, cubrid all, cubrid between, cubrid exists, cubrid in, cubrid like, cubrid case clause :meta-description: A comparison expression is an expression that is included in the WHERE clause of the SELECT, UPDATE and DELETE statements, and in the HAVING clause of the SELECT statement. *********** ë¹„êµ ì—°ì‚°ì‹ *********** .. _basic-cond-expr: 단순 ë¹„êµ ì¡°ê±´ì‹ ================ ë¹„êµ ì¡°ê±´ì‹ì€ **SELECT**, **UPDATE**, **DELETE** ë¬¸ì˜ **WHERE** ì ˆê³¼ **SELECT** ë¬¸ì˜ **HAVING** ì ˆì— í¬í•¨ë˜ëŠ” 표현ì‹ìœ¼ë¡œì„œ, ê²°í•©ë˜ëŠ” ì—°ì‚°ìžì˜ ì¢…ë¥˜ì— ë”°ë¼ ë‹¨ìˆœ ë¹„êµ ì¡°ê±´ì‹, **ANY** / **SOME** / **ALL** ì¡°ê±´ì‹, **BETWEEN** ì¡°ê±´ì‹, **EXISTS** ì¡°ê±´ì‹, **IN** / **NOT IN** ì¡°ê±´ì‹, **LIKE** ì¡°ê±´ì‹, **IS NULL** ì¡°ê±´ì‹ì´ 있다. ë¨¼ì €, 단순 ë¹„êµ ì¡°ê±´ì‹ì€ ë‘ ê°œì˜ ë¹„êµ ê°€ëŠ¥í•œ ë°ì´í„° ê°’ì„ ë¹„êµí•œë‹¤. 피연산ìžë¡œ ì¼ë°˜ ì—°ì‚°ì‹(expression) ë˜ëŠ” 부질ì˜(sub-query)ê°€ ì§€ì •ë˜ë©°, í”¼ì—°ì‚°ìž ì¤‘ ì–´ëŠ í•˜ë‚˜ê°€ **NULL** ì´ë©´ í•ìƒ **NULL** ì„ ë°˜í™˜í•œë‹¤. 단순 ë¹„êµ ì¡°ê±´ì‹ì—서 ì‚¬ìš©í• ìˆ˜ 있는 ì—°ì‚°ìžëŠ” ì•„ëž˜ì˜ í‘œì™€ 같으며, 보다 ìžì„¸í•œ ë‚´ìš©ì€ :doc:`/sql/function/comparison_op` 를 ì°¸ê³ í•œë‹¤. **단순 ë¹„êµ ì¡°ê±´ì‹ì—서 ì‚¬ìš©í• ìˆ˜ 있는 ì—°ì‚°ìž** +-------------+-------------------------------------------------------+---------+----------+ | ë¹„êµ ì—°ì‚°ìž | 설명 | ì¡°ê±´ì‹ | 리턴 ê°’ | +=============+=======================================================+=========+==========+ | **=** | 왼쪽 ë° ì˜¤ë¥¸ìª½ 피연산ìžì˜ ê°’ì´ ê°™ë‹¤. | 1=2 | 0 | +-------------+-------------------------------------------------------+---------+----------+ | **<>** | 왼쪽 ë° ì˜¤ë¥¸ìª½ 피연산ìžì˜ ê°’ì´ ë‹¤ë¥´ë‹¤. | 1<>2 | 1 | | , | | | | | **!=** | | | | +-------------+-------------------------------------------------------+---------+----------+ | **>** | 왼쪽 피연산ìžëŠ” 오른쪽 피연산ìžë³´ë‹¤ ê°’ì´ í¬ë‹¤. | 1>2 | 0 | +-------------+-------------------------------------------------------+---------+----------+ | **<** | 왼쪽 피연산ìžëŠ” 오른쪽 피연산ìžë³´ë‹¤ ê°’ì´ ìž‘ë‹¤. | 1<2 | 1 | +-------------+-------------------------------------------------------+---------+----------+ | **>=** | 왼쪽 피연산ìžëŠ” 오른쪽 피연산ìžë³´ë‹¤ ê°’ì´ í¬ê±°ë‚˜ 같다. | 1>=2 | 0 | +-------------+-------------------------------------------------------+---------+----------+ | **<=** | 왼쪽 피연산ìžëŠ” 오른쪽 피연산ìžë³´ë‹¤ ê°’ì´ ìž‘ê±°ë‚˜ 같다. | 1<=2 | 1 | +-------------+-------------------------------------------------------+---------+----------+ .. _any-some-all-expr: ANY/SOME/ALL 수량어와 그룹 ì¡°ê±´ì‹ ================================= **ANY** / **SOME** / **ALL** ê³¼ ê°™ì€ ìˆ˜ëŸ‰ì–´ë¥¼ í¬í•¨í•˜ëŠ” 그룹 ì¡°ê±´ì‹ì€ í•˜ë‚˜ì˜ ë°ì´í„° ê°’ê³¼ ë¦¬ìŠ¤íŠ¸ì— í¬í•¨ëœ ê°’ë“¤ì˜ ì¼ë¶€ ë˜ëŠ” ëª¨ë“ ê°’ì— ëŒ€í•´ì„œ ë¹„êµ ì—°ì‚°ì„ ìˆ˜í–‰í•œë‹¤. 즉, **ANY** ë˜ëŠ” **SOME** ì´ í¬í•¨ëœ 그룹 ì¡°ê±´ì‹ì€, ì™¼ìª½ì˜ ë°ì´í„° ê°’ì´ ì˜¤ë¥¸ìª½ 피연산ìžë¡œ ì§€ì •ëœ ë¦¬ìŠ¤íŠ¸ ë‚´ì˜ ê°’ 중 최소한 í•˜ë‚˜ì— ëŒ€í•´ 단순 ë¹„êµ ì—°ì‚°ìžë¥¼ ë§Œì¡±í• ë•Œ **TRUE** 를 반환한다. 한편, **ALL** ì´ í¬í•¨ëœ 그룹 ì¡°ê±´ì‹ì˜ 경우, 왼쪽 ë°ì´í„° ê°’ì´ ì˜¤ë¥¸ìª½ 리스트 ë‚´ì˜ ëª¨ë“ ê°’ë“¤ì— ëŒ€í•´ 단순 ë¹„êµ ì—°ì‚°ìžë¥¼ ë§Œì¡±í• ë•Œ **TRUE** 를 반환한다. 만약, **ANY** ë˜ëŠ” **SOME** ì„ í¬í•¨í•˜ëŠ” 그룹 ì¡°ê±´ì‹ì—서 **NULL** ì„ ëŒ€ìƒìœ¼ë¡œ ë¹„êµ ì—°ì‚°ì„ ìˆ˜í–‰í•˜ë©´ 그룹 ì¡°ê±´ì‹ì˜ 결과로 **UNKNOWN** ë˜ëŠ” **TRUE** 를 ë°˜í™˜í•˜ê³ , **ALL** ì„ í¬í•¨í•˜ëŠ” 그룹 ì¡°ê±´ì‹ì—서 **NULL** ì„ ëŒ€ìƒìœ¼ë¡œ ë¹„êµ ì—°ì‚°ì„ ìˆ˜í–‰í•˜ë©´ **UNKNOWN** ë˜ëŠ” **FALSE** 를 반환한다. :: expression comp_op SOME expression expression comp_op ANY expression expression comp_op ALL expression * *comp_op* : ë¹„êµ ì—°ì‚°ìž **>**, **<**, **=**, **>=**, **<=** ê°€ 들어갈 수 있다. * *expression* (왼쪽) : ë‹¨ì¼ ê°’ì„ ê°€ì§€ëŠ” 칼럼, 경로 표현ì‹(예: *tbl_name.col_name*), ìƒìˆ˜ ê°’ ë˜ëŠ” ë‹¨ì¼ ê°’ì„ ìƒì„±í•˜ëŠ” ì‚°ìˆ í•¨ìˆ˜ê°€ ë 수 있다. * *expression* (오른쪽) : 칼럼 ì´ë¦„, 경로 표현ì‹, ìƒìˆ˜ ê°’ì˜ ë¦¬ìŠ¤íŠ¸(ì§‘í•©), 부질ì˜ê°€ ë 수 있다. 리스트는 중괄호({}) ì•ˆì— í‘œí˜„ëœ ì§‘í•©ì„ ì˜ë¯¸í•˜ë©°, 부질ì˜ê°€ 사용ë˜ë©´ 부질ì˜ì˜ 수행 ê²°ê³¼ ì „ë¶€ì— ëŒ€í•´ì„œ *expression* (왼쪽)와 ë¹„êµ ì—°ì‚°ì„ ìˆ˜í–‰í•œë‹¤. .. code-block:: sql --creating a table CREATE TABLE condition_tbl (id int primary key, name char(10), dept_name VARCHAR, salary INT); INSERT INTO condition_tbl VALUES(1, 'Kim', 'devel', 4000000); INSERT INTO condition_tbl VALUES(2, 'Moy', 'sales', 3000000); INSERT INTO condition_tbl VALUES(3, 'Jones', 'sales', 5400000); INSERT INTO condition_tbl VALUES(4, 'Smith', 'devel', 5500000); INSERT INTO condition_tbl VALUES(5, 'Kim', 'account', 3800000); INSERT INTO condition_tbl VALUES(6, 'Smith', 'devel', 2400000); INSERT INTO condition_tbl VALUES(7, 'Brown', 'account', NULL); --selecting rows where department is sales or devel SELECT * FROM condition_tbl WHERE dept_name = ANY{'devel','sales'}; :: id name dept_name salary ====================================================================== 1 'Kim ' 'devel' 4000000 2 'Moy ' 'sales' 3000000 3 'Jones ' 'sales' 5400000 4 'Smith ' 'devel' 5500000 6 'Smith ' 'devel' 2400000 .. code-block:: sql --selecting rows comparing NULL value in the ALL group conditions SELECT * FROM condition_tbl WHERE salary > ALL{3000000, 4000000, NULL}; :: There are no results. .. code-block:: sql --selecting rows comparing NULL value in the ANY group conditions SELECT * FROM condition_tbl WHERE salary > ANY{3000000, 4000000, NULL}; :: id name dept_name salary ====================================================================== 1 'Kim ' 'devel' 4000000 3 'Jones ' 'sales' 5400000 4 'Smith ' 'devel' 5500000 5 'Kim ' 'account' 3800000 .. code-block:: sql --selecting rows where salary*0.9 is less than those salary in devel department SELECT * FROM condition_tbl WHERE ( (0.9 * salary) < ALL (SELECT salary FROM condition_tbl WHERE dept_name = 'devel') ); :: id name dept_name salary ====================================================================== 6 'Smith ' 'devel' 2400000 .. _between-expr: BETWEEN ======= **BETWEEN** ì¡°ê±´ì‹ì€ ì™¼ìª½ì˜ ë°ì´í„° ê°’ì´ ì˜¤ë¥¸ìª½ì— ì§€ì •ëœ ë‘ ë°ì´í„° ê°’ 사ì´ì— 존재하는지 비êµí•œë‹¤. ì´ë•Œ, ì™¼ìª½ì˜ ë°ì´í„° ê°’ì´ ë¹„êµ ëŒ€ìƒ ë²”ìœ„ì˜ ê²½ê³„ê°’ê³¼ ë™ì¼í•œ 경우ì—ë„ **TRUE** 를 반환한다. 한편, **BETWEEN** 키워드 ì•žì— **NOT** ì´ ì˜¤ë©´ **BETWEEN** ì—°ì‚°ì˜ ê²°ê³¼ì— **NOT** ì—°ì‚°ì„ ìˆ˜í–‰í•˜ì—¬ 결과를 반환한다. *i* **BETWEEN** *g* **AND** *m* ì€ ë³µí•© ì¡°ê±´ì‹ *i* **>=** *g* **AND** *i* **<=** *m* ê³¼ ë™ì¼í•˜ë‹¤. :: expression [ NOT ] BETWEEN expression AND expression * *expression* : 칼럼 ì´ë¦„, 경로 표현ì‹(예: *tbl_name.col_name*), ìƒìˆ˜ ê°’, ì‚°ìˆ í‘œí˜„ì‹, 집계 함수가 ë 수 있다. 문ìžì—´ 표현ì‹ì¸ 경우ì—는 문ìžì˜ ì‚¬ì „ìˆœìœ¼ë¡œ ì¡°ê±´ì´ í‰ê°€ëœë‹¤. í‘œí˜„ì‹ ì¤‘ 하나ë¼ë„ **NULL** ì´ ì§€ì •ë˜ë©´ **BETWEEN** ì¡°ê±´ì‹ì˜ 결과는 **FALSE** ë˜ëŠ” **UNKNOWN** ì„ ë°˜í™˜í•œë‹¤. .. code-block:: sql --selecting rows where 3000000 <= salary <= 4000000 SELECT * FROM condition_tbl WHERE salary BETWEEN 3000000 AND 4000000; SELECT * FROM condition_tbl WHERE (salary >= 3000000) AND (salary <= 4000000); :: id name dept_name salary ====================================================================== 1 'Kim ' 'devel' 4000000 2 'Moy ' 'sales' 3000000 5 'Kim ' 'account' 3800000 .. code-block:: sql --selecting rows where salary < 3000000 or salary > 4000000 SELECT * FROM condition_tbl WHERE salary NOT BETWEEN 3000000 AND 4000000; :: id name dept_name salary ====================================================================== 3 'Jones ' 'sales' 5400000 4 'Smith ' 'devel' 5500000 6 'Smith ' 'devel' 2400000 .. code-block:: sql --selecting rows where name starts from A to E SELECT * FROM condition_tbl WHERE name BETWEEN 'A' AND 'E'; :: id name dept_name salary ====================================================================== 7 'Brown ' 'account' NULL .. _exists-expr: EXISTS ====== **EXISTS** ì¡°ê±´ì‹ì€ ì˜¤ë¥¸ìª½ì— ì§€ì •ë˜ëŠ” 부질ì˜ë¥¼ 실행한 결과가 하나 ì´ìƒ 존재하면 **TRUE** 를 ë°˜í™˜í•˜ê³ , ì—°ì‚° 실행 결과가 공집합ì´ë©´ **FALSE** 를 반환한다. :: EXISTS expression * *expression* : 부질ì˜ê°€ ì§€ì •ë˜ë©°, ë¶€ì§ˆì˜ ì‹¤í–‰ 결과가 존재하는지 비êµí•œë‹¤. 만약 부질ì˜ê°€ ì–´ë–¤ ê²°ê³¼ë„ ë§Œë“¤ì§€ 않는다면 ì¡°ê±´ì‹ ê²°ê³¼ëŠ” **FALSE** ì´ë‹¤. .. code-block:: sql --selecting rows using EXISTS and subquery SELECT 'raise' FROM db_root WHERE EXISTS( SELECT * FROM condition_tbl WHERE salary < 2500000); :: 'raise' ====================== 'raise' .. code-block:: sql --selecting rows using NOT EXISTS and subquery SELECT 'raise' FROM db_root WHERE NOT EXISTS( SELECT * FROM condition_tbl WHERE salary < 2500000); :: There are no results. .. _in-expr: IN == **IN** ì¡°ê±´ì‹ì€ ì™¼ìª½ì˜ ë‹¨ì¼ ë°ì´í„° ê°’ì´ ì˜¤ë¥¸ìª½ì— ì§€ì •ëœ ë¦¬ìŠ¤íŠ¸ ë‚´ì— í¬í•¨ë˜ì–´ 있는지 비êµí•œë‹¤. 즉, ì™¼ìª½ì˜ ë‹¨ì¼ ë°ì´í„° ê°’ì´ ì˜¤ë¥¸ìª½ì— ì§€ì •ëœ í‘œí˜„ì‹ì˜ ì›ì†Œì´ë©´ **TRUE** 를 반환한다. **IN** 키워드 ì•žì— **NOT** ì´ ìžˆìœ¼ë©´ **IN** ì—°ì‚°ì˜ ê²°ê³¼ì— **NOT** ì—°ì‚°ì„ ìˆ˜í–‰í•˜ì—¬ 결과를 반환한다. :: expression [ NOT ] IN expression * *expression* (left) : ë‹¨ì¼ ê°’ì„ ê°€ì§€ëŠ” 칼럼, 경로 표현ì‹, ìƒìˆ˜ ê°’ ë˜ëŠ” ë‹¨ì¼ ê°’ì„ ìƒì„±í•˜ëŠ” ì‚°ìˆ í•¨ìˆ˜ê°€ ë 수 있다. * *expression* (right) : 칼럼 ì´ë¦„, 경로 표현ì‹(예: *tbl_name.col_name*), ìƒìˆ˜ ê°’ì˜ ë¦¬ìŠ¤íŠ¸(ì§‘í•©), 부질ì˜ê°€ ë 수 있다. 리스트는 소괄호(()) ë˜ëŠ” 중괄호({}) ì•ˆì— í‘œí˜„ëœ ì§‘í•©ì„ ì˜ë¯¸í•˜ë©°, 부질ì˜ê°€ 사용ë˜ë©´ 부질ì˜ì˜ 수행 ê²°ê³¼ ì „ë¶€ì— ëŒ€í•´ì„œ *expression* (left)와 ë¹„êµ ì—°ì‚°ì„ ìˆ˜í–‰í•œë‹¤. .. code-block:: sql --selecting rows where department is sales or devel SELECT * FROM condition_tbl WHERE dept_name IN {'devel','sales'}; SELECT * FROM condition_tbl WHERE dept_name = ANY{'devel','sales'}; :: id name dept_name salary ====================================================================== 1 'Kim ' 'devel' 4000000 2 'Moy ' 'sales' 3000000 3 'Jones ' 'sales' 5400000 4 'Smith ' 'devel' 5500000 6 'Smith ' 'devel' 2400000 .. code-block:: sql --selecting rows where department is neither sales nor devel SELECT * FROM condition_tbl WHERE dept_name NOT IN {'devel','sales'}; :: id name dept_name salary ====================================================================== 5 'Kim ' 'account' 3800000 7 'Brown ' 'account' NULL .. _is-null-expr: IS NULL ======= **IS NULL** ì¡°ê±´ì‹ì€ ì™¼ìª½ì— ì§€ì •ëœ í‘œí˜„ì‹ì˜ 결과가 **NULL** ì¸ì§€ 비êµí•˜ì—¬, **NULL** ì¸ ê²½ìš° **TRUE** 를 반환하며, ì¡°ê±´ì ˆ ë‚´ì—서 ì‚¬ìš©í• ìˆ˜ 있다. **NULL** 키워드 ì•žì— **NOT** ì´ ìžˆìœ¼ë©´ **IS NULL** ì—°ì‚°ì˜ ê²°ê³¼ì— **NOT** ì—°ì‚°ì„ ìˆ˜í–‰í•˜ì—¬ 결과를 반환한다. :: expression IS [ NOT ] NULL * *expression* : ë‹¨ì¼ ê°’ì„ ê°€ì§€ëŠ” 칼럼, 경로 표현ì‹(예: *tbl_name.col_name*), ìƒìˆ˜ ê°’ ë˜ëŠ” ë‹¨ì¼ ê°’ì„ ìƒì„±í•˜ëŠ” ì‚°ìˆ í•¨ìˆ˜ê°€ ë 수 있다. .. code-block:: sql --selecting rows where salary is NULL SELECT * FROM condition_tbl WHERE salary IS NULL; :: id name dept_name salary ====================================================================== 7 'Brown ' 'account' NULL .. code-block:: sql --selecting rows where salary is NOT NULL SELECT * FROM condition_tbl WHERE salary IS NOT NULL; :: id name dept_name salary ====================================================================== 1 'Kim ' 'devel' 4000000 2 'Moy ' 'sales' 3000000 3 'Jones ' 'sales' 5400000 4 'Smith ' 'devel' 5500000 5 'Kim ' 'account' 3800000 6 'Smith ' 'devel' 2400000 .. code-block:: sql --simple comparison operation returns NULL when operand is NULL SELECT * FROM condition_tbl WHERE salary = NULL; :: There are no results. .. _like-expr: LIKE ==== **LIKE** ì¡°ê±´ì‹ì€ 문ìžì—´ ë°ì´í„° ê°„ì˜ íŒ¨í„´ì„ ë¹„êµí•˜ëŠ” ì—°ì‚°ì„ ìˆ˜í–‰í•˜ì—¬, 검색어와 ì¼ì¹˜í•˜ëŠ” íŒ¨í„´ì˜ ë¬¸ìžì—´ì´ 검색ë˜ë©´ **TRUE** 를 반환한다. 패턴 ë¹„êµ ëŒ€ìƒì´ ë˜ëŠ” íƒ€ìž…ì€ **CHAR**, **VARCHAR**, **STRING** ì´ë©°, **BIT** íƒ€ìž…ì— ëŒ€í•´ì„œëŠ” **LIKE** ê²€ìƒ‰ì„ ìˆ˜í–‰í• ìˆ˜ 없다. **LIKE** 키워드 ì•žì— **NOT** ì´ ìžˆìœ¼ë©´ **LIKE** ì—°ì‚°ì˜ ê²°ê³¼ì— **NOT** ì—°ì‚°ì„ ìˆ˜í–‰í•˜ì—¬ 결과를 반환한다. **LIKE** ì—°ì‚°ìž ì˜¤ë¥¸ìª½ì— ì˜¤ëŠ” 검색어ì—는 ìž„ì˜ì˜ ë¬¸ìž ë˜ëŠ” 문ìžì—´ì— 대ì‘ë˜ëŠ” 와ì¼ë“œ 카드(wild card) 문ìžì—´ì„ í¬í•¨í• 수 있으며, **%** (percent)와 **_** (underscore)를 ì‚¬ìš©í• ìˆ˜ 있다. **%** 는 길ì´ê°€ 0 ì´ìƒì¸ ìž„ì˜ì˜ 문ìžì—´ì— 대ì‘ë˜ë©°, **_** 는 1ê°œì˜ ë¬¸ìžì— 대ì‘ëœë‹¤. ë˜í•œ, ì´ìŠ¤ì¼€ì´í”„ 문ìž(escape character)는 와ì¼ë“œ 카드 ë¬¸ìž ìžì²´ì— 대한 ê²€ìƒ‰ì„ ìˆ˜í–‰í• ë•Œ 사용ë˜ëŠ” 문ìžë¡œì„œ, 사용ìžì— ì˜í•´ 길ì´ê°€ 1ì¸ ë‹¤ë¥¸ 문ìž(**NULL**, 알파벳 ë˜ëŠ” 숫ìž)로 ì§€ì •ë 수 있다. 와ì¼ë“œ 카드 ë¬¸ìž ë˜ëŠ” ì´ìŠ¤ì¼€ì´í”„ 문ìžë¥¼ í¬í•¨í•˜ëŠ” 문ìžì—´ì„ 검색어로 사용하는 ì˜ˆì œëŠ” 아래를 ì°¸ê³ í•œë‹¤. :: expression [ NOT ] LIKE pattern [ ESCAPE char ] * *expression*\ : 문ìžì—´ ë°ì´í„° 타입 ì¹¼ëŸ¼ì´ ì§€ì •ëœë‹¤. 패턴 비êµëŠ” 칼럼 ê°’ì˜ ì²« 번째 문ìžë¶€í„° 시작ë˜ë©°, 대소문ìžë¥¼ 구분한다. * *pattern*\ : 검색어를 ìž…ë ¥í•˜ë©°, 길ì´ê°€ 0 ì´ìƒì¸ 문ìžì—´ì´ ëœë‹¤. ì´ë•Œ, 검색어 패턴ì—는 와ì¼ë“œ 카드 문ìž(**%** ë˜ëŠ” **_**)ê°€ í¬í•¨ë 수 있다. 문ìžì—´ì˜ 길ì´ëŠ” 0 ì´ìƒì´ë‹¤. * **ESCAPE** *char* : *char* ì— ì˜¬ 수 있는 문ìžëŠ” **NULL**, 알파벳, 숫ìžì´ë‹¤. 만약 ê²€ìƒ‰ì–´ì˜ ë¬¸ìžì—´ íŒ¨í„´ì´ "_" ë˜ëŠ” "%" ìžì²´ë¥¼ í¬í•¨í•˜ëŠ” 경우 ì´ìŠ¤ì¼€ì´í”„ 문ìžê°€ 반드시 ì§€ì •ë˜ì–´ì•¼ 한다. 예를 들어, ì´ìŠ¤ì¼€ì´í”„ 문ìžë¥¼ 백슬래시(\\)로 ì§€ì •í•œ 후 '10%'ì¸ ë¬¸ìžì—´ì„ ê²€ìƒ‰í•˜ê³ ìž í•œë‹¤ë©´, *pattern*\ ì— '10\%'ì„ ì§€ì •í•´ì•¼ 한다. ë˜í•œ, 'C:\\'ì¸ ë¬¸ìžì—´ì„ ê²€ìƒ‰í•˜ê³ ìž í•œë‹¤ë©´, *pattern*\ ì— 'C:\\ 'ì„ ì§€ì •í•˜ë©´ ëœë‹¤. CUBRIDê°€ ì§€ì›í•˜ëŠ” 문ìžì…‹ì— 관한 ìƒì„¸í•œ ì„¤ëª…ì€ :ref:`char-data-type` ì„ ì°¸ê³ í•œë‹¤. LIKE ì¡°ê±´ì‹ì˜ ì´ìŠ¤ì¼€ì´í”„ ë¬¸ìž ì¸ì‹ì€ **cubrid.conf** 파ì¼ì˜ **no_backslash_escapes** 파ë¼ë¯¸í„°ì™€ **require_like_escape_character** 파ë¼ë¯¸í„°ì˜ ì„¤ì •ì— ë”°ë¼ ë‹¬ë¼ì§„다. ì´ì— 대한 ìƒì„¸í•œ ì„¤ëª…ì€ :ref:`stmt-type-parameters` 를 ì°¸ê³ í•œë‹¤. .. note:: * CUBRID 9.0 미만 ë²„ì „ì—서는 UTF-8ê³¼ ê°™ì€ ë©€í‹°ë°”ì´íЏ 문ìžì…‹ 환경ì—서 ìž…ë ¥ëœ ë°ì´í„°ì— 대해 문ìžì—´ ë¹„êµ ì—°ì‚°ì„ ìˆ˜í–‰í•˜ë ¤ë©´, 1ë°”ì´íЏ 단위로 문ìžì—´ 비êµë¥¼ 수행하ë„ë¡ í•˜ëŠ” 파ë¼ë¯¸í„°(**single_byte_compare** = yes)를 **cubrid.conf** 파ì¼ì— 추가해야 ì •ìƒì ì¸ ê²€ìƒ‰ 결과를 ì–»ì„ ìˆ˜ 있다. * CUBRID 9.0 ì´ìƒ ë²„ì „ì—서는 ìœ ë‹ˆì½”ë“œ 문ìžì…‹ì„ ì§€ì›í•˜ë¯€ë¡œ **single_byte_compare** 파ë¼ë¯¸í„°ë¥¼ ë” ì´ìƒ 사용하지 않는다. .. code-block:: sql --selection rows where name contains lower case 's', not upper case SELECT * FROM condition_tbl WHERE name LIKE '%s%'; :: id name dept_name salary ====================================================================== 3 'Jones ' 'sales' 5400000 .. code-block:: sql --selection rows where second letter is 'O' or 'o' SELECT * FROM condition_tbl WHERE UPPER(name) LIKE '_O%'; :: id name dept_name salary ====================================================================== 2 'Moy ' 'sales' 3000000 3 'Jones ' 'sales' 5400000 .. code-block:: sql --selection rows where name is 3 characters SELECT * FROM condition_tbl WHERE name LIKE '___'; :: id name dept_name salary ====================================================================== 1 'Kim ' 'devel' 4000000 2 'Moy ' 'sales' 3000000 5 'Kim ' 'account' 3800000 .. _case-expr: CASE ==== **CASE** ì—°ì‚°ì‹ì€ **IF** ... **THEN** ... **ELSE** 로ì§ì„ SQL 문장으로 표현하며, **WHEN** ì— ì§€ì •ëœ ë¹„êµ ì—°ì‚° 결과가 ì°¸ì´ë©´ **THEN** ì ˆì˜ ê°’ì„ ë°˜í™˜í•˜ê³ ê±°ì§“ì´ë©´ **ELSE** ì ˆì— ëª…ì‹œëœ ê°’ì„ ë°˜í™˜í•œë‹¤. 만약, **ELSE** ì ˆì´ ì—†ë‹¤ë©´ **NULL** ê°’ì„ ë°˜í™˜í•œë‹¤. :: CASE control_expression simple_when_list [ else_clause ] END CASE searched_when_list [ else_clause ] END simple_when : WHEN expression THEN result searched_when : WHEN search_condition THEN result else_clause : ELSE result result : expression | NULL **CASE** ì¡°ê±´ì‹ì€ 반드시 키워드 **END** 로 ë나야 하며, *control_expression* ê³¼ ë°ì´í„° 타입과 *simple_when* ì ˆ ë‚´ì˜ *expression* ì€ ë¹„êµ ê°€ëŠ¥í•œ ë°ì´í„° 타입ì´ì–´ì•¼ 한다. ë˜í•œ, **THEN** ê³¼ **ELSE** ì ˆì— ì§€ì •ëœ ëª¨ë“ *result* ì˜ ë°ì´í„° íƒ€ìž…ì€ ì„œë¡œ 같거나, ì–´ëŠ í•˜ë‚˜ì˜ ê³µí†µ ë°ì´í„° 타입으로 변환 가능(convertible)해야 한다. **CASE** 수ì‹ì´ 반환하는 ê°’ì˜ ë°ì´í„° íƒ€ìž…ì€ ë‹¤ìŒê³¼ ê°™ì€ ê·œì¹™ì— ë”°ë¼ ê²°ì •ëœë‹¤. * **THEN** ì ˆì— ëª…ì‹œëœ ëª¨ë“ *result* ì˜ ë°ì´í„° íƒ€ìž…ì´ ê°™ìœ¼ë©´, 해당 íƒ€ìž…ì´ ë¦¬í„´ ê°’ì˜ ë°ì´í„° íƒ€ìž…ì´ ëœë‹¤. * ëª¨ë“ *result* ì˜ ë°ì´í„° íƒ€ìž…ì´ ê°™ì§€ 않ë”ë¼ë„ ì–´ëŠ í•˜ë‚˜ì˜ ê³µí†µ ë°ì´í„° 타입으로 변환 가능하면, 해당 íƒ€ìž…ì´ ë¦¬í„´ ê°’ì˜ ë°ì´í„° íƒ€ìž…ì´ ëœë‹¤. * *result* 중 ì–´ëŠ í•˜ë‚˜ê°€ 가변 ê¸¸ì´ ë¬¸ìžì—´ì¸ 경우, 리턴 ê°’ì˜ ë°ì´í„° íƒ€ìž…ì€ ê°€ë³€ ê¸¸ì´ ë¬¸ìžì—´ì´ ëœë‹¤. ë˜í•œ, *result* ê°€ ëª¨ë‘ ê³ ì • ê¸¸ì´ ë¬¸ìžì—´ì¸ 경우ì—는 가장 긴 길ì´ë¥¼ 가지는 문ìžì—´ ë˜ëŠ” ë¹„íŠ¸ì—´ì´ ê²°ê³¼ë¡œ 반환ëœë‹¤. * *result* 중 ì–´ëŠ í•˜ë‚˜ê°€ 근사치로 표현ë˜ëŠ” 수치형ì´ë©´, 근사치로 표현ë˜ê³ ì´ë•Œ 소수ì ì´í•˜ ìžë¦¿ìˆ˜ëŠ” ëª¨ë“ *result* ì˜ ìœ íš¨ 숫ìžë¥¼ í‘œí˜„í• ìˆ˜ 있ë„ë¡ ê²°ì •ëœë‹¤. .. code-block:: sql --creating a table CREATE TABLE case_tbl( a INT); INSERT INTO case_tbl VALUES (1); INSERT INTO case_tbl VALUES (2); INSERT INTO case_tbl VALUES (3); INSERT INTO case_tbl VALUES (NULL); --case operation with a search when clause SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM case_tbl; :: a case when a=1 then 'one' when a=2 then 'two' else 'other' end =================================== 1 'one' 2 'two' 3 'other' NULL 'other' .. code-block:: sql --case operation with a simple when clause SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM case_tbl; :: a case a when 1 then 'one' when 2 then 'two' else 'other' end =================================== 1 'one' 2 'two' 3 'other' NULL 'other' .. code-block:: sql --result types are converted to a single type containing all of significant figures SELECT a, CASE WHEN a=1 THEN 1 WHEN a=2 THEN 1.2345 ELSE 1.234567890 END FROM case_tbl; :: a case when a=1 then 1 when a=2 then 1.2345 else 1.234567890 end =================================== 1 1.000000000 2 1.234500000 3 1.234567890 NULL 1.234567890 .. code-block:: sql --an error occurs when result types are not convertible SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 1.2345 END FROM case_tbl; :: ERROR: Cannot coerce 'one' to type double.