기존 테이블 복사
create table [생성테이블이름]
(select [복사열1],[복사열2],... from [복사테이블] [where 복사 조건]);
복사하고자 하는 기존 user 테이블
전체 복사
create table user_back (select * from user);
select * from user_back;
일부 컬럼만 복사
create table user_back2 (select uno, uid, uname from user);
select * from user_back2;
조건에 해당하는 데이터만 복사
create table user_back3 (select uno, uid, uname from user where uno <= 3);
select * from user_back3;
notice_board 테이블에서 관리자가 쓴 글의 모든 정보를 notice_board_admin으로 복사
create table notice_board_admin
(select * from notice_board where uno in (select uno from user where uauthor = 'A'));
select * from notice_board_admin;
user 테이블을 복사해서 user_notice 테이블을 생성
이때 user 테이블의 복사 대상 데이터는 notice_board에서 제목에 '테스트'를 포함하는 글을 쓴 user들 입니다
create table user_notice
(select * from user where uno in (select uno from notice_board where title like '%테스트%'));
select * from user_notice;
GROUP BY
테이블 안의 데이터들을 특정 컬럼을 기준으로 그룹지을때 사용
group by에 사용한 컬럼만 조회할 수 있다
(중복되지 않는 다른 컬럼의 데이터를 무엇을 조회할지 알 수 없으므로)
그룹을 정할 때 여러 컬럼을 사용하여 그룹을 지을 수 있다
그룹 컬럼이 여러개인 경우 해당 컬럼들이 전부 같은 데이터가 한 그룹이 된다
집계함수
테이블의 특정 컬럼 데이터를 사용하여 통계 데이터를 만들어내는 기능
테이블의 데이터들의 특정 컬럼을 연산하여 결과를 내는 기능
종류 : count(), sum(), avg(), min(), max() 등
1. count() : 행의 갯수를 출력하는 함수
(*) -> null 행까지 전부 계산
(컬럼) -> 컬럼이 null이 아닌 행 수 계산
select order_pname, count(order_pname) from ordertb group by order_pname;
2. sum(숫자타입컬럼) : 숫자 타입 컬럼들의 행 데이터 합 출력
-- 각 아이디 별로 물품을 산 전체 갯수 구하기
select order_id, sum(order_cnt) from ordertb group by order_id;
-- 각 아이디 별로 물품을 산 전체 금액 구하기
select order_id, sum(order_per_price*order_cnt) from ordertb group by order_id;
-- 모든 사용자들이 구매한 전체 금액
select sum(order_per_price*order_cnt) as total from ordertb;
3. avg(숫자타입컬럼) : 평균값을 구하는 집계함수
각 아이디별 평균 구매금액 조회하기
select order_id, avg(order_per_price*order_cnt) as avg_price
from ordertb group by order_id;
4. min(숫자타입컬럼 or 날짜타입컬럼) : 해당 컬럼의 최소값 조회. 날짜는 가장 이전 날짜
ordertb 에서 최소 상품값 조회하기
select min(order_per_price) from ordertb;
ordertb에서 각 아이디별 최소 상품 값을 출력
select order_id, min(order_per_price) from ordertb group by order_id;
5. max(숫자타입컬럼 or 날짜타입컬럼) : 해당 컬럼의 최대값 조회. 날짜는 최근 날짜
select max(order_date) from ordertb;
ordertb에서 각 아이디별로 가장 최근에 물건을 구매한 날짜를 조회
select order_id, max(order_date) from ordertb group by order_id;
여러 컬럼을 그룹지을 수 있다
select ustate,uauthor from user group by ustate,uauthor;
HAVING
집계함수의 결과 값을 조건 절로 사용하는 문법
ordertb에서 물품을 3번 이상 구매한 id를 조회
select order_id, count(*) from ordertb group by order_id having count(*) >= 3;
ordertb에서 물품을 구매한 총 금액이 4,000,000원을 넘는 id를 조회
select order_id, sum(order_per_price*order_cnt)
from ordertb group by order_id having sum(order_per_price*order_cnt) > 4000000;
ordertb에서 8월 중 물품을 구매한 총 금액이 4,000,000원을 넘는 id를 조회
select order_id, sum(order_per_price*order_cnt)
from ordertb
where order_date between '2024-08-01' and '2024-09-01'
group by order_id
having sum(order_per_price*order_cnt) > 4000000;
'MySQL' 카테고리의 다른 글
[MySQL] 함수 (2) | 2024.09.07 |
---|---|
[MySQL] 조인 (0) | 2024.09.06 |
[MySQL] DML 데이터조작어 UPDATE, DELETE (0) | 2024.09.04 |
[MySQL] SELECT문 WHERE BETWEEN, IN(),LIKE, 서브쿼리 (0) | 2024.09.03 |
[MySQL] DML 데이터조작어 SELECT문 (2) | 2024.09.02 |