MySQL에서 많은 데이터 insert 时
- 번개모양 클릭
- 처음부터 끝까지 자동으로 실행해준다.
데이터 입력:
customers 입력값: https://yeo0616.tistory.com/113
orders 입력값: https://yeo0616.tistory.com/114
use yh_db; select * from orders; select * from customers; -- 100 명 고객 select count(*) from customers; -- 700개 주문 select count(*) from orders; |
ㄴ 입력한 데이터 값 확인
관계형 데이터베이스 합치기: join
-- join 뒤에 갖다 붙일 테이블 명을 쓴다. 하나 더 키워드 on을 쓴다.
ㄴ 두개가 같은 컬럼. 연결시키는 조건
-- 두개 테이블을 하나로 합쳐서 가져오시오.라는 뜻
join 테이블 이름 on 테이블1 id 컬럼 = 테이블2의 테이블1 id 설정 컬럼
-- customers의 id 컬럼과 orders의 customer_id이 같은 것으로 합쳐라.
ㄴ foreign key가 적용되어있어야한다.
-- 테이블 이름을 줄여서 사용하는 방법
-- as를 써도 되고, 안써도 된다. (생략 가능)
-- 실무에서는 as조차 생략해서 줄여서 쓴다.
select * from customers join orders on customers.id = orders.customer_id; select * from customers as c join orders as o on c.id = o.customer_id; select * from customers c join orders o on c.id = o.customer_id; |
-- 현재는 id 컬럼이 두개임.
-- 뒤에있는 id는 customers의 id임.
-- 실무에서는 *를 줘서 데이터를 가져오지는 않는다.
- 잇고자 하는 테이블의 컬럼에 반드시 foreign key를 설정해놓은 상태여야한다.
-- 컬럼의 이름이 중복되는 경우는, 컬럼이름을 바꿔서 가져와야 한다.
-- 컬럼의 이름이 중복되는 경우는, 컬럼이름을 바꿔서 가져와야 한다.
select c.id as customer_id,c.first_name, c.email, o.id as order_id, o.amount, o.order_date from customers c join orders o on c.id = o.customer_id; |
-- 지금까지 위에서 한 join은, 두 개 테이블에 공통으로 들어있는 데이터만, 가지고 온 것이다.
ㄴ 교집합: 회원 중에서도 주문을 한 사람들.
- Null이 없음
기본 데이터 + 다른 데이터 정보 추가: left join
-- 모든 고객 데이터를 가져오되, 주문정보가 없는 고객도 나타나도록 가져오는 방법.
-- left join !!
-- 먼저 작성한 테이블 이름(from뒤에 작성한 테이블)이 left.
– left에 있는 데이터는 다 표시하라.라는 뜻
select * from customers c left join orders o on c.id = o.customer_id; |
left join 테이블 이름 on 테이블1 id 컬럼 = 테이블2의 테이블1 id 설정 컬럼
-- 고객들 정보는 모두 가져오되, 왼쪽에 남겨두고, on 가져오되, c.id에 있는 값과 o.customer_id의 값이 같은 것을 가져와라.
-- 주문 금액이 600 달러보다 큰 사람의 데이터를 가져오시오.
select c.id as customer_id,c.first_name, c.email, o.id as order_id, o.amount, o.order_date from customers c join orders o on c.id = o.customer_id where o.amount>600; |
-- 주문 금액이 600 달러보다 큰 사람의 이메일를 가져오시오. (단계단계로 가즈아)
select distinct c.email from customers c join orders o on c.id = o.customer_id where o.amount>600; |
ㄴ 중복되어있는 이메일을 가져다주지는 말쟈
-- 주문 금액이 600달러보다 큰 사람의 이메일과 주문 날짜와, 금액을 가져오는데, 주문날짜 내림차순으로 가져오세요.
select distinct c.email, o.order_date, o.amount from customers c join orders o on c.id = o.customer_id where o.amount > 600 order by o.order_date desc; |
-- 각 고객별로, 주문수를 나타내시오
select c.first_name, c.last_name, count(*) as order_cnt from customers c join orders o on c.id = o.customer_id group by c.id; |
'프로그래밍 언어 > MySQL' 카테고리의 다른 글
[MySQL] 多대多관계, null인 데이터를 가져오는 법 (0) | 2022.05.18 |
---|---|
[MySQL] 그룹/묶음 뒤에 조건: group by..having, 실습문제 (0) | 2022.05.17 |
[MySQL] Foreign key 생성 (0) | 2022.05.17 |
[MySQL] if() 함수, ifnull() 함수 , 실습 풀이 (0) | 2022.05.17 |
[MySQL] ~인것 가져오기: where, and, or, between…and, in(), case when …then.. else… end (0) | 2022.05.17 |