본문 바로가기

Database

[DB] MySQL 기초 단계

320x100

MySQL에서는 수많은 데이터들을 일정한 질서로 정렬하고
우리가 원하는 데이터만 따로 뽑아서 조회할 수 있습니다.

우리가 만약 비행기를 타고 왔는데, 일정한 조건에 맞는
항공권만 탑승할 수 있다고 생각해봅시다.

16시 20분 이후에 출발하는 비행기이면서, A16 게이트에서 탑승하는 비행기를 찾는다고
생각해 본다면, 이러한 경우를 어떻게 추려낼 수 있을까요?

자, 시작

 


물론 이러한 경우 눈으로도 찾아낼 수 있을 것입니다.


이처럼 우리가 MySQL에서 원하는 값만 추출하고자 합니다.
어떻게 추출할 수 있을까요?

SELECT를 알아보자



SELECT 를 쓰는 형식

select * from 스키마명.테이블명 ;

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

★ 세미콜론, 온점 필수



다양한 함수들을 알아보겠습니다.



BETWEEN 함수

where 키 between 180 and 183 ;
= 180 이상, 183 미만의 키를 가진 사람을 반환합니다.




IN 함수

where 주소 in ("전남", "경남", "경기");
= 주소가 전남 or 경남 or 경기인 사람을 반환합니다.




LIKE 함수 (문자열만 해당. 숫자열 해당안함)

WHERE LIKE "김%";
= 김으로 시작하는 사람을 모두 반환합니다.

WHERE LIKE "김__";
= 김으로 시작하는 사람 중 이름이 3글자인 사람을 반환합니다.

WHERE LIKE "김%수;
= 김으로 시작하구 수 로 끝나는 사람중 이름 글자가 제한없는
모두를 반환합니다.




서브쿼리문 (특별한 용어 없음)

where height > (SELECT height FROM usertbl where name = '김경호')
= height가 김경호의 height보다 큰 사람을 반환합니다.
* 다른 column의 조건을 넣으면 오류가 나옵니다.



ANY 함수

ANY는 서브 쿼리의 여러 결과 중 한가지만 만족해도 됩니다.

select name, height
from usertbl
where height >= ANY (Select height from usertbl where addr = "경남");
= 경남이 주소인 사람의 키보다 키가 더 큰사람은 모두 반환합니다.




ALL 함수

ALL은 서브 쿼리의 여러 결과를 모두 만족해야 합니다.

select name, height from usertbl where height >= ALL (Select height from usertbl where addr = "경남");


ORDER BY 함수

글자의 순서를 찾는 함수입니다.
두 가지로 쓰입니다✨

오름차순 함수

ORDER BY mDATE ;
= mDATE을 오름차순으로 반환합니다.

 

내림차순 함수

ORDER BY mDATE DESC;
=mDATE을 내림차순으로 반환합니다.


DISTINCT 함수

중복된 것은 하나만 남기는 함수
(각 목록별로 한개씩만)

SELECT DISTINCT addr FROM usertbl ;
= 주소의 중복을 제거하고 반환합니다.

SELECT DISTINCT ADDR FROM usertbl ORDER BY ADDR;
= 주소로 내림차순 정렬한 것중 주소의 중복은 제거하고
단일 데이터만 남깁니다.



LIMIT 함수

SELECT emp_no, hire_date from employees
ORDER BY hire_date ASC LIMIT 6;

=emp_no와 hire_date를 오름차순 정렬하고, 6개 까지만 반환합니다.


CREATE 함수 (테이블 복사)

CREATE TABLE buytbl2 (SELECT * FROM buytbl); SELECT * FROM buytbl2;
= buytbl 테이블을 복사하고 → buytbl2 라는 테이블을 만들어서
그대로 내용을 복사합니다.

CREATE TABLE buytbl3 (SELECT userID, prodName FROM buytbl);
SELECT * FROM buytbl3;
= buytbl 테이블에서 userID와 prodName만 복사하고 → buytbl3 라는
테이블을 만들어서 그대로 두 컬럼 내용만 복사합니다.



위 경우, 테이블을 새롭게 만들 때가 아닌, 복사하는 경우를 의미합니다.
새롭게 만든다면 다른 테이블을 참조한 부분을 없애면 됩니다!

AS 함수

SELECT userID AS '사용자 아이디', SUM(amount) AS '총 구매 개수'
From buytbl group by userID;
= userID를 사용자 아이디로 칭한다 → userID별로 합한 amount들을
총 구매 개수라고 칭한다 → userID와 SUM(amount)를 반환합니다.


GROUP BY 함수

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

= userID가 같은 amount의 값들은 모두 합해서 반환한다.
* AVG, SUM, MAX, MIN 등의 연산과 함께 쓰이는 경우가 많습니다.


잠깐 여기서, 연산 과정에 함께 사용하는 함수들을 정리해보았습니다.
특별히 파이썬이나, 엑셀에서까지 광범위하게 쓰이는 함수이기 때문에 큰 어려움은
없을 것이라고 생각이 듭니다.

count 함수
갯수 구하기

avg 함수
평균 구하기

max/min 함수
최대/최소 구하기

sum 함수
합계 구하기



HAVING 함수

사용하기 상당히 까다로운 함수입니다.

SELECT userID,SUM(price*amount)
FROM buytbl
GROUP BY userID HAVING SUM(price*amount) > 1000;
= userID와 가격*갯수를 곱한 값을 출력한다 → userID별로 중복 제거하고 반환한다.
→ 헌데 이제, 가격*갯수가 1000 이상인 값만 출력한다.

GROUP BY 함수를 쓰면서, 특별한 조건을 설정할때 사용합니다.


WITH ROLLUP

SELECT num, groupName, SUM(price * amount)
FROM buytbl
GROUP BY groupNAME, num WITH ROLLUP;
= num 별로 중간 합계를 구해서 보여줍니다.


WITH ROLLUP은 이를테면
' 항목별 중간 합계 ' 입니다.

 

예시화면을 봐보겠습니다.

 

자 buytbl이라는 테이블에서 num, groupname, price의 합계를 선택

groupname, num을 묶었구요.

이를 중간합계로 내겠습니다.

 

잠깐 만든 예시입니다.

 


위의

4번째, 8번째, 11번째, 11번째 행 부분이 부분합계가 표시된 부분입니다.

서브쿼리를 응용해볼까요?

SELECT NAME, height FROM usertbl WHERE height = (SELECT MAX(height) FROM usertbl) or height = (SELECT MIN(height) FROM usertbl);



= 키가 가장 큰 사람 혹은 키가 가장 작은 사람의 이름과 키를 반환합니다.




이상으로, SELECT에서 자주 쓰이는 쿼리문들을 알아보았습니다.

다음시간에는 더 많은 응용공식을 진행해보겠습니다.

728x90