기획자의 하드스킬모음

MYSQL 공부 2일차

yeahse09 2022. 10. 4. 18:45
728x90

공부를 이때까지 안한게 아니다. 블로그에 올릴 만한 내용이 없어서 그랬던 것일 뿐. 핑계아님.

어쨌든 쿼리문 중에 특정 상황에 도움 되는 쿼리문을 좀 올려보려구 한다.

테이블 구성 보고 싶을 때

SHOW TABLE STATUS;

테이블 열 이름 확인 하고 싶을때

DESCRIBE 테이블 이름;

어떤 특정 조건(숫자값일 경우) 사이에 있는 값 조회

AND 또는 BETWEEN 사용

SELECT 열이름 FROM 테이블이름 WHERE 열이름 BETWEEN 값1 AND 값2;

SELECT 열이름 FROM 테이블이름 WHERE 열이름>= 값1 AND 열이름>=값2;

데이터 내용으로 값 조회

SELECT 열이름 FROM 테이블이름 WHERE 열이름 LIKE '찾고자하는문자열%';

EX. 찾고자 하는 데이터가 '김'이 제일 앞에 들어가 있는 문자열이라면 '김%'를 넣으면 된다.

서브쿼리!! (너무 중요)

예를 들어서, 내가 경남 지역에 사는 사람의 키보다 크거나 같은 사람을 알고 싶다고 하자.

데이터를 눈으로 살펴보니 경남 지역에 사는 사람, 그리고 이들의 키는 철수-170,민지-173  이다.

그렇다면 맨 처음으로 이런 쿼리문을 쓸 수 있다.

 

SELECT name,height FROM userTbl WHERE height >= 170 OR height>=173;

 

=> 근데 조건문에 너무 특정 숫자가 들어가는건 좀 더 광범위한 데이터를 만났을 때 문제가 된다.

만약, 데이터가 100만개라면..? 이 데이터를 다 보고 170,173을 찾아서 조건문에 넣을건가..?

여기서 나온 개념이 'subquery'이다. 만약, 경남지역 친구들의 키를 눈으로 데이터를 찾아서 알아내지 않고

얻을 수 있다면, 어떤 쿼리를 작성할 수 있을까. addr이 지역이름을 나타내는 칼럼이라고 하자.

SELECT height FROM userTbl WHERE addr='경남';

이 쿼리가 바로 서브쿼리이다!! 이 쿼리문을 where조건문에 집어넣으면, 이 전체 쿼리문이 조건으로 들어가는 것이다.

 

SELECT name,height FROM userTbl WHERE height >= SELECT height FROM userTbl WHERE addr='경남';

 

=>그런데 이렇게 작성하면 문제가 발생한다. 아까 본 것처럼, 경남 지역 친구들의 키는 두 가지이다. 170 또는 173.

=>그럴려면 or이라는 연산자가 필요한데... 어디에 집어넣을지를 모르겠다...

=>이를 해결하기 위해 , OR 대신 ANY를 사용하면 해결된다.

 

SELECT name,height FROM userTbl WHERE height >= ANY (SELECT height FROM userTbl WHERE addr='경남');

이 쿼리문의 의미는 다음과 같다.

주소가 경남에 해당하는 키(HEIGHT)데이터라면 무엇이든 SELECT해서 이 값들중 어떤 것이든, 이것보다 
크거나 같은 데이터를 뽑자.

 

*SOME=ANY=IN  다 같은 용도로 쓰임

*참고로 ALL을 쓰면, 모든 값을 충족하는 값을 뽑아야 한다. 즉, 170보다는 큰데 173보다는 작은 171,172 같은 값은 뽑아 낼 수 없다. 

중복된 것은 1개씩만 보여주는

DISTICT를 쓰면, 중복된 건 한 개만 골라서 보여줄 수 있다.

예를 들어 addr데이터가 경북,경남,경남,서울,서울,경기,경북    이렇게 담겨있다.

SELECT DISTINCT addr FROM userTbl; 를 실행했을 때 결과물.

=> 경북,경남,서울,경기 

집계 함수

주로 GROUP BY와 함께 사용하며, 데이터를 그룹화해준다.

예를 들어, 토끼,곰,사자 가 날짜 별로 빵을 먹은 갯수가 데이터로 나타나 있다고 하자. 

토끼-3

곰-4

사자-1

토끼-2

곰-2

곰:6개 토끼:5개 사자:1 개의 빵을 먹었다. 이걸 다 일일히 셀 필요 없이 GROUP BY로 SUM을 하면 그룹별로 빵을 먹은 갯수를 추출할 수 있다.

SELECT SUM(더해야할데이터, 즉 빵 갯수) FROM 테이블이름 GROUP BY 열이름(그룹의기준이되는것, 즉 동물의 이름);

 

집계함수 중에 HAVING은 그룹에게 WHERE조건을 줄 때 쓰는 것 꼭 기억하기!!
중간합계가 필요할 때

ROLL UP을 사용하면, 소합계가 나온다. 즉 중간중간에 특정 기준으로 데이터들의 합계를 알고 싶다면.

728x90