MySQL | SQL 기본적인 문법 정리

728x90

🟦 오름차순 정렬 | ASC

select A, B from 테이블 ORDER BY 기준 (ASC);

🟦 내림차순 정렬 | DESC

select A,B from 테이블 Order By 기준 (DESC);

🟦 데이터 최대값 가져오기 | MAX (칼럼)

SELECT MAX(칼럼) FROM 테이블;

🟦 데이터 최솟값 가져오기 | MIN (칼럼)

SELECT MIN(칼럼) FROM 테이블;

🟦 단순 집계 함수 | Count(), SUM(), AVG()

select COUNT(*) FROM 테이블;

select sum(칼럼) FROM 테이블;

select avg(칼럼) FROM 테이블;

🟦 Group별 쿼리 (Group By, Having)

    1. Group By
  • (ex. 도시별 인구 합계를 출력하라)
select 도, sum(B) from 테이블 Group By 도시;
    1. Having (Group By 결과를 다시 필터링 하는 쿼리)

ex. citykorea 테이블의 도시별 인구수 평균이 500,000만을 초과하는 도시별 인구수 평균을 출력하시오.

→ Group By ~ Having (조건 비교)

select distict, AVG(population) FROM citykorea 
Group By district Having AVG(population) > 500000;

🟦 중복값 제거 : DISTINCT, GROUP BY

  • 1) DISTINCT 사용
    • 중복 없애기, (정렬X)
select distinct 필드명 From 테이블 Where (조건);
  • 2) GROUP By 사용
    • 중복 없애고 + 정렬
select 필드명 FROM 테이블 WHERE 조건 GROUP BY (ID);

🟦 NULL 처리

    1. NULL만 불러오기 | is NULL
Select from 테이블 where 필드명 is null; 
    1. NULL제외 불러오기 | is not null
select from 테이블 where 필드 is not null;

🟦 예제 :

1) 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

SELECT COUNT(DISTINCT NAME) AS count FROM ANIMAL_INS;

2) 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

SELECT name, count(*) as count
from animal_ins
group by name
having count >= 2 and name is not null
order by name;

 

🟦 WHERE 문 조건 걸기

동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

  • = or ≠
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'Sick' ORDER BY ANIMAL_ID ASC;
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION != 'Aged' ORDER BY ANIMAL_ID ASC;

 

🟦 DATE_FORMAT() 함수로 형변환 출력

  • DATE_FORMAT(대상, ‘%Y-%m-%d’) AS (뽑는이름)
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS 날짜
FROM ANIMAL_INS ORDER BY ANIMAL_ID;

🟦 DATE_FORMAT() 함수로 특정 조건 출겨 

  -  DATE_FORMAT(대상, '%Y' ) = '2021' 

SELECT COUNT(USER_ID) AS USERS
FROM USER_INFO 
WHERE DATE_FORMAT(JOINED, '%Y') = '2021'
AND AGE BETWEEN 20 AND 29;

 

🟦 LIMIT 으로 제한 걸기 

- ORDER BY로 정렬시켜놓고 LIMIT으로 가져올 개수 or 시작점, 개수 지정할 수 있다.

//여기서 문제는 DATETIME기준 오름차순 정렬시켜둔 뒤, 첫 번째 값을 가져오라는 문제였음.

//1) 정렬 상태에서 개수만 가져오기 - (처음부터) ~ 5개 가져오기 
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 5;

//2) 정렬 상태에서 (지정값 + 1) 지점부터 ~ 3개 가져오기 
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 0, 3;

🟦 가장 크거나 작은 값 1개씩 가져오기 (최대, 최소)

-- (1) where문에 쪼인해서 가져가던가 
SELECT * FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);

-- (2) DESC 역순 정렬 후 LIMIT 으로 1개 가져오던가 가장 최대만 가져오는 거니까 
SELECT * FROM FOOD_PRODUCT
ORDER BY PRICE DESC LIMIT 1

🟦 두 테이블 간 JOIN

  • A 테이블과 B 테이블의 조인
SELECT A.BOOK_ID, B.AUTHOR_NAME, DATE_FORMAT(A.PUBLISHED_DATE, '%Y-%m-%d') as PUBLISHED_DATE
FROM (SELECT * FROM BOOK WHERE CATEGORY='경제') A
JOIN AUTHOR B
ON A.AUTHOR_ID=B.AUTHOR_ID
ORDER BY A.PUBLISHED_DATE ASC;

 

🟦 문자열의 일부분만 가져오기

  • LEFT(문자열, 개수) : 문자열의 왼쪽 기준으로 지정 개수 가져오는 함수
  • MID(문자열, 시작위치, 개수) : 문자열의 지정 위치부터 지정 개수 가져오는 함수
  • RIGHT(문자열, 개수) : 문자열의 오르쪽 기준으로 지정 개수 가져오는 함수

 

🟦 JOIN 시 ON 사용과 USING 사용의 차이

  • ON 사용은 두 테이블 간 조인할 칼럼의 이름이 다를 때 사용함
  • USING 사용은 두 테이블 간 조인할 칼럼 이름이 같을 때 한 번에 묶어서 사용함
-- 코드를 입력하세요
SELECT A.PRODUCT_CODE, SUM(A.PRICE * B.SALES_AMOUNT) AS SALES
FROM PRODUCT A
INNER JOIN OFFLINE_SALE B
ON A.PRODUCT_ID = B.PRODUCT_ID
-- USING PRODUCT_ID
GROUP BY PRODUCT_CODE, PRICE
ORDER BY SALES DESC, A.PRODUCT_CODE ASC;
728x90