MySQL SELECT문

2020. 2. 10. 14:43MySQL

select문에 들어가기 앞서...

RDBMS에서는 데이터베이스 조작을 위해 SQL문을 명령어로 사용한다.

SQL문을 세 가지로 분류할 수 있다.

DML(Data Manipulation Language)

테이블의 행을 조작(선택, 삽입, 수정, 삭제)

트랜잭션 발생:

트랜잭션 제어어(TCL: Transaction Control Language):

DML을 사용할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시킴

COMMIT/ ROLLBACK/ SAVEPOINT

SELECT

INSERT

UPDATE

DELETE

DDL(Data Definition Language)

데이터베이스 개체를 조작(생성, 삭제, 변경)

트랜잭션이 없어서 실행 즉시 MySQL에 적용

CREATE

ALTER

DROP

RENAME

TRUNCATE

DCL

데이터베이스에 접근하고 객체들을 사용하도록 권한을 부여하고 회수하는 명령어

GRANT

REVOKE


SQL문의 특징이 있다.

  • 대소문자를 구분하지 않는다: USE, use, uSE를 모두 동일하게 인식한다.
  • MySQL의 주석: 주석으로 묶으면 글자들이 회색이 된다

-한줄 주석: --

-블록 주석: /* */

  • 열 이름에 별칭(Alias)을 지정할 수 있다: select first_name as이름 from employees;
  • 식별자(데이터베이스 개체의 이름)를 만들 때 규칙:

-a-z, A-Z, 0-9, $, _를 사용할 수 있다.

-최대 64자로 제한

-예약어를 사용할 수 없다.

-공백을 사용하려면 백틱(``)으로 묶어서 사용한다.

-의미 있는 이름을 짓되 너무 길거나 짧은 것은 좋지 않다.


DML 중 테이블의 행을 선택할 수 있는 SELECT문에 대해서 알아본다.

MySQL 5.7버전 document에서 가져온 SELECT문이다.

보이는 것이 SELECT문의 거의 전부이다.

가장 기본적으로 사용하는 것이 select * from tablename; 인데

이 외에도 사진에서 보듯 다양한 옵션을 붙일 수 있다.

 


 

DB를 먼저 선택한다.


employees DB에서 테이블의 정보를 확인한다.


  • FROM

맨 처음 언급했던 가장 기본적으로 쓰이는 select * from tablename; 형태이다.

*는 모든 행을 뜻한다.

from은 지정한 테이블에서 찾는다는 의미이다.


 


  • AS

as를 사용하면 그 행의 alias(별칭)을 지정할 수 있다. 보다 쉽게 불러오기 위하여..


  • WHERE

where은 조건을 붙이는 것이다. DB 테이블에서 이름이 김경호인 행을 찾는다.


  • 연산자 사용

다음은 연산자를 사용하여 행을 선택하는 것이다.

연산자의 종류는 두 가지로 나눌 수 있다.

조건 연산자

=, <, >, <=, <=, <>, !=

관계 연산자 NOT, AND, OR

  • BETWEEN ... AND

between과 and를 사용하면 조건연산자를 사용하지 않고도 범위를 정할 수 있다.


  • IN()

in은 or 조건연산자를 보다 쉽게 사용할 수 있게 한다.


  • LIKE

like는 검색할 때 쓰는 예약어이다. 글자 앞뒤에 %를 붙이면 그 글자를 포함한 단어를 검색한다.

_종신이면 종신앞에 한 글자가 있는 단어를 찾는다.


  • 서브쿼리

예를 들어 김경호보다 키 큰 사람을 선택하려고 한다.

김경호의 키는 177이다. 직접 김경호의 키를 알아놓은 후에 그 키를 설정해서 select할 필요가 없다.

서브쿼리를 사용하면 김경호의 키를 알 수 없어도 김경호보다 큰 사람을 선택할 수 있다.


  • 서브쿼리 ANY

서브쿼리의 다른 예이다.

주소지가 경남인 사람보다 키가 큰 사람을 찾으려고 서브쿼리를 사용했더니 오류가 발생했다.

오류문을 자세히 읽어보면 값이 1개보다 많다고 한다. 주소지가 경남인 사람이 1명보다 더 많기 때문인 것이다.

이러한 경우에는 서브쿼리 앞에 any를 붙여주면 주소지가 경남인 사람들 모두보다 키가 큰 사람들을 선택할 수 있는 것이다.


  • 서브쿼리 =ANY

주소지가 경남인 사람들과 키가 같은 사람들을 선택하고자 한다.

height=any(서브쿼리)를 했더니 두 사람의 값이 나왔다.

=any 대신 in을 썼더니 같은 값을 출력하였다. 주소지가 경남인 사람과 키가 같은 사람 1이거나 2인 사람 모두를 출력한 것이다.


  • ORDER BY

DESC는 내림차순, ASC는 올림차순이다. ASC가 디폴트이다.


  • DISTINCT

중복된 값을 제거하고 선택한다.


  • LIMIT

데이터가 30만 개나 되는 행을 다 출력할 수는 없다. 지정된 개수만 선택할 수 있다.

지정할 개수와 시작점을 설정할 수 있다.


  • 테이블을 복사하여 CREATE

한 테이블을 복사한 새로운 테이블을 생성할 수 있다. 기존 테이블의 특정 열만 선택하여 생성할 수도 있다.

단, PK나 FK 등 제약조건은 복사할 수 없다.


  • GROUP BY

userid로 묶어서 선택한 값들은 볼 수 있다.

sql문을 사용할 때 간단한 사칙연산도 할 수 있는 것을 아는가?

이를 이용한 것이 집계함수이다.

함수명 설명
SUM() 총합
AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
COUNT(DISTINCT) 중복 없는 행의 개수
STDEV() 표준편차
VAR_SAMP() 분산

집계함수를 사용하여 키가 가장 큰 사람과 작은 사람을 선택하고자 한다.

첫 번째 명령문처럼 단순히 이름, 키의 최대값, 최소값을 선택하였더니 예상대로 나오지 않는다.

다시 이름별로 지정하여 SQL문을 실행하여도 원하는대로 나오지 않는다.

최대값과 최소값을 서브쿼리를 사용하여 설정하였더니 원하는대로 값을 확인할 수 있었다.


  • HAVING

총 구매액 중 1000을 넘은 사람을 선택하고자 한다.

WHERE절을 사용하였지만 오류가 발생한다.

집계함수에 대한 조건을 설정할 때에는 HAVING을 사용해야 한다.


  • ROLLUP

이름별로 중간합계를 내고 싶을 때 사용할 수 있다.


맨 처음 보여주었던 MySQL 5.7 document의 SELECT문의 거의 모든 것이다.

나도 실습하면서 SELECT문을 아는 데 많이 도움이 되었다.

'MySQL' 카테고리의 다른 글

MySQL 전체 텍스트 검색  (0) 2020.03.19
MySQL 잠금기능  (0) 2020.02.20
MySQL view(뷰)  (0) 2020.02.17