이번 주는 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개만 인정). |
사용해볼까요?
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 조건;