Database
[MySQL] SQL 고급 실습 연습하기1
31daylee
2024. 1. 24. 13:39
728x90
SQL 실습
테이블 생성~테이블 결합
✔ Guide Line
1️⃣ 총 3개의 테이블을 생성합니다. 각각의 테이블 이름은 [bank_account], [bank_customer], [bank_transaction] 이 되며, CREATE TABLE `테이블명`(`컬럼명1 자료형1, 컬럼명 2 자료형2`.. )으로 작성을 하면 됩니다.
2️⃣ 그 후 각각의 테이블에 데이터를 입력하는 과정을 진행합니다.
INSERT INTO `테이블명` VALUES(데이터1, 데이터2, 데이터3 ... );
✔ 관련 쿼리문
CREATE TABLE `bank_customer`(
`c_no` VARCHAR(14) NOT NULL PRIMARY KEY,
`c_name` VARCHAR(20) NOT NULL,
`c_dist` INT NOT NULL DEFAULT 0,
`c_phone` CHAR(20) NOT NULL UNIQUE,
`c_addr` VARCHAR(100)
);
CREATE TABLE `bank_account` (
`a_no` VARCHAR(11) NOT NULL PRIMARY KEY,
`a_item_dist` VARCHAR(2) NOT NULL,
`a_item_name` VARCHAR(20) NOT NULL,
`a_c_no` VARCHAR(14) NOT NULL,
`a_balance` INT DEFAULT 0,
`a_open_date` DATE NOT NULL
);
CREATE TABLE `bank_transaction` (
`t_no` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`t_a_no` VARCHAR(11) NOT NULL,
`t_dist` INT NOT NULL,
`t_amount` INT NOT NULL DEFAULT 0,
`t_datetime` DATETIME NOT NULL
);
✔ 테이블
✔ 문제 1
가장 많은 잔고를 보유한 자유저축 예금계좌를 조회 하시오
작성 Query
#실습2-18
SELECT * FROM
`bank_account`
WHERE
`a_item_name` = '자유저축예금'
ORDER BY
`a_balance` DESC #내림차순으로 정렬 -> 가장 큰 값이 위로 실행
LIMIT 1; #가장 큰 값 중 하나만 조회
#실습2-18(다른 버전)
SELECT * FROM `bank_account`
WHERE `a_balance` = (SELECT MAX(`a_balance`) FROM `bank_account` WHERE `a_item_dist`='S1');
정렬하기_ ORDER BY
ORDER BY `칼럼명` DESC LIMIT 표시할_레코드수;
✔ 문제 2
거래내역에서 입금 건수, 출금 건수, 조회 건수를 조회 하시오
작성 Query
#실습2-20
SELECT
COUNT(case when t_dist = '1' then 1 END) AS `입금 건수`,
COUNT(case when t_dist = '2' then 1 END) AS `출금 건수`,
COUNT(case when t_dist = '3' then 1 END) AS `조회 건수`
FROM `bank_transaction`;
#실습 2-20(강사님버전)
SELECT
COUNT(if(`t_dist`=1,1,NULL)) AS `입금 건수`,
COUNT(if(`t_dist`=2,1,NULL)) AS `출금 건수`,
COUNT(if(`t_dist`=3,1,NULL)) AS `조회 건수`
FROM `bank_transaction`;
조건_ CASE WHEN
조건_ COUNT
📃 CASE WHEN 함수
CASE WHEN [조건식] THEN ‘반환 값’ END ‘조건에 만족하지 않을 경우 반환 값’
📃 COUNT 함수
SELECT COUNT(*) FROM `테이블명`
- 조회된 전체행 건수 반환
SELECT COUNT(`컬럼명`) FROM `테이블명`
- 컬럼의 값이 NULL 인 행 제외한 데이터 건수 반환
- NULL 포함: NVL, DECODE 활용 -> COUNT(NVL(`컬럼명`,0))
SELECT COUNT(DISTINCT 컬럼명) FROM `테이블명`
- 중복 데이터 제외
🚨 관련 오류
SQL Error (1630): FUNCTION substring does not exist. | 해결책 ⇒ COUNT함수와 괄호 사이에 공백을 없애기 |
✔ 문제 3
거래 구분이 입금이고 (t_dist :1)큰 거래 금액 순으로 아래와 같이 데이터가 조회 되도록 하시오
작성 Query
#실습2-29
SELECT
`t_no`,
`a_no`,
`c_no`,
`t_dist`,
`a_item_name`,
`c_name`,
`t_amount`,
`t_datetime`
FROM `bank_transaction` AS a
JOIN `bank_account`AS b ON a.t_a_no = b.a_no
JOIN `bank_customer` AS c ON b.a_c_no = c.c_no
WHERE `t_dist` =1
ORDER BY `t_amount` DESC;
내부조인_INNER JOIN
SELECT `칼럼명` FROM `테이블1` JOIN `테이블2` ON 테이블1.칼럼 = 테이블2.칼럼;
728x90