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)
-
- Group By
- (ex. 도시별 인구 합계를 출력하라)
select 도, sum(B) from 테이블 Group By 도시;
-
- 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 처리
-
- NULL만 불러오기 | is NULL
Select from 테이블 where 필드명 is null;
-
- 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
'알고리즘 이론 [개념] > [개념] SQL 기본 문법 정리' 카테고리의 다른 글
SQL | 데이터 베이스 문법 관련 정리 (102) | 2024.02.02 |
---|