DBMS (database management system) : 데이터의 집합을 관리하고 운영하는 소프트웨어
DBMS의 종류 : mysql, postgresql 등
MySQL: 관계형 DBMS(줄여서 RDBMS)
SQL : DBMS에 데이터를 구축, 관리하기 위해 사용되는 언어
✔️ 인덱스
react 에서 for문을 돌때 key를 쓰는 이유는
객체 하나하나를 다 비교하지 않고 바뀐 부분만 캐치하여 해당 요소만을 리렌더링 할 수 있기 때문이다.
이런 것 처럼 sql에서는 인덱스를 이용해 테이블을 전체 검색하는게 아니라, 해당 값을 빠르게 찾을 수 있다.
CREATE INDEX idx_member_name ON member(member_name)
member 테이블의 member_name 열에 인덱스를 지정한다.
✔️ 뷰
뷰는 실체가 있는 것은 아니고 db와 연결되있을 뿐이다. 쉽게말하면 데이터베이스 바로가기 아이콘과 비슷한 개념이다.
사용자 → select문(view) ↔ DB
뷰 사용 이유
1. 보안에 도움이 된다.
2. 긴 SQL문을 간략하게 만들 수 있다.
// member 테이블과 연결되는 member_view뷰 생성
create VIEW memver_view
AS
select * from member
// 뷰 조회
select * from memver_view
✔️ 스토어 프로시저
- mysql에서 제공하는 기능
- 여러개 sql문을 하나로 묶어서 편하게 사용 가능
: js에서 반복되는 값을 변수로 만들어 놓고 여러군데서 사용하는 것 처럼, 자주 쓰이는 sql문을 변수처럼 만들어 놓고 사용할 수 있다.
- 프로그래밍 언어에서 사용되는 조건문,반복문 등을 사용할 수 있다.
delimiter //
create PROCEDURE myProc() -- 스토어드 프로시저 이름 지정
begin
select* from member where member_name="나훈아";
select * from product where product_name="삼각김밥";
end //
delimiter ;
call myProc(); -- 스토어드 프로시저 호출
✔️ USE
USE market_db; -- 사용할 db 지정
✔️ SELECT문
SELECT문 전체 형태
SELECT 열이름
FROM 테이블 이름
WHERE 조건식
GROUP BY 열이름
HAVING 조건식
ORDER_BY 열이름
LIMIT 숫자
SELECT ~ FROM ~
SELECT * FROM market_db.member; -- 데이터베이스명.테이블이름 (원래형태)
SELECT * FROM member; -- 테이블이름 (축약: USE로 사용할 db를 지정해줬기 때문에 db명은 생략가능 )
별칭
SELECT column명 (AS 별칭) FROM 테이블명 (별칭)
SELECT T.customer_id AS 고객번
, T.tran_date AS 거래일
, T.rate AS 판매
, T.qty AS 주문수
, T.total_amt AS 주문금
FROM TRANSACTIONS T;
✔️ AND OR
SELECT * FROM member WHERE mem_name='에이핑크' OR mem_name='마마무'; -- AND
SELECT * FROM member WHERE mem_number >= 6 AND height>=165; -- OR
✔️ BETWEEN
-- 기본 형태
SELECT * FROM 테이블명 WHERE 컬럼명 BETWEEN 조건1 AND 조건2;
-- 사용 예제
SELECT * FROM member WHERE height <= 165 and height >= 163; -- 아래코드로 대체 가능
SELECT * FROM member WHERE height between 163 and 165; -- between
✔️ IN 연산자
- in을 이용하면 여러 조건을 or로 매번 처리하지 않고 짧게 작성할 수 있다. (or조건의 약어)
- 형태
expression IN (value1, value2, .... value_n);
expression IN (subquery);
[예제]1
select * from member where mem_name='에이핑크' OR mem_name='마마무'; -- 아래 코드로 대체가능
select * from member where mem_name IN ('에이핑크','마마무') -- IN
[예제]2
# 프로그래머스 - 우유와 요거트가 담긴 장바구니
select CART_ID from CART_PRODUCTS
where CART_ID in (select CART_ID from CART_PRODUCTS where NAME = 'Milk') -- table에서 cart_id가 있는지 확인
and NAME = 'Yogurt'
✔️NOT IN 연산자
위의 IN과반대되는 개념. 조건에 해당되지 않는 값만 조회한다.
select * from member where NOT mem_name IN ('에이핑크','마마무') -- NOT IN
# mem_name이 "에이핑크,마마무"에 해당하지 않는 값만 조회
✔️ LIKE
: 문자열의 일부 글자를 검색할 때 사용
( ↔ NOT LIKE : 해당 문자 패턴과 일치하지 않는 것을 검색)
-- 기본 형태
SELECT 컬럼명1, 컬럼명2 FROM 테이블명 WHERE column명 LIKE 검색할문자패턴;
-- 사용 예제
select * from member
where mem_name LIKE "우%" -- 결과 : '우주소녀'
select * from member
where mem_name LIKE "__핑크" -- 결과 : '에이핑크' '블랙핑크'
와일드카드
LIKE는 와일드카드랑 자주 사용된다.
1. % : 모든 문자
2. _ : 한 문자
- a% : a로 시작하는 값
- %a : a로 끝나는 값
- %or% : 앞뒤로 어떤 문자가 있고 or을 포함하고 있는 값
- _r% : 두번쨰 자리가 r인 값
- a_% : 첫번째 자리가 a이고, 적어도 문자 길이가 2인 값
- a%o : a로 시작하고 o로 끝나는 값
✔️ ORDER BY 절
: 결과를 정렬
SELECT * from member ORDER BY debut_date ASC -- 오름차순 (먼저 데뷔한 순으로 정렬)
SELECT * from member ORDER BY debut_date DESC -- 내림차순 (최신에 데뷔한 순으로 정렬)
: 정렬 기준을 여러 열로 지정할 수 있다.
select * from member where height >= 164 order by height DESC, debut_date ASC
-- 정렬1. 키가 큰 순으로 정렬
-- 정렬2. 키가 같은 멤버가 있다면 그 결과를 다시 먼저 데뷔한 순으로 정렬
✔️ LIMIT
: 몇건만으로 출력 개수를 제한함
SELECT * FROM member ORDER BY debut_date LIMIT 3 -- (LIMIT 0,3) 처음부터 3건만 조회
SELECT * FROM member ORDER BY debut_date LIMIT 3,2 -- 3번째 부터 2건만 조회
코드 예제)
select * from member where height >= 164 order by height DESC, debut_date ASC limit 3, 2
✔️ DISTINCT
조회된 결과에서 중복된 데이터 제거
SELECT DISTINCT addr FROM member
[예제] 중복 제거하고 count하기
count( DISTINCT U.USER_ID )
참고자료
SERIAL에 대한 자세한 내용 : https://semtax.tistory.com/15)
'DB > SQL' 카테고리의 다른 글
[SQL] 행 입력, 수정, 삭제 CRUD (0) | 2023.05.30 |
---|---|
[SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력 (0) | 2023.05.30 |
[SQL] join, on (0) | 2023.05.25 |
[SQL]Group by, Having, 집계함수 (0) | 2023.05.23 |
[SQL] 서브쿼리 - TODO (0) | 2023.05.21 |