cd /usr/local/mysql/bin
./mysql -u root -p

MySQL 설치 시 입력한 root 사용자의 비밀번호를 입력

USE 데이터베이스 이름;

 

'SQL' 카테고리의 다른 글

실전에서 유용한 SQL 문법 (문자열, Case)  (0) 2023.05.04
SQL 4주차 - Subquery  (0) 2023.05.04
SQL 2주차 - GROUP BY, ORDER BY  (0) 2023.05.04
SQL 3주차 - JOIN, UNION  (0) 2023.05.02
SQL 1주차 - BETWEEN, IN, LIKE, LIMIT  (0) 2023.04.27

1. SUBSTRING_INDEX

SUBSTRING_INDEX(
     1번째 인수 : 컬럼명
     2번째 인수 : 기준문자, 구분 문자
     3번째 인수 : 보여질 위치, 위치 기준 음수(-)는 뒷부분 부터, 양수(+)는 앞부분 부터
)

@를 기준으로 텍스트를 쪼개고, 그 중 첫 번째 조각을 가져온다.

select user_id, email, SUBSTRING_INDEX(email, '@', 1) from users
 

@를 기준으로 텍스트를 쪼개고, 맨 끝 조각을 가져온다.

select user_id, email, SUBSTRING_INDEX(email, '@', -1) from users

 

 

2. SUBSTRING 

SUBSTRING(문자열, 출력을 하고싶은 첫 글자의 위치, 몇개의 글자를 출력하고 싶은지)

 

created_at의 시간을 자르고 날짜만 가져오고 싶을 때

select order_no, created_at, substring(created_at,1,10) as date from orders

 

3. CASE

CASE
	WHEN 조건
	THEN '반환 값'
	WHEN 조건
	THEN '반환 값'
	ELSE 'WHEN 조건에 해당 안되는 경우 반환 값'
END
select pu.point_user_id, pu.point,
case 
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!'
END as '구분'
from point_users pu;

'SQL' 카테고리의 다른 글

MySQL 접속  (0) 2023.06.14
SQL 4주차 - Subquery  (0) 2023.05.04
SQL 2주차 - GROUP BY, ORDER BY  (0) 2023.05.04
SQL 3주차 - JOIN, UNION  (0) 2023.05.02
SQL 1주차 - BETWEEN, IN, LIKE, LIMIT  (0) 2023.04.27
  • 서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미하며 서브쿼리는 반드시 괄호(())로 감싸져 있어야한다.

 

1. 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');

 

 

2. 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;

 

 

3. From 에 들어가는 Subquery 

주로 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때 사용한다.

 

course_id별 유저의 체크인 개수 구하기

select c.title,
       a.cnt_checkins,
       b.cnt_total,
       (a.cnt_checkins/b.cnt_total) as ratio
from
(
	select course_id, count(distinct(user_id)) as cnt_checkins from checkins
	group by course_id
) a
inner join
(
	select course_id, count(*) as cnt_total from orders
	group by course_id 
) b on a.course_id = b.course_id
inner join courses c on a.course_id = c.course_id

 

4. with절

with절은 동일한 SQL이 반복되어서 사용될 때 성능을 높이기 위해 사용된다.

table을 만들지 않고도 table 만든 것과 같은 효과를 내는데, 실제로는 temp라는 임시 테이블에 저장되는 것이다.

with
      cte1 as (select a, b from table 1),
      cte2 as (select c, d from table 2), ...

select a from cte1
with table1 as (
	select course_id, count(distinct(user_id)) as cnt_checkins from checkins
	group by course_id
), table2 as (
	select course_id, count(*) as cnt_total from orders
	group by course_id
)
select c.title,
       a.cnt_checkins,
       b.cnt_total,
       (a.cnt_checkins/b.cnt_total) as ratio
from table1 a inner join table2 b on a.course_id = b.course_id
inner join courses c on a.course_id = c.course_id

'SQL' 카테고리의 다른 글

MySQL 접속  (0) 2023.06.14
실전에서 유용한 SQL 문법 (문자열, Case)  (0) 2023.05.04
SQL 2주차 - GROUP BY, ORDER BY  (0) 2023.05.04
SQL 3주차 - JOIN, UNION  (0) 2023.05.02
SQL 1주차 - BETWEEN, IN, LIKE, LIMIT  (0) 2023.04.27

1. group by

~별 ~를 구할 때 group by로 범주를 묶어준다.

 

성씨별 회원수 구하기

select name, count(*) from users
group by name;

 

2.  order by

디폴트는 오름차순 정렬이고

select name, count(*) from users
group by name
order by count(*);

desc를 붙이면 내림차순으로 정렬된다.

select name, count(*) from users
group by name
order by count(*) desc;

'SQL' 카테고리의 다른 글

MySQL 접속  (0) 2023.06.14
실전에서 유용한 SQL 문법 (문자열, Case)  (0) 2023.05.04
SQL 4주차 - Subquery  (0) 2023.05.04
SQL 3주차 - JOIN, UNION  (0) 2023.05.02
SQL 1주차 - BETWEEN, IN, LIKE, LIMIT  (0) 2023.04.27
  • OUTER JOIN(LEFT JOIN, RIGHT JOIN) : 기준 테이블에만 데이터가 존재하면 조회됨
  • INNER JOIN : 기준 테이블과 조인 테이블 모두 데이터가 존재해야 조회됨

 

1. LEFT JOIN

테이블A를 중심으로 테이블B를 연결한다.

A의 값은 전부 표시하고 해당되는 값이 B에 없으면 NULL로 채운다.

select * from users u
left join point_users pu on u.user_id = pu.user_id

LEFT JOIN

2. INNER JOIN

select * from users u
inner join point_users p
on u.user_id = p.user_id;

INNER JOIN

3. UNION

UNION이란? 2개 이상 테이블에 존재하는 같은 성격의 값을 하나의 쿼리로 추출하는 것

UNION - 중복되지 않은 값만 추출

UNION ALL - 중복 허용하고 모든 값 추출

(
	select '7월' as month, c1.title, c2.week, count(*) as cnt from courses c1
	inner join checkins c2 on c1.course_id = c2.course_id
	inner join orders o on c2.user_id = o.user_id
	where o.created_at < '2020-08-01'
	group by c1.title, c2.week
	order by c1.title, c2.week
)
union all
(
	select '8월' as month, c1.title, c2.week, count(*) as cnt from courses c1
	inner join checkins c2 on c1.course_id = c2.course_id
	inner join orders o on c2.user_id = o.user_id
	where o.created_at >= '2020-08-01'
	group by c1.title, c2.week
	order by c1.title, c2.week
)

union all에는 각각의 order by가 안먹기 때문에 위 쿼리에서 order by를 지워도 값이 똑같다.

union all한 전체에 order by를 걸어야 정렬이 된다.

 

'SQL' 카테고리의 다른 글

MySQL 접속  (0) 2023.06.14
실전에서 유용한 SQL 문법 (문자열, Case)  (0) 2023.05.04
SQL 4주차 - Subquery  (0) 2023.05.04
SQL 2주차 - GROUP BY, ORDER BY  (0) 2023.05.04
SQL 1주차 - BETWEEN, IN, LIKE, LIMIT  (0) 2023.04.27

1. 범위 조건

7월 13일, 7월 14일의 주문데이터만 뽑기

select * from orders
where created_at between "2020-07-13" and "2020-07-15";

 

 

2. 포함 조건

1, 3주차 사람들의 '오늘의 다짐' 데이터

select * from checkins 
where week in (1, 3);

 

3. 패턴(문자열 규칙)

select * from users 
where email like '%daum.net';
  • like 뒤에 나오는 %는 뭐가 나오든 상관 없다는 뜻

4. 일부만 가져오기 

limit 출력할 데이터 개수

select * from orders where payment_method = "kakaopay" limit 5;

 

'SQL' 카테고리의 다른 글

MySQL 접속  (0) 2023.06.14
실전에서 유용한 SQL 문법 (문자열, Case)  (0) 2023.05.04
SQL 4주차 - Subquery  (0) 2023.05.04
SQL 2주차 - GROUP BY, ORDER BY  (0) 2023.05.04
SQL 3주차 - JOIN, UNION  (0) 2023.05.02

+ Recent posts