주제

1. SQL 기초 구문
2. 비교 연산자 & 논리 연산자
3. 정렬과 집계
4. 기초 함수
5. DDL & DML

 

SQL 기초 구문

  • SELECT -> 무엇을
  • FROM -> 어디에서(테이블)
  • WHERE -> 어떤 조건으로(조건이 참인 데이터만 반환)
SELECT name, price
FROM products
WHERE price > 5000;

-- products 테이블에서 price가 5000보다 큰 name, price 값들을 조회

 

1=1은 왜 쓸까?

SELECT name, price
FROM products
WHERE 1=1 
AND price > 5000;
  • 1=1은 항상 참인데 왜 쓰는걸까?
  • 이유는 여러가지 조건들이 있을 때, 한 조건을 빼야하거나 디버깅 시 주석처리가 용이하기 때문!
  • 예를 들어 1=1이 없다면 조건 하나를 주석 처리하기 위해서는 모든 WHERE절을 전부 주석처리해야함
  • 하지만 1=1이 있다면 원하는 조건만 주석처리하고 나머지 조건은 건드리지 않아도 됨
SELECT name, price
FROM products
WHERE 1=1
-- AND price > 5000
AND name LIKE '%용품';

 

비교 연산자

= !=
왼쪽값과 오른쪽값을 비교(동일할 때 반환) 왼쪽값과 오른쪽값이 서로 다른 것인지 비교

 

SELECT name, price
FROM products
WHERE category = '스포츠';

 

논리 연산자

AND 여러 조건 중 모든 조건이 참인 데이터를 반환
OR 여러 조건 중 하나라도 참이면 반환
NOT IN 괄호 안에 포함되지 않는 값만 반환
IN 괄오 한에 포함되는 값만 반환
LIKE 문자열의 패턴을 검색
% : 모든 문자열
_ : 앞 또는 뒤에 한개의 문자가 있다는 뜻
BETWEEN 시작부터 끝값 사이의 모든 값을 반환(끝값 포함), 문자열도 사용 가능
IS NULL / IS NOT NULL 특정 컬럼 속 null값인 데이터를 반환(NOT NULL은 null이 아닌 값)

 

SELECT name, price
FROM products
WHERE price > 2000 AND category = '스포츠';

SELECT name, price
FROM products
WHERE category IN ('스포츠', '키즈');

SELECT name, price
FROM products
WHERE price BETWEEN 3000 AND 10000;

 

정렬과 집계

ORDER BY 특정 열의 값을 기준으로 오름차(ASC)순 혹은 내림차순(DESC)으로 정렬
디폴트는 오름차순. 쉼표로 1차, 2차 정렬도 가능
한글을 가나다순, 영어는 알파벳순
SUM 특정 칼럼의 합계를 반환
AVG 특정 칼럼의 평균을 반환
COUNT 열의 개수를 반환(null값은 포함하지 않음)
DISTINCT 해당 칼럼의 중복을 제외한 유니크한 값을 반환
GROUP BY 특정 칼럼을 기준으로 집계하여 반환
HAVING 그룹화를 한 후 필터링을 하는 조건절

 

SELECT name, price
FROM products
WHERE price > 2000
ORDER BY category;

 

WHERE vs. HAVING

WHERE HAVING
그룹화를 하기 전에 필터링 적용 그룹화를 한 후 필터링 적용
집계함수를 사용할 수 없음 집계함수와 함께 사용
GROUP BY 앞에 사용 GROUP BY 뒤에 사용

 

 

기초 함수

문자열 관련

CONCAT 여러 칼럼의 값(문자열)을 합친다
SUBSTR(행, 시작 길이, 문자길이) 문자열을 인덱스값을 기준으로 잘라서 반환
UPPER / LOWER 대문자 / 소문자로 통일시켜 반환
CHAR_LENGTH 특정 행의 문자열 데이터의 길이를 반환(글자수)

 

숫자 관련

ROUND 반올림, 소수점 뒤 몇자리까지 올릴지 지정 가능
CEIL 올림 함수
FLOOR 내림 함수
TRUNCATE 특정 자리수 이하는 무시
ABS 절댓값을 취한 값을 반환
MOD(분자, 분모) 분수로 치환된 값을 반환

 

기타

COALESCE(행, null 대신 채워넣을 값) 병합 함수, null값을 채울 때 사용

 

 

 

DDL & DML

  • DDL(Data Definition Language) : 데이터베이스 구조를 정의하고 관리
    • CREATE : 테이블 / 뷰 / 인덱스 생성
    • ALTER : 테이블 / 뷰 / 인덱스 구조 변경
    • DROP : 테이블 / 뷰 / 인덱스 삭제(구조 자체를 삭제)
CREATE table products (
	'products_id' int primary key NOT NULL,
    'name' varchar(40) NOT NULL,
    'category' varchar(40) NOT NULL
);
  • DML(Data Manipulation Language) : 데이터를 쿼리하거나 조작
    • SELECT : 질의 
    • INSERT : 삽입
    • UPDATE : 수정
    • DELETE : 삭제(테이블 내의 내용만 삭제)
INSERT INTO products ('product_id', 'name', 'category') VALUES ('1', '마우스', '전자기기');

 


느낀점

이번주부터 sql에 들어가는데 아는 내용이 나오니까 안심이 됐다. 대신 프로젝트 생각에 고민이 좀 많았다. 주제 선정부터 해야하는데 어떤 주제가 좋을지 데이터포털에서 검색해가며 보는 중이다. 혼자 아주 간단하게 EDA를 해보고 있는데 문제는 mysql이 맥 Sonoma를 업데이트하면서 패치가 안됐는지 워크벤치가 자꾸 꺼진다는 것.. 플젝할 때는 데탑에서 워크벤치 돌려야겠다. 패치 빨리 해줘라! 

+ Recent posts