중복제거 할때1 : distinct 인데 행단위로 제거한다. so 값의 범주 확인할때쓴다.
중복제거 할때2: group by 인데 다른 행들을 살려서 집계에 활용할수있다.so 그룹별 집계할때쓴다.
ex)그룹핑을 사용하는 예시 :
손흥민의 주문 개수는? ???
SELECT COUNT(id)
FROM t_shopping
WHERE userName = '손흥민';
손흥민이 산 상품은? ??? 운동화2개 스커트1개
SELECT pname
FROM t_shopping
WHERE userName ='손흥민';
스커트를 산 사람은? ??? : 송혜교 , 중복 되지않게하기위해 distinct
SELECT DISTINCT userName
FROM t_shopping
WHERE pname ='스커트';
가장 많이 주문한 사람의 아이디와 이름, 주문개수는? ??? :손흥민 , AS CNT 는 앞부분 이름 정해주는것
SELECT userId, userName , COUNT(userId)AS cnt
FROM t_shopping #테이블명
GROUP BY userId
ORDER BY cnt DESC; #컬럼명 기본값이 asc 그래서 생략가능
회원가입은 하되 , 주문은 아직 하지않은 회원 ???
user7 차태진 가입.
INSERT INTO t_shopping
SET userId = 'user7',
userPw ='1234',
userName = '차태진',
address='대전';
pname='', 못함
DROP DATABASE mall;
CREATE DATABASE mall;
USE mall;
CREATE TABLE t_shopping(
id INT(5) PRIMARY KEY AUTO_INCREMENT,
userId CHAR(30) NOT NULL,
userPw CHAR(30) NOT NULL,
userName CHAR(30) NOT NULL,
address CHAR(50) NOT NULL,
pname CHAR(50) NOT NULL,
price INT(5) NOT NULL
);
INSERT INTO t_shopping
SET userId = 'user1',
userPw = 'pass1',
userName = '손흥민',
address = '런던',
pname = '운동화',
price = 1000000;
INSERT INTO t_shopping
SET userId = 'user2',
userPw = 'pass2',
userName = '설현',
address = '서울',
pname = '코트',
price = 100000;
INSERT INTO t_shopping
SET userId = 'user3',
userPw = 'pass3',
userName = '원빈',
address = '대전',
pname = '반바지',
price = 30000;
INSERT INTO t_shopping
SET userId = 'user4',
userPw = 'pass4',
userName = '송혜교',
address = '대구',
pname = '스커트',
price = 15000;
INSERT INTO t_shopping
SET userId = 'user5',
userPw = 'pass5',
userName = '소지섭',
address = '부산',
pname = '코트',
price = 100000;
INSERT INTO t_shopping
SET userId = 'user6',
userPw = 'pass6',
userName = '김지원',
address = '울산',
pname = '티셔츠',
price = 9000;
INSERT INTO t_shopping
SET userId = 'user6',
userPw = 'pass6',
userName = '김지원',
address = '울산',
pname = '운동화',
price = 200000;
INSERT INTO t_shopping
SET userId = 'user1',
userPw = 'pass1',
userName = '손흥민',
address = '런던',
pname = '코트',
price = 100000;
INSERT INTO t_shopping
SET userId = 'user4',
userPw = 'pass4',
userName = '송혜교',
address = '울산',
pname = '스커트',
price = 15000;
INSERT INTO t_shopping
SET userId = 'user1',
userPw = 'pass1',
userName = '손흥민',
address = '런던',
pname = '운동화',
price = 1000000;
INSERT INTO t_shopping
SET userId = 'user5',
userPw = 'pass5',
userName = '소지섭',
address = '부산',
pname = '모자',
price = 30000;
SELECT * FROM t_shopping ;
#1. 손흥민의 주문 개수는? ???
SELECT *
FROM t_order;
SELECT id
FROM t_user
WHERE userName = '손흥민';
SELECT COUNT(id)
FROM t_order
WHERE userno =1;
#2. 손흥민이 산 상품은? ???
SELECT ProductNo
FROM t_order
WHERE userNO =1;
SELECT *
FROM t_product
WHERE id IN(1,5);
#3. 스커트를 산 사람은? ???
SELECT *
FROM t_product
WHERE pname ='스커트';
SELECT userNo
FROM t_order
WHERE productNo =4;
SELECT userName
FROM t_user
WHERE id =4;
#4. 가장 많이 주문한 사람의 아이디와 이름, 주문개수는? ???
SELECT userNo,COUNT(userNo) AS cnt
FROM t_order
GROUP BY userNo
ORDER BY cnt DESC;
SELECT userName
FROM t_user
WHERE id =1;
#5. 소지섭이 사용한 총 금액은? ???
SELECT id
FROM t_user
WHERE userName = '소지섭';
SELECT productNo
FROM t_order
WHERE userNo =5;
SELECT SUM(price)
FROM t_product
WHERE id IN(5,8);
SELECT *
FROM t_order;
SELECT *
FROM t_user;
SELECT *
FROM t_order
INNER JOIN t_user
ON t_order.userNo=t_user.id;
SELECT *
FROM t_order
INNER JOIN t_product
ON t_order.productNo = t_product.id;
테이블 3개도 조인인가능? yes -> 먼저 나오는 테이블이 왼쪽 , 그다음 나오는 테이블이 오른쪽.
SELECT *
FROM t_order
INNER JOIN t_user
ON t_order.userNo=t_user.id
INNER JOIN t_product
ON t_order.productNo=t_product.id;
조인 결과를 하나의 테이블로 볼수있다.
조인 결과 실제 테이블 x . 가상의 테이블 (view) -> update ,delete ,insert x
DROP DATABASE mall;
CREATE DATABASE mall;
USE mall;
CREATE TABLE t_order(
id INT(5) PRIMARY KEY AUTO_INCREMENT, # 주문번호
userNo INT(5) NOT NULL, # 회원번호
productNo INT(5) NOT NULL # 상품번호
);
CREATE TABLE t_user(
id INT(5) PRIMARY KEY AUTO_INCREMENT, # 회원번호
userId CHAR(200) NOT NULL, # 회원아이디
userPw CHAR(200) NOT NULL, # 회원 비밀번호
userName CHAR(50) NOT NULL, # 회원 이름
addr CHAR(200) NOT NULL # 주소
);
CREATE TABLE t_product(
id INT(5) PRIMARY KEY AUTO_INCREMENT, # 상품 번호
pname CHAR(100) NOT NULL, # 상품 이름
price INT(10) NOT NULL # 상품 가격
);
INSERT INTO t_product
SET pname = '운동화',
price = 1000000;
INSERT INTO t_product
SET pname = '코트',
price = 100000;
INSERT INTO t_product
SET pname = '반바지',
price = 30000;
INSERT INTO t_product
SET pname = '스커트',
price = 15000;
INSERT INTO t_product
SET pname = '코트',
price = 100000;
INSERT INTO t_product
SET pname = '티셔츠',
price = 9000;
INSERT INTO t_product
SET pname = '운동화',
price = 200000;
INSERT INTO t_product
SET pname = '모자',
price = 30000;
INSERT INTO t_user
SET userId = 'user1',
userPw = 'pass1',
userName = '손흥민',
addr = '런던';
INSERT INTO t_user
SET userId = 'user2',
userPw = 'pass2',
userName = '설현',
addr = '서울';
INSERT INTO t_user
SET userId = 'user3',
userPw = 'pass3',
userName = '원빈',
addr = '대전';
INSERT INTO t_user
SET userId = 'user4',
userPw = 'pass4',
userName = '송혜교',
addr = '대구';
INSERT INTO t_user
SET userId = 'user5',
userPw = 'pass5',
userName = '소지섭',
addr = '부산';
INSERT INTO t_user
SET userId = 'user6',
userPw = 'pass6',
userName = '김지원',
addr = '울산';
INSERT INTO t_order
SET userNo = 1,
productNo = 1;
INSERT INTO t_order
SET userNo = 2,
productNo = 2;
INSERT INTO t_order
SET userNo = 3,
productNo = 3;
INSERT INTO t_order
SET userNo = 4,
productNo = 4;
INSERT INTO t_order
SET userNo = 5,
productNo = 5;
INSERT INTO t_order
SET userNo = 6,
productNo = 6;
INSERT INTO t_order
SET userNo = 6,
productNo = 7;
INSERT INTO t_order
SET userNo = 1,
productNo = 5;
INSERT INTO t_order
SET userNo = 4,
productNo = 4;
INSERT INTO t_order
SET userNo = 1,
productNo = 1;
INSERT INTO t_order
SET userNo = 5,
productNo = 8;
SELECT *
FROM t_user;
SELECT *
FROM t_product;
SELECT *
FROM t_order;
SO 문제 해결 한후 다시풀어보면
1. 손흥민의 주문 개수는? ???
SELECT a.userName,COUNT(*)AS'주문개수'
FROM t_user a
INNER JOIN t_order b
ON a.id = b.userNo
WHERE a.userName='손흥민';
손흥민이 산 상품은? ???
SELECT a.userName,c.pname
FROM t_order b
INNER JOIN t_user a
ON a.id = b.userNo
INNER JOIN t_product c
ON b.productNo=c.id
WHERE a.userName='손흥민';
스커트를 산 사람은? ???
SELECT DISTINCT a.userName,c.pname
FROM t_order b
INNER JOIN t_user a
ON a.id = b.userNo
INNER JOIN t_product c
ON b.productNo=c.id
WHERE c.pname='스커트';
가장 많이 주문한 사람의 아이디와 이름, 주문개수는? ???
SELECT DISTINCT a.userId, a.userName, COUNT(*)AS'주문개수'
FROM t_order b
INNER JOIN t_user a
ON a.id = b.userNo
INNER JOIN t_product c
ON b.productNo=c.id
GROUP BY a.userId
LIMIT 1;
소지섭이 사용한 총 금액은? ???
SELECT DISTINCT a.userName, SUM(c.price) AS '총금액'
FROM t_order b
INNER JOIN t_user a
ON a.id = b.userNo
INNER JOIN t_product c
ON b.productNo=c.id
WHERE a.userName ='소지섭';