UDEMY - The Ultimate MySQL Bootca…The Ultimate MySQL Bootcamp: Go from SQL Beginner to Expert를 수강하며 정리한 글
들어가기에 앞서, MySQL 공식 홈페이지에 들어가면 매뉴얼이 있다.
공식 홈페이지에 그냥 들어가서 DOCUMENTATION으로 들어가 자료를 찾아도 되지만 그냥 구글에서 검색할 때 MYSQL STRING FUNCTION 이런식으로 검색해서 들어가면 더 편리하게 들어갈 수 있다.
다음과 같은 데이터가 있다.
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)
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()
과 비슷.)