티스토리 뷰
반응형
SELECT문
기본 구조
SELECT 필드이름 FROM 테이블
모든 테이블 보기
SHOW TABLES
여러 필드를 조회하는 경우
SELECT 필드이름1, 필드이름2 FROM 테이블
모든 필드를 조회하는 경우
SELECT * FROM 테이블
중복된 데이터를 없애고 조회하는 경우
SELECT DISTINCT 필드이름 FROM 테이블
조건식을 적용하는 경우
SELECT * FROM 테이블
WHERE 필드이름 = 0(또는 '문자열')
여러 조건식을 적용하는 경우
SELECT * FROM 테이블
WHERE 필드이름 = 0(또는 '문자열')
AND 필드이름2 = 0(또는 '문자열')
OR 필드이름3 = 0(또는 '문자열')
조건식의 종류
(범위 지정 A~B 사이) (NOT 구문은 반대)
WHERE 필드이름 BETWEEN 0 AND 100
WHERE 필드이름 NOT BETWEEN 0 AND 100
(특정값 여러개 선택)
WHERE 필드이름 IN(0, 10, 100)
WHERE 필드이름 NOT IN(0, 10, 100)
(비어있는 값 확인)
WHERE 필드이름 IS NULL
WHERE 필드이름 NOT IS NULL
(문자열 '이**'검색)
WHERE 필드이름 LIKE '이**'
WHERE 필드이름 NOT LIKE '이**'
(%의 경우 모든 문자가 와도 상관 없다는 뜻 EX-이슬,이빨,이쑤시게)
WHERE 필드이름 LIKE '이%'
WHERE 필드이름 NOT LIKE '이%'
(_의 경우 갯수만큼의 문자추가 EX-모이,사이)
WHERE 필드이름 LIKE '_이'
WHERE 필드이름 NOT LIKE '_이'
특정 필드 기준으로 정렬하는 경우
SELECT 필드이름 FROM 테이블
ORDER BY 필드이름
정렬 기준이 여러 개인 경우
SELECT 필드이름 FROM 테이블
ORDER BY 필드이름1, 필드이름2, 필드이름3
LEFT JOIN으로 테이블 합치기 (비어있는 테이블은 NULL값)
SELECT * FROM 테이블 u
LEFT JOIN 테이블 p
ON u.필드이름 = p.필드이름;
INNER JOIN으로 테이블 합치기 (교집합 테이블, 비어있는 테이블이 없음!)
SELECT * FROM 테이블 u
INNER JOIN 테이블 p
ON u.필드이름 = p.필드이름;
집합 연산을 이용해 결과를 출력하는 경우
SELECT 필드이름1 FROM 테이블1
UNION(또는 UNION ALL, MINUS, INTERSET)
SELECT 필드이름2 FROM 테이블2
Select를 두번 하지 않고, 한번에 모아서 보고 싶은 경우(UNION ALL)
(
select '7월' as month, c.title, c2.week, count(*) as cnt from checkins c2
inner join courses c on c2.course_id = c.course_id
inner join orders o on o.user_id = c2.user_id
where o.created_at < '2020-08-01'
group by c2.course_id, c2.week
order by c2.course_id, c2.week
)
union all
(
select '8월' as month, c.title, c2.week, count(*) as cnt from checkins c2
inner join courses c on c2.course_id = c.course_id
inner join orders o on o.user_id = c2.user_id
where o.created_at > '2020-08-01'
group by c2.course_id, c2.week
order by c2.course_id, c2.week
)
단! 내부의 order by의 정렬이 깨져 버린다.
Where에 들어가는 Subquery -> where 필드명 in (subquery)
SELECT * FROM users u
WHERE u.user_id IN (SELECT o.user_id FROM orders o
WHERE o.payment_method = 'kakaopay');
쿼리가 실행되는 순서
1. from 실행: users 데이터를 가져와줌
2. Subquery 실행: 해당되는 user_id의 명단을 뽑아줌
3. where .. in 절에서 subquery의 결과에 해당되는 'user_id의 명단' 조건으로 필터링 해줌
4. 조건에 맞는 결과 출력
Select에 들어가는 Subquery -> select 필드명, 필드명, (subquery) from..
SELECT c.checkin_id, c.user_id, c.likes,
(SELECT avg(likes) FROM checkins c2
WHERE c2.user_id = c.user_id) AS avg_like_user
FROM checkins c;
1. 밖의 select * from 문에서 데이터를 한줄한줄 출력하는 과정에서
2. select 안의 subquery가 매 데이터 한줄마다 실행되는데
3. 그 데이터 한 줄의 user_id를 갖는 데이터의 평균 좋아요 값을 subquery에서 계산해서
4. 함께 출력해준다!
From에 들어가는 Subquery (가장 많이 사용되는 유형!) => 내가 만든 Select와 이미 있는 테이블을 Join 하고 싶을 때 사용
먼저 유저 별 좋아요 평군을 구한다.
SELECT user_id, round(avg(likes),1) AS avg_like FROM checkins
GROUP BY user_id
그리고 해당 유저 별 포인트에 붙인다.
SELECT pu.user_id, a.avg_like, pu.point FROM point_users pu
INNER JOIN (
SELECT user_id, round(avg(likes),1) AS avg_like FROM checkins
GROUP BY user_id
) a ON pu.user_id = a.user_id
쿼리가 실행되는 순서
1.먼저 서브쿼리의 SELECT가 실행이 되고,
2.이것을 테이블처럼 여기고 밖의 SELECT가 실행
INSERT문
INSERT INTO 테이블(필드이름1, 필드이름2)
VALUES (값1, 값2)
UPDATE문
UPDATE 테이블 SET 필드이름1 = 값1, 필드이름2 = 갑2
WHERE 조건문
DELETE문
DELETE FROM 테이블
WHERE 조건문
반응형
'개발일지 > TIL' 카테고리의 다른 글
TreeSet이란? (0) | 2022.07.20 |
---|---|
HashSet 이란? (0) | 2022.07.20 |
JPA 연관관계, Spring Dada JPA (0) | 2022.07.18 |
DB의 연관관계 이해 (0) | 2022.07.18 |
JPA 영속성 컨텍스트 이해 (0) | 2022.07.18 |
댓글