본문 바로가기

MySql

MySQL(07.10) - SQL 활용(문법)

정렬

ORDER BY - 조회된 데이터를 정렬

select *from Productsorder by Price ASC, ProductID DESC;

select userId, userName, Count(*)
from t_shopping
group by userName;
  • ORDER BY절은 데이터를 정렬한다.
  • WHERE절 다음에 나와야 한다.
  • ASC (ascending order) : 오름차순 → (생략시 기본값)
  • DESC (descending order) : 내림차순
  • , 로 여러 정렬 조건 지정 가능하다.

별명 (AS)

select userId As '아이디'
from t_shopping;
  • 특정 컬럼을 새로운 별명을 붙여 사용하고, 주로 연산이나 함수를 통해 새로 나온 컬럼에 붙인다.

사칙연산

  • +, *, /, -

비교연산

  • <, =, !=

논리연산

  • and, or
  • AND가 OR보다 우선 순위를 가진다.
  • MySQL에서는 &&나 ||도 사용 가능하다.

사잇값(BETWEEN)

  • 컬럼 between A and B
  • 컬럼값이 A와 B 사이인 것만 조회

포함(IN() - 여러 값 매칭)

SELECT *
FROM t_shopping
WHERE userId IN(1,2,3);
  • 컬럼 in(A, B, C...)
  • 컬럼값이 A,B,C 인것을 모두 조회
  • IN() 연산자를 이용하여 특정 값이 포함된 데이터를 조회할 수 있다.
  • IN 연산자는 동등비교 '='를 여러번 수행하는 효과를 가진다.

 

LIKE, NOT LIKE

SELECT *
FROM t_shopping
WHERE userId LIKE '김--"
// userId 컬럼 값이 '김'으로 시작하는 3글자 데이터 조회 

SELECT *
FROM t_shopping
WHERE userId LIKE '김%"
//'김'으로 시작하는 모든 데이터 조회

SELECT *
FROM t_shopping
WHERE userId LIKE '%김%"
//'김'이 들어가는 모든 데이터 조회
  • _ : 한 글자만 매치
  • % : 몇 글자든 매치

 

CEIL, ROUND, FLOOR

• CEIL() : 올림
• ROUND() : 반올림
• FLOOR() : 버림

 

AVG, MAX, MIN, SUM, COUNT

  • SUM() : 컬럼 합계
  • AVG() : 컬럼 평균
  • MIN() : 컬럼의 최소값
  • MAX() : 컬럼의 최대값
  • COUNT() : 행의 개수
  • COUNT(DISTINCT) : 행의 개수 (중복 제거)

 

CONCAT(문자1, 문자2, 문자3 ...)

SELECT CONCAT('안녕', '하세요')

//안녕하세요
  • 문자들을 이어 붙여준다.
  • 숫자와 문자가 함께 입력되어도 오류가 발생하지 않는다.

 

SUBSTRING(대상문자, 시작위치, 자르는길이)

SELECT SUBSTRING('안녕하세요', 1, 3)
// 안녕하

SELECT LEFT('안녕하세요', 2)
//안녕

SELECT RIGHT('안녕하세요', 3)
//하세요
  • 지정한 위치에서 지정한 문자열 길이만큼 자를 때 사용
  • 공백도 포함

LEFT("문자열", "길이") : 왼쪽에서부터 지정한 문자열의 길이만큼 자를 때 사용
RIGHT("문자열", "길이") : 오른쪽에서부터 지정한 문자열의 길이만큼 자를 때 사용

 

REPLACE(대상문자(컬럼), 문자열1, 문자열2)

SELECT REPLACE ('Microsoft SQL Server', 'MICROSOFT', 'MS') 
// MS SQL Server

	, REPLACE('Microsoft SQL Server' COLLATE Korean_Wansung_CS_AS, 'microsoft', 'MS')
// Microsoft SQL Server    
  • 문자열 치환
  • 대문자, 소문자 구분 없이 찾아서 치환된다. 이때 COLLATE Korean_Wansung_CS_AS 옵션을 사용하면 대문자, 소문자가 정확히 일치해야 치환된다.

_CS_AS: 대소문자 구분

_CI_AS: 대소문자 구분 없이

 

CURDATE(), NOW()

SELECT NOW();
  • 오늘날짜 구하기
  • CURDATE() : 연월일
  • NOW() : 연월일 시분초

 

ADDDATE(기준날짜, interval n day), SUBDATE()

  • 기준날짜로 부터 n만큼의 거리(간격)
  • DATE_ADD(기준시간, interval ) 또는 adddate(기준시간, interval )
  • 기준시간을 기준으로 interval만큼의 시간을 더한다.
  • interver에 마이너스(-)를 입력하면 시간을 뺀다.
  • SUBDATE(기준시간, interval)
  • 기준시간을 기준으로 interval만큼의 시간을 뺀다.

DATE_DIFF(날짜1, 날짜2)

select datediff('2022-03-21', '2021-03-21');
  • 날짜1과 날짜2의 차이를 구함

 

DISTINCT

SELECT DISTINCT 컬럼명 FROM 테이블명;
  • 조회 결과에서 중복되는 행을 제거한다.

 

HAVING

  • 일반적으로 SELECT문은 FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY 순으로 실행된다.

 

 

INNER JOIN


- 기본적으로 JOIN은 교집합이다. 

SELECT<열 목록>
FROM <첫 번째 테이블>
INNER JOIN<두 번째 테이블>
    ON <조인 조건>
[WHERE 검색 조건]