본문 바로가기
Computer Science/Database

[데이터베이스] SQL문 기본 - SELECT 문

by ggyongi 2021. 8. 10.
반응형

0. 데이터베이스 지정

USE 데이터베이스이름;

데이터베이스는 한번만 지정해도 된다. 이후의 쿼리문은 모두 이 데이터베이스 안에서 실행되게 된다.

 

 

1. SELECT ... FROM

SELECT 필드이름 FROM 테이블이름;

SELECT 필드이름 FROM 테이블이름 WHERE 조건식;

<예시>
SELECT * FROM usertbl WHERE name = 'LUKAS';

- 다양한 조건식 활용

<관계연산자>
-- 조건 연산자 : =, <, >, <=, >=, !=
-- 관계 연산자 : AND, OR, NOT 
SELECT * FROM usertbl WHERE age >= 20 AND age <= 30;
SELECT * FROM usertbl WHERE age >= 20 OR height >= 170;


<BETWEEN ... AND> 
-- 연속적인 숫자로 구성되어있을 때 사용 가능
SELECT * FROM usertbl WHERE age BETWEEN 20 AND 30;


<IN>
SELECT name FROM usertbl WHERE addr IN ('서울', '경기', '인천');


<LIKE>
-- '김%'는 제일 앞글자가 김이고 뒤는 무엇이든(%) 허용
-- '_'는 한글자 매칭
-- '_기자'는 맨 앞 글자가 한 글자이고 그다음 글자가 '기자'인 사람을 조회함
-- '_용%'와 같이 복합적 사용 가능
SELECT name FROM usertbl WHERE name LIKE '_기자';

결과는 김기자, 이기자, 박기자 등이 추출됨

 

- 서브쿼리 활용

SELECT name, height FROM usertbl
    WHERE height > (SELECT height FROM usertbl WHERE name = 'LUKAS';)

이때 괄호안의 결과가 하나로 특정되지 않고 둘 이상의 값을 반환하게 되면 오류가 발생한다. 그럴 때 ANY 구문이 필요하다. ANY 괄호 안의 모든 결과에 대해 어느 한 결과라도 충족되면 추출하게 된다. ALL 구문을 사용하게 되면 모든 결과에 대해 모두 만족하는 값만 추출하게 된다.

SELECT name, height FROM usertbl
    WHERE height >= ANY (SELECT height FROM usertbl WHERE addr = '서울';)

 

- ORDER BY

결과물의 순서를 조절해주는 구문

SELECT name FROM usertbl ORDER BY height; -- 키 오름차순
SELECT name FROM usertbl ORDER BY height DESC; -- 키 내림차순
SELECT name FROM usertbl ORDER BY height DESC, name; -- 키가 같을 때 이름으로 정렬

 

- DISTINCT

중복된 것은 하나 씩만 출력

SELECT DISTINCT addr FROM usertbl;

 

- LIMIT

결과의 개수 제한

SELECT name FROM usertbl LIMIT 5;
SELECT name FROM usertbl LIMIT 3, 5; -- 세번째부터 다섯개 출력

 

- CREATE TABLE ... SELECT

테이블을 복사해서 사용할 때 주로 사용

CREATE TABLE 새로운테이블 (SELECT 복사할열 FROM 기존테이블);

CREATE TABLE tbl2 (SELECT name, height FORM tbl1);

 

 

 

- GROUP BY절

구매 테이블에서 사용자가 구매한 물품의 개수를 보려면 다음과 같음

SELECT userID, amount FROM buytbl ORDER BY userID;

근데 각 사용자별 구매한 물품의 총 개수를 알고싶다면 다음을 활용할 수 있다.

SELECT userID, SUM(amount) FROM buytbl GROUP BY userID;

이렇게 GROUP BY를 사용할때는 SUM()과 같은 집계함수가 사용되는데 자주 쓰이는 집계함수는 다음과 같다.

AVG() : 평균

MIN() : 최솟값

MAX() : 최댓값

COUNT() : 행 개수

COUNT(DISTINCT) : 행 개수(중복없이)

STDEV() : 표준 편차

VAR_SAMP() : 분산

USE sqldb;
SELECT userID, AVE(amout) AS '평균 구매 개수' FROM buytbl GROUP BY userID;
-- AS는 별칭으로, 열 이름을 바꿔 보여준다.

 

- HAVING

WHERE와 비슷한 개념으로 조건을 제한하는 것이지만, 집계 함수에 대해서 조건을 제안하는 것. (WHERE는 집계 함수를 사용할 수 없음). HAVING은 반드시 GROUP BY 다음에 나와야 한다.

SELECT userID AS '사용자', SUM(price*amount) AS '총구매액'
	FROM buytbl
    GROUP BY userID
    HAVING SUM(price*amount) > 1000;

 

- WITH ROLLUP

총계 또는 중간 합계가 필요할 때 사용한다.

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글