비즈니스의 지속 가능성은 적절한 데이터 관리 없이는 어렵습니다. 잘 정의된 시스템을 구축하는 것은 내부 및 외부 운영을 관리하는 데 필수적입니다. 비즈니스 데이터에 대한 상세한 통찰력은 전반적인 워크플로우를 이해하고 성과를 측정하는 데 도움이 됩니다. 또한, 데이터베이스를 사용하면 시간을 절약하고 정보에 손쉽게 액세스할 수 있습니다.
데이터베이스란 무엇인가요?
데이터베이스(database)는 정보를 안전하게 저장하는 데 사용되는 체계적인 시스템입니다. 이는 분류 기능을 제공하며 유사한 종류의 항목들을 하나의 그룹으로 정렬하기 위한 테이블 생성을 가능하게 합니다. 테이블은 정보를 여러 행과 열로 나열할 수 있는 옵션을 제공합니다. 그 결과, 데이터의 품질과 일관성이 향상됩니다. 저장 및 쉬운 액세스 기능 외에도, 데이터베이스는 개인 정보를 보호하고 시스템을 안전하게 지키는 데 중요한 역할을 합니다. 임시(ad hoc) 쿼리이든 애플리케이션에 코딩된 프로세스의 일부이든, 데이터를 검색하는 것은 데이터베이스 관리에서 가장 중요한 측면 중 하나입니다.
관계형 DMS에서 쿼리(query)는 테이블에서 데이터를 검색하는 데 사용되는 모든 명령입니다. SELECT 문은 거의 항상 Structured Query Language (SQL) 쿼리에 사용됩니다. 데이터베이스에서 정보를 검색하는 방법에는 여러 가지가 있습니다. 일반적으로 개발자들은 빠르고 효과적이기 때문에 명령줄 옵션을 선호합니다. 이를 통해 쿼리를 원활하게 제출할 수 있습니다.
이 가이드에서는 MySQL을 소개하고 MySQL에서 쿼리를 사용하는 방법에 대해 논의할 것입니다. 시작해 봅시다!
전제 조건
이 튜토리얼을 따라 하려면 다음이 필요합니다:
-
시스템에 최신 버전의 Ubuntu가 설치되어 있어야 합니다.
-
시스템 사용자는 sudo 권한.
-
이 있어야 합니다. sudo 계정 액세스에 어려움이 있는 경우 MySQL root 비밀번호.
-
1단계 — 데이터베이스 생성 및 설정
첫 번째 SQL 쿼리를 작성하고 시작하기 전에, 데이터베이스를 생성하고 여기에 테이블을 추가해야 합니다. 그 후, 샘플 데이터를 사용하여 테이블을 채울 것입니다. 데이터베이스를 사용해 보면 기본 설정을 이해하고 쿼리 작업에 대한 자신감을 갖는 데 도움이 됩니다.
실습 경험은 개념을 정립하고 데이터베이스의 중요성을 이해하는 가장 효과적인 방법입니다. 이 가이드에서는 실제 문제를 해결하기 위한 데이터베이스의 사용과 그 중요성에 대해 안내해 드립니다. 데이터베이스가 레코드를 구조화된 방식으로 정리하는 데 어떻게 도움이 되는지 이해하기 위해 시나리오를 확인해 보겠습니다.
시나리오: 대학생 그룹이 생일을 축하하기 위해 휴가를 떠나는 데이터베이스를 생성할 것입니다. 휴가를 떠나기 전에 그들은 친선 수영 대회에 참가할 계획입니다. 또한, 그룹의 모든 친구들은 여행을 스릴 있고 즐겁게 만들기 위해 활동 할 일 목록(to-do list)을 계획합니다.
먼저, root 사용자로 MySQL을 엽니다:
|
1 |
$ sudo mysql |
그런 다음, 다음 명령을 실행하여 데이터베이스를 생성합니다:
|
1 2 3 |
mysql> CREATE DATABASE `vacation`; Query OK, 1 row affected (0.52 sec) |
다음으로, 다음 명령을 사용하여 데이터베이스를 사용해 봅시다:
|
1 |
mysql> USE vacation; |
그 후, 데이터베이스에 테이블을 생성할 것입니다. 첫 번째 테이블의 이름을 celebration(으)로 지정합니다. 이 테이블에는 친구들의 이름 (name), 그들이 우승한 대회 수 (wins) 그리고 그들의 최고 시간 (time):
|
1 2 3 4 5 6 7 |
mysql> CREATE TABLE celebration ( -> name varchar(50), -> wins real, -> time real -> ); Query OK, 0 rows affected (2.03 sec) |
그런 다음 테이블에 데이터를 채울 것입니다:
|
1 2 3 4 5 6 7 8 9 |
mysql> INSERT INTO celebration (name, wins, time) VALUES('Austin', '4', '15.5'), ('Ivan','7','9'), ('Aisha','10','5'), ('Zane','13','7.5'); Query OK, 4 rows affected (0.29 sec) Records: 4 Duplicates: 0 Warnings: 0 |
그런 다음, 데이터베이스 내에 친구들이 가장 좋아하는 생일 활동에 대한 정보를 저장할 다른 테이블을 생성합니다. 다음과 같은 이름의 테이블을 생성하겠습니다. vacation 그리고 다음과 같은 열을 갖습니다:
|
목록 |
상세 정보 |
|
name: |
각 친구의 이름을 저장합니다. |
|
birthdate: |
각 개인의 생일을 추적합니다. |
|
activity: |
가장 좋아하는 활동을 기록합니다. |
|
Destination: |
각 개인이 가장 좋아하는 여행지 정보를 저장합니다. |
|
meal: |
개인이 가장 좋아하는 식사를 추적합니다. |
|
1 2 3 4 5 6 7 8 |
mysql> CREATE TABLE vacation ( name varchar(50), birthdate date, activity varchar(50), destination varchar(50), meal varchar(50) ); Query OK, 0 rows affected (0.09 sec) |
테이블에 데이터를 채웁니다:
|
1 2 3 4 5 6 7 8 9 10 |
mysql> CREATE TABLE vacation ( name varchar(50), birthdate date, activity varchar(50), destination varchar(50), meal varchar(50) ); Query OK, 0 rows affected (0.09 sec) Records: 4 Duplicates: 0 Warnings: 0 |
이제 데이터베이스 설정이 완료되었습니다.
2단계 — SELECT 문 시작하기
SQL 쿼리는 보통 다음과 같이 시작합니다. SELECT. 이는 쿼리에서 결과와 함께 반환되어야 하는 테이블의 열을 지정하는 데 사용됩니다. 또한 쿼리에는 항상 다음이 포함되어야 합니다. FROM, 이는 문이 쿼리할 테이블을 지정하는 데 사용됩니다.
쿼리는 아래 구문을 따릅니다:
|
1 |
mysql> SELECT column_to_select FROM table_to_select WHERE certain_conditions_apply; |
쿼리 구문을 사용하여 meal 열을 다음 테이블에서 반환합니다: vacation 테이블:
|
1 |
mysql> SELECT meal FROM vacation; |
출력 결과는 다음과 같습니다:
|
1 2 3 4 5 6 7 8 9 10 |
+-------+ | meal | +-------+ | Steak | | Sushi | | Fries | | Tofu | +-------+ 4 rows in set (0.00 sec) |
쉼표를 사용하여 여러 열을 구분하여 선택할 수도 있습니다:
|
1 |
mysql> SELECT name, destination FROM vacation; |
출력:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+-------------+ | name | destination | +--------+-------------+ | Austin | Maldives | | Ivan | Mauritius | | Aisha | Colorado | | Zane | Bora Bora | +--------+-------------+ 4 rows in set (0.00 sec) |
테이블의 모든 열을 나타내려면 별표(asterisk) (*)를 사용할 수도 있습니다:
|
1 |
mysql> SELECT * FROM celebration; |
출력:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+------+ | name | wins | time | +--------+------+------+ | Austin | 4 | 15.5 | | Ivan | 7 | 9 | | Aisha | 10 | 5 | | Zane | 13 | 7.5 | +--------+------+------+ 4 rows in set (0.00 sec) |
지정된 조건을 충족하는 레코드를 필터링하려면 WHERE를 사용합니다. 지정된 조건을 충족하지 않는 행은 결과에서 제외됩니다. WHERE 절은 다음과 같은 구문을 사용합니다:
|
1 |
mysql> . . . WHERE column_name comparison_operator value |
이는 지정된 열을 값과 비교하는 방법을 정의하는 비교 연산자입니다. 일반적인 SQL 비교 연산자는 다음과 같습니다:
|
연산자 |
용도 |
|
= |
동등성 |
|
!= |
부등성 |
|
< |
미만 |
|
> |
초과 |
|
<= |
이하 |
|
>= |
이상 |
|
BETWEEN |
값이 주어진 범위 내에 있는지 테스트합니다. |
|
IN |
행의 값이 지정된 값 집합에 포함되어 있는지 테스트합니다. |
|
EXISTS |
행이 존재하는지 테스트합니다. |
|
LIKE |
값이 지정된 문자열과 일치하는지 테스트합니다. |
|
IS NULL |
Null 값을 테스트합니다. |
|
IS NOT NULL |
NULL 이외의 모든 값을 테스트합니다. |
Aisha가 가장 좋아하는 여행지를 찾으려면 아래 쿼리를 사용할 수 있습니다:
|
1 |
mysql> SELECT destination FROM vacation WHERE name ='Aisha'; |
쿼리는 다음과 같이 반환합니다:
|
1 2 3 4 5 6 7 |
+-------------+ | destination | +-------------+ | Colorado | +-------------+ 1 row in set (0.03 sec) |
SQL은 와일드카드 문자의 사용을 지원하며, 이는 특히 WHERE 절에서 유용합니다. 퍼센트 기호( %)는 0개 이상의 알 수 없는 문자를 나타내고, 밑줄( _)은 단일 알 수 없는 문자를 나타냅니다. 이는 테이블에서 특정 항목을 찾고 싶지만 해당 항목에 대해 확실하지 않을 때 유용합니다.
예를 들어, 친구가 가장 좋아하는 목적지를 잊어버렸고 시작하는 글자(예: “m”)만 알고 있는 경우, 다음 쿼리를 사용하여 목적지 이름을 찾을 수 있습니다:
|
1 |
mysql> SELECT destination FROM vacation WHERE destination LIKE 'm%'; |
쿼리는 다음을 반환합니다:
|
1 2 3 4 5 6 7 8 |
+-------------+ | destination | +-------------+ | Maldives | | Mauritius | +-------------+ 2 rows in set (0.04 sec) |
데이터베이스를 작업할 때 비교적 길거나 읽기 어려운 이름을 가진 열이나 테이블을 만날 수 있습니다. 이 경우, AS 키워드를 사용하여 별칭을 만듦으로써 이름을 더 읽기 쉽게 만들 수 있습니다. AS로 생성된 별칭은 해당 별칭이 생성된 쿼리가 실행되는 동안에만 유효합니다:
|
1 2 3 4 5 6 7 8 9 10 11 |
mysql> SELECT name AS E, destination as D, activity as A FROM vacation; +--------+-----------+-------------------+ | E | D | A | +--------+-----------+-------------------+ | Austin | Maldives | skiing | | Ivan | Mauritius | paragliding | | Aisha | Colorado | mountain climbing | | Zane | Bora Bora | fishing | +--------+-----------+-------------------+ 4 rows in set (0.00 sec) |
3단계 — 집계 함수 소개
데이터를 작업할 때 항상 데이터 자체를 보고 싶어 하는 것은 아닙니다. 오히려 데이터에 대한 정보를 얻고 싶을 것입니다. SELECT 쿼리를 실행하면 SQL 구문을 사용하여 데이터를 해석하거나 데이터에 대한 계산을 수행할 수 있습니다. 이를 집계 함수라고 합니다.
The COUNT 함수는 특정 기준 세트를 충족하는 행의 수를 세고 반환합니다. 예를 들어, 얼마나 많은 친구들이 Maldives에 가는 것을 선호하는지 알고 싶다면 다음 쿼리를 사용할 수 있습니다:
|
1 |
mysql> SELECT COUNT(destination) FROM vacation WHERE destination = 'Maldives'; |
다음 결과가 반환됩니다:
|
1 2 3 4 5 6 7 |
+--------------------+ | COUNT(destination) | +--------------------+ | 1 | +--------------------+ 1 row in set (0.06 sec) |
MIN은 지정된 열 내에서 가장 작은 값을 찾는 데 사용됩니다:
|
1 |
mysql> SELECT MIN(wins) FROM celebration; |
쿼리는 다음을 출력합니다:
|
1 2 3 4 5 6 7 |
+-----------+ | MIN(wins) | +-----------+ | 4 | +-----------+ 1 row in set (0.02 sec) |
MAX은 주어진 열에서 가장 큰 숫자 값을 찾는 데 사용됩니다:
|
1 |
mysql> SELECT MAX(wins) FROM celebration; |
예상되는 출력은 다음과 같습니다:
|
1 2 3 4 5 6 7 |
+-----------+ | MAX(wins) | +-----------+ | 13 | +-----------+ 1 row in set (0.03 sec) |
Both the MIN 및 MAX 함수는 숫자 및 알파벳 데이터에 모두 사용할 수 있습니다. 문자열 값 열에 적용할 때, MIN 함수는 알파벳 순서로 첫 번째 값을 반환합니다.
The MIN 함수는 알파벳 순서로 첫 번째 값을 반환합니다:
|
1 |
mysql> SELECT MIN(name) FROM celebration; |
출력 결과는 다음과 같습니다:
|
1 2 3 4 5 6 7 |
+-----------+ | MIN(name) | +-----------+ | Aisha | +-----------+ 1 row in set (0.00 sec) |
The MAX 함수는 알파벳 순서로 마지막 값을 반환합니다:
|
1 |
mysql> SELECT MAX(name) FROM celebration; |
출력 결과는 다음과 같습니다:
|
1 2 3 4 5 6 7 |
+-----------+ | MAX(name) | +-----------+ | Zane | +-----------+ 1 row in set (0.00 sec) |
4단계 — 쿼리 출력 조작하기
자주 사용되는 또 다른 절은 GROUP BY 절입니다. 이 절은 한 열에 대해 집계 함수를 수행하면서 다른 열의 일치하는 값과 관련지어 그룹화할 때 사용됩니다:
|
1 |
mysql> SELECT COUNT(name), activity FROM vacation GROUP BY activity; |
출력 결과는 다음과 같습니다:
|
1 2 3 4 5 6 7 8 9 10 |
+-------------+-------------------+ | COUNT(name) | activity | +-------------+-------------------+ | 1 | skiing | | 1 | paragliding | | 1 | mountain climbing | | 1 | fishing | +-------------+-------------------+ 4 rows in set (0.04 sec) |
쿼리 결과를 정렬하려면 ORDER BY 절을 사용합니다. 숫자 값은 기본적으로 오름차순으로 정렬되며, 텍스트 값은 알파벳순으로 정렬됩니다. 아래 쿼리는 name 및 birthdate 열을 나열하지만, 결과를 birthdate:
|
1 |
mysql> SELECT name, birthdate FROM vacation ORDER BY birthdate; |
출력 결과는 다음과 같습니다:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------------+ | name | birthdate | +--------+------------+ | Zane | 1996-01-01 | | Aisha | 1999-07-24 | | Austin | 2002-01-07 | | Ivan | 2010-12-18 | +--------+------------+ 4 rows in set (0.04 sec) |
출력 결과는 오름차순입니다. 내림차순으로 정렬하려면 쿼리를 다음 단어로 끝맺습니다. DESC:
|
1 |
mysql> SELECT name, birthdate FROM vacation ORDER BY birthdate DESC; |
출력 결과를 확인해 보세요:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------------+ | name | birthdate | +--------+------------+ | Ivan | 2010-12-18 | | Austin | 2002-01-07 | | Aisha | 1999-07-24 | | Zane | 1996-01-01 | +--------+------------+ 4 rows in set (0.00 sec) |
The HAVING 절은 WHERE 절과 유사한 기능을 제공하면서도 집계 함수와 함께 사용할 수 있도록 SQL에 추가되었습니다. 이 두 절의 차이점은 WHERE 절은 개별 레코드를 참조하는 반면, HAVING 절은 그룹 레코드를 참조한다는 것입니다. 따라서 HAVING 절을 사용할 때는 항상 GROUP BY 절이 있어야 합니다:
|
1 |
mysql> SELECT COUNT(name), activity FROM vacation GROUP BY activity HAVING COUNT(name) >= 1; |
쿼리 출력 결과는 다음과 같습니다:
|
1 2 3 4 5 6 7 8 |
+-------------+-------------------+ | COUNT(name) | activity | +-------------+-------------------+ | 1 | skiing | | 1 | paragliding | | 1 | mountain climbing | | 1 | fishing | +-------------+-------------------+ |
The COUNT 값은 모두 1인데, 이는 동일한 활동을 좋아하는 친구가 두 명 이상 없기 때문입니다.
5단계 — 여러 테이블 쿼리하기
The JOIN 절은 쿼리 결과에서 둘 이상의 테이블의 행을 결합하는 데 사용할 수 있습니다. 이는 테이블 간의 관련 열을 찾아 출력을 적절하게 정렬함으로써 수행됩니다.
SELECT 절을 포함하는 JOIN 문은 아래와 같은 구문을 따릅니다:
|
1 2 3 |
mysql> SELECT table1.column1, table2.column2 mysql> FROM table1 mysql> JOIN table2 ON table1.related_column=table2.related_column; |
친구들의 wins 및 swimming의 birthdays에 대해 트로피를 선물하고 싶다면, 두 테이블을 조인하여 단 한 번의 쿼리로 원하는 모든 정보를 찾을 수 있는 쿼리를 작성할 수 있습니다:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration JOIN vacation ON celebration.name=vacation.name; |
출력 결과는 다음과 같습니다:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | +--------+------+------------+ 4 rows in set (0.00 sec) |
이것은 내부 JOIN 절입니다. 두 테이블 모두에서 일치하는 값을 가진 모든 레코드를 선택하여 결과 집합에 출력하기 때문입니다. 쿼리와 일치하지 않는 레코드는 포함되지 않습니다. 어떤 항목과도 일치하지 않는 새 행을 테이블에 추가할 수 있습니다:
|
1 2 3 4 |
mysql> INSERT INTO celebration(name,wins,time) VALUES('Ella', '1', '120'); Query OK, 1 row affected (0.01 sec) |
|
1 2 3 4 |
mysql> INSERT INTO celebration(name,wins,time) VALUES('Ella', '1', '120'); Query OK, 1 row affected (0.01 sec) |
그런 다음, SELECT 문을 JOIN 절과 함께 다시 실행합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate -> FROM celebration -> JOIN vacation ON celebration.name=vacation.name; +--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | +--------+------+------------+ 4 rows in set (0.00 sec) |
celebration 테이블에는 Peter에 대한 항목이 없고 vacation 테이블에는 Ella에 대한 항목이 없기 때문에 해당 레코드는 누락됩니다.
외부 JOIN 절을 사용하여 테이블 중 하나에서 모든 레코드를 반환할 수 있습니다. 이는 LEFT JOIN 또는 RIGHT JOIN일 수 있습니다. LEFT JOIN은 왼쪽 테이블의 모든 레코드와 오른쪽 테이블에서 일치하는 레코드만 반환합니다. 외부 조인 맥락에서 왼쪽 테이블은 FROM 절에서 참조하는 테이블이고, 오른쪽 테이블은 JOIN 문 뒤에 참조되는 테이블입니다.
쿼리를 다시 실행하되, LEFT JOIN 절을 사용합니다:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration LEFT JOIN vacation ON celebration.name=vacation.name; |
이 명령은 오른쪽 테이블에 일치하는 레코드가 없더라도 왼쪽 테이블( celebration)의 모든 레코드를 반환합니다. 오른쪽 테이블에 일치하는 레코드가 없으면 NULL:
|
1 2 3 4 5 6 7 8 9 10 11 |
+--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | | Ella | 1 | NULL | +--------+------+------------+ 5 rows in set (0.00 sec) |
이번에는 RIGHT JOIN 절입니다:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration RIGHT JOIN vacation ON celebration.name=vacation.name; |
오른쪽 테이블(vacation)의 모든 값이 반환됩니다. Peter의 birthdate은 오른쪽 테이블에 기록되어 있고 왼쪽 테이블의 name 및 wins에는 기록되어 있지 않으므로, 해당 행의 열은 NULL 값을 반환합니다:
|
1 2 3 4 5 6 7 8 9 10 11 |
+--------+------+------------+ | 이름 | 우승 횟수 | 생년월일 | +--------+------+------------+ | 오스틴 | 4 | 2002-01-07 | | 이반 | 7 | 2010-12-18 | | 아이샤 | 10 | 1999-07-24 | | 제인 | 13 | 1996-01-01 | | NULL | NULL | 1991-05-03 | +--------+------+------------+ 5 행 내 세트 (0.01 초) |
여러 테이블에서 레코드를 조회하기 위해 UNION 절을 JOIN 대신 사용할 수 있습니다. UNION 연산자는 JOIN 절과 다릅니다. 단일 SELECT 문을 사용하여 여러 테이블의 결과를 고유한 열로 출력하는 대신, 두 SELECT 문의 결과를 단일 열로 결합한다는 점에서 차이가 있습니다.
이를 설명하기 위해 다음 쿼리를 실행할 수 있습니다:
|
1 |
mysql> SELECT name FROM celebration UNION SELECT name FROM vacation; |
이 쿼리는 중복된 항목을 제거합니다. 이는 UNION 연산자의 기본 동작입니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
+--------+ | 이름 | +--------+ | 오스틴 | | 이반 | | 아이샤 | | 제인 | | 엘라 | | 피터 | +--------+ 6 행 내 세트 (0.00 초) |
모든 항목(중복 포함)을 반환하려면 UNION ALL 연산자를 사용하십시오:
|
1 |
mysql> SELECT name FROM celebration UNION ALL SELECT name FROM vacation; |
출력:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
+--------+ | 이름 | +--------+ | 오스틴 | | 이반 | | 아이샤 | | 제인 | | 엘라 | | 오스틴 | | 이반 | | 아이샤 | | 제인 | | 피터 | +--------+ 10 행 내 세트 (0.00 초) |
서브쿼리는 여러 테이블을 조회하는 또 다른 방법입니다. 서브쿼리는 다른 쿼리 내부에 포함된 쿼리(내부 쿼리 또는 중첩 쿼리라고도 함)입니다. 이는 쿼리 결과를 별도의 집계 함수 결과와 비교하고자 할 때 유용합니다.
엘라(Ella)보다 수영 대회에서 더 많이 우승한 친구가 누구인지 찾는 예를 사용해 보겠습니다. 엘라가 몇 번 우승했는지 조회한 다음, 그보다 더 많이 우승한 사람이 누구인지 확인하기 위해 또 다른 쿼리를 실행하는 대신, 단일 쿼리로 이 두 가지를 모두 계산할 수 있습니다:
|
1 2 3 4 |
mysql> SELECT name, wins FROM celebration -> WHERE wins > ( -> SELECT wins FROM celebration WHERE name = 'Ella' -> ); |
쿼리는 다음을 반환합니다:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+ | 이름 | 우승 횟수 | +--------+------+ | 오스틴 | 4 | | 이반 | 7 | | 아이샤 | 10 | | 제인 | 13 | +--------+------+ 4 행 내 세트 (0.06 초) |
친구들을 깜짝 휴가에 데려가고 싶다면, 쿼리를 사용하여 누가 가장 많이 우승했는지 확인하고 그들의 목적지를 반환할 수 있습니다:
|
1 2 3 4 |
mysql> SELECT name, destination, activity, meal -> FROM vacation -> WHERE name = ( SELECT name FROM celebration -> WHERE wins = (SELECT MAX(wins) FROM celebration)); |
쿼리는 다음을 반환합니다:
|
1 2 3 4 5 6 7 |
+------+-------------+----------+------+ | 이름 | 목적지 | 활동 | 식사 | +------+-------------+----------+------+ | 제인 | 보라 보라 | 낚시 | 두부 | +------+-------------+----------+------+ 1 행 내 세트 (0.00 초) |
이 문은 서브쿼리 내에 또 다른 서브쿼리를 포함하고 있습니다.
결론
쿼리 생성은 데이터베이스 관리에서 가장 흔한 작업 중 하나입니다. 쿼리를 작업하고 결과를 시각화하는 데 사용할 수 있는 phpMyAdmin 및 pgAdmin과 같은 여러 데이터베이스 관리 도구가 있습니다. 하지만 명령줄에서의 SELECT 문은 사용 편의성과 뛰어난 제어력 덕분에 가장 선호되는 선택입니다.
또한, 저희 블로그에서 데이터베이스에 관한 다양한 튜토리얼을 확인하실 수 있습니다.:
- SQLite vs MySQL vs. PostgreSQL: 관계형 데이터베이스 관리 시스템 비교
- MySQL에서 손상된 테이블을 복구하는 빠른 해결책: 튜토리얼
- Centos 7에 MySQL을 설치하는 방법
- MySQL 사용자 — 생성 및 권한 부여
- Ubuntu에서 MySQL 복제 설정하기
즐거운 컴퓨팅!
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.