본문 바로가기

Database

SELECT문

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

 

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

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

 

[출처] https://soranta.tistory.com/5

 

MySQL SELECT문

select문에 들어가기 앞서... RDBMS에서는 데이터베이스 조작을 위해 SQL문을 명령어로 사용한다. SQL문을 세 가지로 분류할 수 있다. DML(Data Manipulation Language) •테이블의 행을 조작(선택, 삽입, 수정,.

soranta.tistory.com

 

'Database' 카테고리의 다른 글

[MySQL] DB 백업을 위한 방법  (0) 2022.04.18
INSERT, UPDATE, DELETE문  (0) 2022.04.08
뷰(View)와 트리거(Trigger)  (0) 2022.03.25
DBMS(Database Management System) 개요  (0) 2022.03.24
데이터베이스  (0) 2022.03.15