(Mac) MySQL docs 따라 실습하기 2

sosimeow·2022년 4월 10일
0

SQL

목록 보기
2/5




MySQL 8.0 공식문서를 참고하였으며, 직접 실습한 부분은 터미널 캡쳐본으로 정리했습니다. 🤓


2. Entering Queries

테이블을 생성하고, 데이터를 로드/검색 하는 것 보다 쿼리를 실행하는 방법에 대해 아는 것이 더 중요하므로

mysql 작동방식을 이해할 수 있는 몇 쿼리들로 쿼리 입력의 기본 원리에 대해 먼저 알아본다.

다음은 버전 번호와 현재 날짜를 알려달라고 서버에 요청하는 간단한 쿼리입니다.

mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 5.8.0-m17 | 2015-12-21   |
+-----------+--------------+
1 row in set (0.02 sec)
mysql>

위 쿼리 결과를 통해 알 수 있는 몇가지 사항이 있습니다

mysql 작동방식

  • 쿼리는 일반적으로 SQL 문과 세미콜론으로 구성됩니다. 세미콜론을 생략할 수 있는 예외도 있습니다. (ex: QUIT)

  • 쿼리를 실행하면 mysql은 실행을 위해 서버로 전송하고 결과를 표시한 다음 다른 mysql> 프롬프트를 인쇄하여 다른 쿼리에 대한 준비가 되었음을 나타냅니다.

  • mysql은 쿼리 출력을 표 형식(행 및 열)으로 표시합니다. 첫 번째 행에는 열 레이블이 포함되며, 다음 행은 쿼리 결과입니다. 일반적으로 열 레이블은 데이터베이스 테이블에서 가져오는 열 이름입니다. 하지만 테이블 열이 아닌 식 값을 검색하는 경우(위 예시처럼), mysql은 식 자체를 열 레이블로 지정합니다.

  • mysql은 반환된 행 수쿼리 실행 시간을 보여 주며, 서버 성능에 대한 대략적인 정보를 제공합니다. 이러한 값은 시계 시간(CPU나 컴퓨터 시간이 아님)을 나타내며 서버 로드 및 네트워크 지연과 같은 요인에 의해 영향을 받아 정확하지는 않습니다.

키워드는 대소문자를 구별하지 않아 아래 쿼리는 모두 동일합니다.

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;



2.1 계산 기능

쿼리로 간단한 계산도 가능합니다

mysql> SELECT SIN(PI()/4), (4+1)*5;
+------------------+---------+
| SIN(PI()/4)      | (4+1)*5 |
+------------------+---------+
| 0.70710678118655 |      25 |
+------------------+---------+
1 row in set (0.02 sec)

docs 예시를 약간 변형해서 실행한 결과
, 으로 구분 된 식들이 각 열의 label로
결과 값은 row값으로 나타나는 것을 볼 수 있습니다.



2.2 multiple statements on a single line

지금까지 보여진 쿼리는 비교적 짧은 단일문이었지만, 한 줄에 여러 문을 입력할 수도 있습니다. 각 항목은 세미콜론으로 끝냅니다.

mysql> SELECT VERSION(); SELECT NOW();

2.3 multiple-line statement

쿼리는 한 줄에 모두 지정할 필요는 없이 여러 줄이 필요한 긴 쿼리도 가능합니다.

mysql은 입력 줄의 끝을 찾는 것이 아니라 종료 세미콜론을 찾아 쿼리 끝의 위치를 결정합니다. (즉, mysql은 입력 line을 수집하지만 세미콜론을 볼 때까지 실행하지 않는다.)

mysql> SELECT
    -> USER()
    -> ,
    -> CURRENT_DATE;

실행 결과를 보면, 위에서 이미 한 번 실행했던

mysql> SELECT VERSION(), CURRENT_DATE;

와 동일함을 알 수 있습니다

SELECT라는 같은 키워드 아래 식이 존재함으로 SELECT 아래 -> 에 식과 , 을 입력하고 ;으로 쿼리를 마쳐주는 것입니다.

즉 다중 행 쿼리의 첫 번째 줄을 입력한 후 프롬프트가 mysql>에서 ->로 변경되는 것은 mysql이 아직 완전한 문을 보지 못했고 나머지를 기다리고 있다는 것을 나타내는 방법입니다.

이러한 프롬프트의 피드백을 참고하면 mysql이 현재 필요한 것이 무엇인지 쉽게 알 수 있습니다. 👍



-> 에서 나가기

입력 중인 쿼리를 실행하지 않으려면 \c 를 입력하여 쿼리를 취소합니다.

mysql> SELECT
    -> USER()
    -> \c
mysql>

❗️이 때 대문자 C를 사용하지 않도록 주의해야 합니다. (문제는 없지만, 작동하지 않습니다.)




2.4 프롬프트, mysql 상태 요약표



프롬포트의미
mysql >새 쿼리 준비
->다음 줄 다중 줄 쿼리 대기 중
'>다음 줄을 기다리며, 한 개의 따옴표(')로 시작하는 문자열 완료를 대기
">다음 줄을 기다리며, 큰따옴표(")로 시작하는 문자열 완료를 대기
">다음 줄을 기다리며, 백티크(')로 시작하는 식별자 완료를 대기
/*>다음 줄을 기다리며, /*로 시작하는 코멘트의 완료를 대기



case 1

mysql> SELECT USER()
    ->

위 예시에서는 -> 에
;
를 입력해야 합니다.



case 2

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '>

'> 및 "> 프롬프트는 문자열 수집 중에 발생합니다(MySQL이 문자열의 완료를 기다리고 있음을 나타냄)

MySQL 에서는 ' or " 로 둘러쌓인 문자열을 쓸 수 있습니다.


위 예시는 'Smith 뒤에 ' 가 누락된 문제가 있습니다.
이를 해결하는 가장 간단한 방법은 쿼리를 취소하는 것입니다.

그러나 mysql은 \c수집 중인 문자열의 일부로 해석 합니다.


따라서 아래와 같이 ' 로 먼저 문자열을 마무리하고 \c 를 입력해야 합니다.

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '> '\c
mysql>

위 표의 다른 프롬포트 메시지도 '> 와 유사한 의미를 가집니다.



check
실수로 unterminated string을 입력하는 경우 mysql이 다음 입력문도 인식하지 못하므로 반드시 terminating quote를 먼저 제공하고 현재 쿼리를 종료해야 합니다





reference link

profile
데이터 엔지니어 ing

0개의 댓글