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
'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 |