마트철수
[044] SQL 기초 / SQL 고급 본문
2024.07.10(수)
MySQL 2일차
해당 단원은 직접 코드를 작성해보는 게 중요할 것 같다.
- 어려웠던 부분 체크해서 다시 복습하기
- 노트북에도 DB 구축해두기
이것이 MySQL이다
PART01 MySQL 설치 및 DB 구축과정 미리 실습하기
- CH01 DBMS 개요와 MySQL 소개
- CH02 MySQL 설치
- CH03 MySQL 전체 운영 실습
PART02 MySQL 기본
- CH04 데이터베이스 모델링
- CH05 MySQL 유틸리티 사용법
- CH06 SQL 기본
- CH07 SQL 고급
PART03 MySQL 고급
- CH08 테이블과 뷰
- CH09 인덱스
- CH10 스토어드 프로그램
- CH11 전체 텍스트 검색과 파티션
CH06 SQL 기본
SELECT문
특정 조건의 데이터만 조회
- BETWEEN... AND: 범위 내의 값을 조회
WHERE age BETWEEN 20 AND 30;
- IN( ): 여러 값을 OR로 연결하여 조회
WHERE addr IN ('경남', '전남', '경북');
- LIKE ex) WHERE name LIKE '김%';
WHERE name LIKE '김%';
서브쿼리(SubQuery, 하위쿼리)
- 단일형 서브쿼리: 쿼리문 안에 또 다른 쿼리문이 들어 있는 형태
SELECT * FROM employees WHERE dept_id = (SELECT dept_id FROM departments WHERE dept_name = 'Sales');
- 다중행 쿼리: 서브쿼리의 결과가 둘 이상이 되면 에러 발생 → ANY, ALL, SOME 연산자 사용
- ANY: 하나라도 만족하면 가능
WHERE salary > ANY (SELECT salary FROM employees WHERE dept_id = 10);
- ALL: 모두 만족해야 함
WHERE salary > ALL (SELECT salary FROM employees WHERE dept_id = 10);
데이터 정렬: ORDER BY
- 원하는 순서대로 정렬하여 출력
ORDER BY name ASC, age DESC;
중복 제거: DISTINCT
- 중복된 값은 하나만 남김
SELECT DISTINCT addr FROM usertbl;
출력 개수 제한: LIMIT
- 상위 N개만 출력
LIMIT 5;
- 시작과 개수 지정
LIMIT 0, 5;
테이블 복사: CREATE TABLE ... SELECT
- 새로운 테이블 생성과 동시에 데이터 복사
CREATE TABLE new_tbl AS SELECT * FROM old_tbl;
GROUP BY 및 HAVING 그리고 집계 함수
GROUP BY절
- 집계 함수와 함께 사용하여 효율적인 데이터 그룹화
SELECT userID, SUM(amount) FROM buytbl GROUP BY userID;
HAVING 절
- GROUP BY 결과에 조건 추가
SELECT userID, SUM(amount) FROM buytbl GROUP BY userID HAVING SUM(amount) >= 1000;
집계 함수
- COUNT
SELECT COUNT(*) FROM usertbl;
- ROLLUP: 중간 합계 또는 총합 계산
SELECT userID, SUM(amount) FROM buytbl GROUP BY userID WITH ROLLUP;
데이터의 변경을 위한 SQL문
데이터의 삽입: INSERT
- 데이터를 테이블에 삽입
INSERT INTO testTbl1 (col1, col2, col3) VALUES (val1, val2, val3);
데이터의 수정: UPDATE
- 기존 데이터를 수정
UPDATE testTbl1 SET col1 = val1, col2 = val2 WHERE condition;
데이터의 삭제: DELETE FROM
- 데이터를 삭제
DELETE FROM testTbl1 WHERE condition;
조건부 데이터 입력, 변경
에러 발생 처리
- 기본 키 중복 또는 값의 타입 불일치 시 에러 발생 가능
- 대용량 데이터 처리 시 에러 발생하지 않은 구문만 실행
CRUD 기초
- CREATE: 데이터 삽입 (INSERT)
- READ: 데이터 조회 (SELECT)
- UPDATE: 데이터 수정 (UPDATE)
- DELETE: 데이터 삭제 (DELETE)
CH07.1 SQL 고급 - 데이터타입, 내장함수
MYSQL의 데이터 형식
숫자 데이터 형식
- INT, FLOAT, DOUBLE 등

문자 데이터 형식
- CHAR(n), VARCHAR(n): 대소문자 구분 없음
- BINARY(n), VARBINARY(n): 대소문자 구분

실습
SQL 실습 절차
- sqldb TEMP 폴더에 파일 넣기
- File 탭에서 SQL 파일 열기
- '번개' 아이콘으로 실행
- SCHEMAS 새로고침
추가 예제
OR 사용 예제 + IS NOT NULL 사용 예제 + GROUP BY 사용 예제
-- OR을 사용해야 둘 중 하나만 만족해도 출력 가능
SELECT name, height
FROM usertbl
WHERE height = (SELECT MAX(height) FROM usertbl) OR height = (SELECT MIN(height) FROM usertbl);
-- SELECT COUNT(*) AS '휴대폰이 있는 사용자' FROM usertbl
-- WHERE mobile1 IS NOT NULL;
SELECT COUNT(mobile1) AS '휴대폰이 있는 사용자' FROM usertbl;
-- ~~ 별이 나오면 GROUP BY 예상 가능
SELECT userID AS '사용자', SUM(amount*price) AS '총구매액'
FROM buytbl
GROUP BY userID;
HAVING 사용 예제
-- 총 구매액이 1,000 이상인 사용자만 출력하세요
-- WHERE절은 그룹화하기 전에 필터링하는 작업이다
-- 따라서 그룹화된 데이터에 조건을 추가하려면 HAVING을 사용해야한다.
SELECT userID AS '사용자', SUM(amount*price) AS '총구매액'
FROM buytbl
GROUP BY userID
HAVING SUM(price*amount) >= 1000;
내장 함수 예제
- LENGTH(), UPPER(), ROUND()
-- country 테이블 각 레코드의 Name 칼럼의 글자수를 표시하시오.
SELECT length(NAME) FROM country;
-- country 테이블의 나라명(Name 칼럼)을 앞 세글자만 대문자로 표시하시오)
-- UPPER: 특정 글자를 대문자로 변경
-- MID: 문자열 추출(문자열, 시작 위치, 길이), 시작 위치는 1부터 시작
SELECT UPPER(MID(name,1,2)) FROM country;
-- country 테이블의 기대수명을 소수점 첫째자리에서 반올림해서 표시하시오
-- ROUND: 반올림(반올림할 값, 몇째 자리에서 반올림할지)
SELECT name AS '이름', round(lifeexpectancy, 1) as '기대수명' FROM country;
실습에서 헷갈렸던 예제
1. WHERE절은 그룹핑 하기 전에 적용됨!

2. Having절
- WHERE와 비슷한 개념으로 조건 제한하는 것인지만, 집계 함수에 대해서 조건을 제한하는 것
- 꼭 GROUP BY절 다음에 나와야 함 (순서 바뀌면 안됨)

'KB IT's Your Life > 교육' 카테고리의 다른 글
| [046] 프로그래머스: 재귀와 완전탐색 (0) | 2024.07.12 |
|---|---|
| [045] SQL 고급 / 테이블과 뷰 (0) | 2024.07.11 |
| [043] 데이터베이스 활용 및 MySQL 환경 구축 (0) | 2024.07.09 |
| [042] JAVA 마지막: 데이터 입출력 (0) | 2024.07.08 |
| [041] 프로그래머스: 유효한 괄호, 두 큐 합 같게 만들기, 괄호 회전하기, 주식 가격 (1) | 2024.07.05 |