MySQL - CONCAT

임재현·2021년 4월 29일
0

MySQL

목록 보기
14/52

UDEMY - The Ultimate MySQL Bootca…The Ultimate MySQL Bootcamp: Go from SQL Beginner to Expert를 수강하며 정리한 글

들어가기에 앞서, MySQL 공식 홈페이지에 들어가면 매뉴얼이 있다.

공식 홈페이지에 그냥 들어가서 DOCUMENTATION으로 들어가 자료를 찾아도 되지만 그냥 구글에서 검색할 때 MYSQL STRING FUNCTION 이런식으로 검색해서 들어가면 더 편리하게 들어갈 수 있다.

MySQL의 String Function중 하나인 CONCAT

CONCAT : Combine Data For Cleaner Output

다음과 같은 데이터가 있다.

mysql> select * from books;
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
| book_id | title                                               | author_fname | author_lname   | released_year | stock_quantity | pages |
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
|       1 | The Namesake                                        | Jhumpa       | Lahiri         |          2003 |             32 |   291 |
|       2 | Norse Mythology                                     | Neil         | Gaiman         |          2016 |             43 |   304 |
|       3 | American Gods                                       | Neil         | Gaiman         |          2001 |             12 |   465 |
|       4 | Interpreter of Maladies                             | Jhumpa       | Lahiri         |          1996 |             97 |   198 |
|       5 | A Hologram for the King: A Novel                    | Dave         | Eggers         |          2012 |            154 |   352 |
|       6 | The Circle                                          | Dave         | Eggers         |          2013 |             26 |   504 |
|       7 | The Amazing Adventures of Kavalier & Clay           | Michael      | Chabon         |          2000 |             68 |   634 |
|       8 | Just Kids                                           | Patti        | Smith          |          2010 |             55 |   304 |
|       9 | A Heartbreaking Work of Staggering Genius           | Dave         | Eggers         |          2001 |            104 |   437 |
|      10 | Coraline                                            | Neil         | Gaiman         |          2003 |            100 |   208 |
|      11 | What We Talk About When We Talk About Love: Stories | Raymond      | Carver         |          1981 |             23 |   176 |
|      12 | Where I'm Calling From: Selected Stories            | Raymond      | Carver         |          1989 |             12 |   526 |
|      13 | White Noise                                         | Don          | DeLillo        |          1985 |             49 |   320 |
|      14 | Cannery Row                                         | John         | Steinbeck      |          1945 |             95 |   181 |
|      15 | Oblivion: Stories                                   | David        | Foster Wallace |          2004 |            172 |   329 |
|      16 | Consider the Lobster                                | David        | Foster Wallace |          2005 |             92 |   343 |
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
16 rows in set (0.00 sec)

여기에 author_fname(first name)칼럼과 author_lname(last name)칼럼이 있다. 여기서 Full Name 으로 데이터들을 얻고 싶을 때 CONCAT을 사용해 줄 수 있다.
CONCAT (columnName, anotherColunName). 중간에 다른 문자를 끼워넣는 것도 가능하다.
CONCAT (columnName, 'some text', anotherColunName, 'more text').
그래서 first name과 last name 사이에 띄어쓰기를 넣어주고 싶다면 CONCAT (author_fname,' ',author_lanme) 이런식으로 해주면 된다.

먼저 그냥 CONCAT을 사용해보자.

mysql> CONCAT('Hello','World');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONCAT('Hello','World')' at line 1

CONCAT을 사용할 때는 그냥 단독으로 CONCAT만 사용해줄 수 없다. 아무것도 선택하는 것이 없기 때문이다. SELECT와 같이 사용해보자.

mysql> SELECT CONCAT ('Hello', '~','World','!');
+-----------------------------------+
| CONCAT ('Hello', '~','World','!') |
+-----------------------------------+
| Hello~World!                      |
+-----------------------------------+
1 row in set (0.00 sec)

이제 테이블에서 데이터를 선택하고 조작해보자.

mysql> SELECT
    -> CONCAT(author_fname,' ',author_lname)
    -> FROM books;
+---------------------------------------+
| CONCAT(author_fname,' ',author_lname) |
+---------------------------------------+
| Jhumpa Lahiri                         |
| Neil Gaiman                           |
| Neil Gaiman                           |
| Jhumpa Lahiri                         |
| Dave Eggers                           |
| Dave Eggers                           |
| Michael Chabon                        |
| Patti Smith                           |
| Dave Eggers                           |
| Neil Gaiman                           |
| Raymond Carver                        |
| Raymond Carver                        |
| Don DeLillo                           |
| John Steinbeck                        |
| David Foster Wallace                  |
| David Foster Wallace                  |
+---------------------------------------+
16 rows in set (0.01 sec)

칼럼 이름이 CONCAT(author_fname,' ',author_lname)으로 나오는 게 맘에 안들면 AS를 이용해 칼럼 이름을 다르게 출력해 줄 수도 있다.

mysql> SELECT
    -> CONCAT (author_fname,' ',author_lname) AS 'Full Name'
    -> FROM books;
+----------------------+
| Full Name            |
+----------------------+
| Jhumpa Lahiri        |
| Neil Gaiman          |
| Neil Gaiman          |
| Jhumpa Lahiri        |
| Dave Eggers          |
| Dave Eggers          |
| Michael Chabon       |
| Patti Smith          |
| Dave Eggers          |
| Neil Gaiman          |
| Raymond Carver       |
| Raymond Carver       |
| Don DeLillo          |
| John Steinbeck       |
| David Foster Wallace |
| David Foster Wallace |
+----------------------+
16 rows in set (0.00 sec)

CONCAT_WS : Concat With Separator

mysql> SELECT
    -> CONCAT_WS(' - ', title, author_fname, author_lname)
    -> from books;
+------------------------------------------------------------------------+
| CONCAT_WS(' - ', title, author_fname, author_lname)                    |
+------------------------------------------------------------------------+
| The Namesake - Jhumpa - Lahiri                                         |
| Norse Mythology - Neil - Gaiman                                        |
| American Gods - Neil - Gaiman                                          |
| Interpreter of Maladies - Jhumpa - Lahiri                              |
| A Hologram for the King: A Novel - Dave - Eggers                       |
| The Circle - Dave - Eggers                                             |
| The Amazing Adventures of Kavalier & Clay - Michael - Chabon           |
| Just Kids - Patti - Smith                                              |
| A Heartbreaking Work of Staggering Genius - Dave - Eggers              |
| Coraline - Neil - Gaiman                                               |
| What We Talk About When We Talk About Love: Stories - Raymond - Carver |
| Where I'm Calling From: Selected Stories - Raymond - Carver            |
| White Noise - Don - DeLillo                                            |
| Cannery Row - John - Steinbeck                                         |
| Oblivion: Stories - David - Foster Wallace                             |
| Consider the Lobster - David - Foster Wallace                          |
+------------------------------------------------------------------------+
16 rows in set (0.00 sec)

마치 자바스크립트의 Array prototype의 join()함수와 비슷하다. (join(' - ')이런식으로 해줬을 때. join()이런식으로 아무 파라미터를 주지 않은 것은 그냥 CONCAT()과 비슷.)

profile
임재현입니다.

0개의 댓글