혼자 공부하는 SQL - 2주차

ki5o·2022년 7월 17일
0

2주차도 혼자 공부해봐요~

이번 주는 select문을 연습한다고 합니다.

인터넷 마켓 DB를 만들어야하는데 이건 혼공 자료실에서 예제를 다운받아 쓴다네요

예제 소스 다운로드~!

뭐야 왜 이렇게 커요?

ㅋㅅㅋㅅㅋ...아~ 설치 파일까지 다 들어가있어서~~!




DROP DATABASE IF EXISTS market_db;
CREATE DATABASE market_db;

이 문장은 데이터베이스를 삭제하는 문장입니다.
전 삭제하고 싶지않으니 직접 타이핑 하지않겠습니다.

삭제하고 다시 만드는 과정을 해보고 싶으시면 하면 됩니다.
하지만 저는 시간이 없는 관계로 생략합니다....^_^

그럼 이제 select문을 연습해보겠습니다

SELECT select_expr
	[FROM table_references]
    [WHERE where_condition]
    [GROUP BY {col_name | expr | positon}]
    [HAVING where_condition]
    [DRDER BY {col_name | expr | position}]
    [LIMIT {offset,] row_count | row_count OFFSET offset}]

형식으로 입력하면 됩니다.
어렵나요? 저도 어렵습니다.
아래를 봐주시길 바랍니다.

SELECT 열_이름
	[FROM 테이블_이름]
    [WHERE 조건식]
    [GROUP BY 열_이름]
    [HAVING 조건식]
    [DRDER BY 열_이름]
    [LIMIT 숫자]

확실히 한글로 보니 쉽게 보입니다.
저처럼 어렵다고 느낀 사람들은 먼저 영어와 익숙해질 필요가 있어보입니다.

SELECT * FROM member;

를 입력하여 member 테이블의 8개 열 전부가 나오는지 확인해줍니다.

SELECT FROM member;
SELECT
FROM market.member;

두 쿼리는 동일하지만 대부분 위의 문장을 사용한다고 합니다.

그럼 이젠 전체 열이 아닌 필요한 열만 가져오겠습니다.

SELECT mem_name FROM member;

위의 쿼리를 작성해줍니다.

신기합니다.

여러 개의 열을 가져오고 싶으면 콤마(,)로 구분하면 됩니다.

SELECT addr, debut_date, mem_name FROM member;


addr, debut_date, mem_name의 열만 가져온게 확인되었습니다!

특정한 조건만 조회하는 WHERE절을 이용해보겠습니다.
기본적인 WHERE절은

SELECT 열이름 FROM 테이블이름 WHERE 조건식;

형식으로 입력합니다. 또는

SELECT 열_이름
	FROM 테이블_이름
    WHERE 조건식;

으로 입력하면 됩니다.

그럼

SELECT * FROM member WHERE mem_name = '블랙핑크';

위의 쿼리를 입력해봅시다. 기대하는 결과는 블랙핑크라는 이름을 가진 모든 열이 나오는 것 입니다.

역시 기대를 저버리지 않습니다.

SELECT * FROM member WHERE mem_number = 4;

이번엔 어떤 결과가 나올 것 같나요?
저는 mem_number이 4인 모든 행의 열이 나올 것 같습니다.

좋습니다.

관계 연산자, 논리 연산자도 사용해봅시다.
관계 연산자 : >,<,>=,<=,= 등

SELECT mem_id, mem_name
	FROM member
    WHERE height <= 162;

어떤 결과가 나올까요?
키가 162이하인 mem_id, mem_name가 나올 것 같습니다.

어때보이나요?

논리 연산자 AND도 사용해봅시다.

SELECT mem_name, height, mem_number
	FROM member
    WHERE height >= 165 AND mem_number > 6;


어떤가요? 기대했던 결과인가요?

이번엔 OR을 사용해봅시다.

짜잔...~

BETWEEN ~AND를 사용해봅시다.
저는 이런 문법을 처음 보았습니다...

SELECT mem_name, height, mem_number
	FROM member
    WHERE height BETWEEN 163 AND 165;


어라 뭔가 이상합니다.

SELECT mem_name, height, mem_number
	FROM member
    WHERE height >= 165 AND mem_number > 6;

위의 코드를 작성했을 때와 같은 결과가 나오지 않나요?
정확하게 맞습니다. 찾고자 하는 범위가 같았기 때문입니다.

IN()
BETWEEN ~AND가 숫자를 사용하는 데이터의 범위를 지정할 수 있었다면
IN은 문자를 사용하는 데이터를 지정할 때 사용합니다.

SELECT mem_name, addr
	FROM member
    WHERE addr = '경기' OR addr = '전남' OR addr = '경남';

결과를 보면...

음! 잘 나왔습니다...

SELECT mem_name, addr
	FROM member
    WHERE addr IN('경기','전남','경남');

첫번째 문법 대신 이렇게도 작성이 가능하다고 합니다~ 꺄~
훨씬 간결해졌네요.

문자열의 일부 글자를 검색하는 LIKE

SELECT *
	FROM member
    WHERE mem_name LIKE '우%';


'우%'가 무엇을 의미하는지 알아야합니다. 제일 앞 글자가 '우'이면 무엇이든 혀용한다는 의미입니다.

한 글자나 원하는 글자 수가 있다면 언더바(_)를 사용해줍니다.

SELECT *
	FROM member
    WHERE mem_name LIKE '__핑크';

그럼 'ㅇㅇ핑크'의 형식으로 된 데이터가 나올까요?

역시!~ 잘 나오고 있습니다.

ORDER BY절
결과의 값이나 개수에 대해서 영향을 미치지는 않지만 결과를 출력할 때 영향을 줍니다.
정렬하는 순서를 지정해줍니다.

SELECT mem_id, mem_name, debut_date
	FROM member
    ORDER BY debut_date;


데뷔 일자가 빠른 순서대로 출력되었습니다.

늦은 순서로 정렬하려면 어떻게 해야할까요?
DESC를 추가해줍니다.(기본값 : ASC)

SELECT mem_id, mem_name, debut_date
	FROM member
    ORDER BY debut_date DESC;


Wow!~ 제대로 나왔습니다.

정렬하는 순서가 여러 개면 어떻게 될까요?

SELECT mem_id, mem_name, debut_date, height
	FROM member
    WHERE height >= 164
    ORDER BY height DESC, debut_date ASC;

이렇게 입력하면 키가 164 이상인 멤버 중에서
키가 큰 순서대로 나오면서 키가 같으면 데뷔 일자가 빠른 순서로 정렬되어 출력됩니다.

출력에 제한을 두는 LIMIT
우리는 이제 출력하는 개수에 제한을 둘 수 있습니다!

SELECT *
	FROM member
    LIMIT 3;

여기서 주목해야할 것은 LIMIT 형식은 시작, 개수입니다.
3만 쓰면 0, 3과 동일합니다. 3, 2의 형식으로 작성하면 3번째부터 2건을 조회합니다.

SELECT mem_name, height
	FROM member
    ORDER BY height DESC
    LIMIT 3, 2;

중복된 결과를 제거하는 DISTINCT

SELECT addr FROM member;


이 결과는 모두 예상했습니다.

하지만 중복되는 값을 없애고 싶습니다.

간단하게 DISTINCT를 사용해서 제거할 수 있습니다.

GROUP BY
GROUP BY는 그룹으로 묶어주는 역할을 합니다.

GROUP BY는 집계 함수와 같이 쓰입니다.

함수명 설명
SUM() 합계를 구합니다.
AVG() 평균를 구합니다.
MIN() 최소값을 구합니다.
MAX() 최대값을 구합니다.
COUNT() 행의 개수를 셉니다.
COUNT(DISTINCT(()) 행의 개수를 셉니다(중복은 1개만 인정).
위의 표는 GROUP BY에서 사용하는 집계 함수 입니다.

사용해볼까요?

SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;


위와 같은 결과를 확인할 수 있습니다.

별칭을 사용하여 결과를 출력해봅시다.

SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
	FROM buy GROUP BY mem_id;


이름이 변경된 것을 확인할 수 있었습니다!

HAVING
WHERE절에서는 집계 함수를 사용할 수 없습니다.
그럴때 HAVING절을 사용합니다.

SELECT mem_id "회원 아이디", sum(price*amount) "총 구매 금액"
	FROM buy
    GROUP BY mem_id
    HAVING SUM(price*amount) > 1000;

주의할 점은 HAVING절은 꼭 GROUP BY절 다음으로 나와야 합니다.

테이블에 데이터를 입력하는 INSERT
INSERT의 기본 문법은

INSERT INTO 테이블 [(열1, 열2, ...)] VALUES (값1, 값2, ...)

입력할 때 입력하는 값들의 순서, 개수는 테이블을 정의할 떄의 열 순서, 개수와 동일해야 합니다.

아무것도 쓰지않으면 NULL값이 들어가게 됩니다.

AUTO_INCREMENT를 쓰게 되면 해당 열은 자동으로 숫자가 1, 2, 3, ...으로 증가합니다.
단, 꼭 PRIMARY KEY로 지정해주어야 합니다.

데이터를 수정하는 UPDATE
기존에 입력되어 있는 값을 수정하는 명령입니다. 형식은

UPDATE 테이블_이름
	SET 열1=값1, 열2=값2,...
    WHERE 조건;

데이터 삭제 : DELETE
DELETE의 형식은

DELETE FROM 데이블_이름 WHERE 조건;

여기서 WHERE절을 작성하지 않으면 모든 행 데이터가 삭제됩니다.


기본 미션 : 138P의 확인문제 2번 풀고 인증샷

선택 미션 : 데이터를 입력,삭제하는 기본 형식 작성하기
데이터 입력 기본 형식

INSERT INTO 테이블 [(열1, 열2, ...)] VALUES (값1, 값2, ...)

데이터 삭제 기본 형식

DELETE FROM 데이블_이름 WHERE 조건;

시험이 끝나자마자 신나게 집으로 달려갔더니 기숙사에 책을 두고 와버렸지 뭐에요 지금이라도?후다닥 파이팅망고
profile
ki2o

0개의 댓글