티스토리 뷰
안녕하세요! 이번 포스팅에서는 혼공단 2주차겸 SQL 기본문법 SELECT에 대해서 다뤄보겠습니다. 시작하기에 앞서 본 포스팅은 혼자 공부하는 SQL 책의 내용을 바탕으로 구성되었습니다. 데이터베이스 또한 책의 자료를 사용했습니다.
https://www.hanbit.co.kr/support/supplement_survey.html?pcode=B6846155853
이곳에서 예제 소스를 다운받아 market_db.sql 파일을 실행합니다.
market_db이 제대로 생성된 것을 확인할 수 있습니다. 이때 sql 파일을 실행시키고 좌측에 있는 SCHEMA를 새로고침 해줘야합니다. 안그러면 실행했는데도 파일 구성이 안바뀐 것처럼 보입니다.
다음은 혼자 공부하는 SQL 책에 나온 확인문제 답입니다!
1. USE 문
SELECT 문을 실행하기 전에 사용할 데이터베이스를 지정하는 문법입니다.
--USE 데이터베이스_이름;
USE market_db;
2. SELECT 기본형식
<메뉴얼>
SELECT select_expr
[FROM table_references]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
<간단 ver>
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
<Example>
USE market_db; --market_db 데이터베이스 선택
SELECT * FROM market_db.market --market_db의 market 테이블 선택
SELECT addr,debut_date,mem_name FROM member; -- member 테이블에서 addr,debut_date,mem_name 열 추출하기
3. WHERE 활용
WHERE은 조회하는 결과에 특정한 조건을 추가해서 원하는 데이터만 보고싶을때 사용
SELECT 열_이름 FROM 테이블_이름 WHERE 조건식;
<Example>
SELECT * FROM member WHERE mem_number=4; --mem_number가 4인 행을 member 테이블에서 찾아서 출력
SELECT mem_id, mem_name --mem_id,mem_name 출력
FROM member --member 테이블에서
WHERE height<=162; --height가 162 이하일 경우
--BETWEEN ~AND : 범위 지정할때
SELECT mem_name, height
FROM member
WHERE height BETWEEN 163 AND 165 --163과 165사이
--IN() : 문자로 표현된 데이터 검색할때
SELECT mem_name, height
FROM member
WHERE addr IN('경기','전남','경남'); -- addr가 경기,전남,경남인 경우
--LIKE : 문자열의 일부 글자를 검색할때
SELECT mem_name, height
FROM member
WHERE mem_name LIKE '우%' --mem_name 첫글자가 우로 시작하는 데이터
WHERE mem_name LIKE '__핑크' -- 언더바(_)는 한글자와 매치
4. ORDER BY 절
ORDER BY : 결과의 값이나 개수에 대해서는 영향을 미치지 않지만, 결과가 출력되는 순서를 조절
* ORDER BY절은 WHERE절 다음에 나와야한다.
- ASC : 오름차순(Ascending)
- DESC : 내림차순(Descending)
<Example>
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC, debut_date ASC;
5. LIMIT
LIMIT : 출력하는 개수를 제한
LIMIT 시작, 개수
SELECT mem_name, height
FROM member
ORDER BY height DESC
LIMIT 3,2; --3번째부터 2건만
SELECT mem_name, height
FROM member
ORDER BY height DESC
LIMIT 4; --전체 중 앞에서 4건만
6. DISTINCT
DISTINCT : 조회된 결과에서 중복된 데이터를 1개만 남긴다.
SELECT DISTINCT addr FROM member;
7. GROUP BY 절
GROUP BY : 그룹을 묶어주는 역할
- 집계함수(aggregate function) : GROUP BY 절과 함께 쓰이며 데이터를 그룹화(grouping)해주는 기능
함수명 | 설명 |
SUM() | 합계를 구합니다. |
AVG() | 평균을 구합니다. |
MIN() | 최솟값을 구합니다. |
MAX() | 최댓값을 구합니다. |
COUNT() | 행의 개수를 셉니다. |
COUNT(DISTINCT) | 행의 개수를 셉니다(중복은 1개만 인정). |
<Example>
SELECT mem_id, SUM(amount)
FROM buy
GROUP BY mem_id;
--별칭 사용
SELECT mem_id "회원 아이디" , SUM(amount) "총 구매 개수"
FROM buy
GROUP BY mem_id;
--총 구매 금액
SELECT mem_id "회원 아이디", SUM(amount*price) "총 구매 금액"
FROM buy
GROUP BY mem_id;
--전체 회원이 구매한 물품 개수(amount)의 평균
SELECT mem_id, AVG(amount) "평균 구매 개수"
FROM buy
GROUP BY mem_id;
8. HAVING 절
HAVING: 집계함수에서 조건을 제한할 때 사용하는 것
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price*amount) > 1000; --1000원 이상 산 사용자만 집계
ORDER BY SUM(price*amount) DESC --총 구매액이 큰 사용자 순으로 정렬
다음은 데이터를 입력/수정/삭제하는 기능에 관련된 내용입니다!
9. INSERT
INSERT : 테이블에 행 데이터를 입력
- 테이블 이름 다음에 나오는 열은 생략 가능
- VALUES 다음에 나오는 값들의 순서 및 개수는 테이블을 정의할 때의 열 순서 및 개수와 동일해야함
- 열 순서를 바꿔서 입력하고 싶을 때는 열 이름과 값을 원하는 순서에 맞춰서 써야함
--데이터 입력 기본 형식
INSERT INTO 테이블 [(열1,열2, ...)] VALUES (값1, 값2, ...)
--예제
USE market_db;
CREATE TABLE hongong1 (toy_id INT, toy_name CHAR(4), age INT);
INSERT INTO hongkong1 VALUES (1,'우디',25);
AUTO_INCREMENT
: 열을 정의할 때 1부터 증가하는 값을 입력
: 반드시 PRIMARY KEY 지정
CREATE TABLE hongong3 (
toy_id INT AUTO_INCREMENT PRIMARY KEY, --AUTO_INCREMENT 사용
toy_name CHAR(4),
age INT);
ALTER TABLE hongong3 AUTO_INCREMENT=1000; --시작은 1000
SET @@auto_increment_increment=3; --증가값은 3으로 지정 (system variable)
INSERT INTO ~ SELECT
: 다른 테이블에 이미 입력된 데이터를 가져온다.
: SELECT 문의 열 개수는 INSERT할 테이블의 열 개수와 같아야한다.
INSERT INTO 테이블_이름 (열_이름1, 열_이름2, ...)
SELECT 문;
10. UPDATE
: 기존에 입력되어 있는 값을 수정
: Workbench에서 사용할 경우 설정 변경 필요
: WHERE을 쓰지 않을경우 모든 행의 정보가 바뀐다.
UPDATE 테이블_이름
SET 열1=값1, 열2=값2, ...
WHERE 조건;
--예제 1
UPDATE city_popul
SET city_name='뉴욕', population=0
WHERE city_name = 'New York';
SELECT * FROM city_popul WHERE city_name='뉴욕';
--예제 2
UPDATE city_popul
SET population = population / 10000;
SELECT * FROM city_popul LIMIT 5;
11. DELETE
: 행 단위로 삭제
--데이터 삭제 기본 형식
DELETE FROM 테이블이름 WHERE 조건;
--예제
DELETE FROM city_popul
WHERE city_name LIKE 'New%'
LIMIT 5
이상으로 혼공단 2주차 공부 내용입니다!
'👩🏻💻개발공부 > 혼공단 9기 SQL' 카테고리의 다른 글
혼공단 4주차 미션! (0) | 2023.02.05 |
---|---|
혼공단 3주차! (0) | 2023.01.21 |
데이터베이스 기본 개념 (DB,DBMS,SQL) - 혼공단 1주차 (0) | 2023.01.06 |
MySQL 맥북(macOS)에서 다운로드하는 방법 (2) | 2023.01.05 |
혼공단 SQL 시작! (0) | 2023.01.02 |
- Total
- Today
- Yesterday
- AWS
- MySQL
- nodejs
- 해커톤
- 혼공단 9기
- 개발일지
- 혼공단 SQL
- 혼공
- 백엔드 개발
- Process
- 스페인
- 개발
- JS
- Signal
- 공룡책
- 리눅스
- 혼공단
- googleapis
- 교환학생
- 프로젝트
- 스페인 교환학생
- 백준
- C++
- Linux
- 자바스크립트
- 혼공학습단
- SQL
- 운영체제
- 깃 예제
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |