03-1 기본중에 기본 SELECT ~ FROM ~ WHERE
SELECT : 구축이 완료된 테이블에서 데이터를 추출하는 기능
SELECT의 가장 기본적인 형식 : SELECT ~ FROM ~ WHERE
<데이터베이스 만들기>
DROP DATABASE IF EXISTS market_db; -- 1
CREATE DATABASE market_db; -- 2
1) DROP DATABASE는 market_db를 삭제하는 문장
2) 데이터베이스를 새로 만든다.
<회원 테이블 만들기>
USE market_db; -- 1
CREATE TABLE member -- 회원 테이블
( mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 회원 아이디(PK)
mem_name VARCHAR(10) NOT NULL, -- 이름
mem_number INT NOT NULL, -- 인원수
addr CHAR(2) NOT NULL, -- 주소
phone1 CHAR(3), -- 연락처의 국번
phone2 CHAR(8), -- 나머지 전화번호
height SMALLINT, -- 평균 키
debut_date DATE -- 데뷔일자
);
1) USE는 데이터베이스를 선택할때 사용한다.
<구매 테이블 만들기>
CREATE TABLE buy -- 구매 테이블 (1)
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY -- 순번(PK) (2)
mem_id CHAR(8) NOT NULL, -- 아이디(FK)
prod_name CHAR(6) NOT NULL, -- 제품 이름
group_name CHAR(4), -- 분류
price INT NOT NULL, -- 단가
amount SMALLINT NOT NULL, -- 수량
FOREIGN KEY(mem_id) REFERENCES member(mem_id) -- 3
);
1) 구매 테이블 생성
2) AUTO_INCREMENT : 자동으로 숫자를 입력해줌.
<데이터 입력하기>
INSERT INTO member VALUES('TWC','트와이스',9,'서울','02','11111111',167,'2015.10.19'); -- 1
INSERT INTO buy VALUES(NULL,'BLK','지갑',NULL,30,2); -- 2
1) 회원 테이블 값 입력. CHAR, VARCHAR, DATE형은 작은 따옴표로 값을 묶어준다. INT는 그냥 넣으면 된다.
2) 구매 테이블의 첫번째열인 순번은 자동으로 입력되므로 그 자리에는 NULL을 써주면 된다.
<SELECT문의 기본 형식>
SELECT 열 이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
- 숫자로 표현된 데이터는 관계 연산자 등으로 범위를 지정할 수 있다.
SELECT mem_id,mem_name FROM member WHERE height <= 162;
- 2가지 이상의 조건이 만족되도록 한다면 논리연산자를 활용하면 된다.
SELECT mem_id,mem_name FROM member WHERE height >= 165 AND mem_number > 6;
- 범위가 있는 값을 구하는 경우에는 BETWEEN ~ AND를 사용해도 된다.
SELECT mem_id,mem_name FROM member WHERE height BETWEEN 163 AND 165;
- 숫자가 아닌 문자로 표현된 데이터의 여러값을 구할때, IN()을 사용하면 간결하게 표현할 수 있다.
SELECT mem_id,mem_name FROM member WHERE addr IN('경기','전남','경남');
- 문자열의 일부 글자를 검색하려면 LIKE를 사용한다.
- 이때 %를 넣으면 그 뒤로 무엇이든 허용한다는 의미이며, 언더바(_)를 넣으면 한글자를 의미한다.
SELECT * FROM member WHERE mem_name LIKE '우%';
SELECT * FROM member WHERE mem_name LIKE '__핑크';
03-2 좀 더 깊게 알아보는 SELECT 문
<ORDER BY 절>
- 결과가 출력되는 순서를 조절
- 기본값은 ASC(오름차순), DESC로 설정가능(내림차순)
SELECT * FROM member WHERE height >= 165 ORDER BY debut_date DESC;
<LIMIT 절>
- 출력 개수를 제한 시킨다.
SELECT * FROM member LIMIT 3;
SELECT * FROM member LIMIT 3, 2; -- 3번째부터 2건만
<DISTINCT>
- 중복된 결과를 제거한다.
SELECT DISTINCT addr FROM member;
<GROUP BY>
- 그룹으로 묶어주는 역할.
SELECT mem_id,SUM(amount) FROM buy GROUP BY mem_id;
<집계함수>
- GROUP BY와 주로함께 사용하는 집계함수들
함수명 | 설명 |
SUM() | 합계 |
AVG() | 평균 |
MIN() | 최소값 |
MAX() | 최대값 |
COUNT() | 행의 개수 |
COUNT(DISTINCT) | 행의 개수(중복 없이) |
<HAVING 절>
- WHERE과 비슷한 개념으로 조건을 제한하지만, 집계 함수에 대해서 조건을 제한하는 것
SELECT mem_id,SUM(amount) FROM buy GROUP BY mem_id HAVING SUM(price*amount) > 1000;
03-3 데이터 변경을 위한 SQL 문
<데이터 입력 : INSERT>
INSERT INTO 테이블 [(열1, 열2, ...)] VALUES (값1, 값2, ...)
<자동으로 증가하는 AUTO_INCREMENT>
- AUTO_INCREMENT는 열을 정의할때 1부터 증가하는 값을 입력해줌.
- AUTO_INCREMENT로 지정하는 열은 꼭 PRIMARY KEY로 지정해줘야 한다.
- AUTO_INCREMENT의 시작값을 변경하고 싶다면 ALTER를 활용한다.
ALTER TABLE table1 AUTO_INCREMENT = 100;
- AUTO_INCREMENT의 증가값을 변경하고 싶다면 시스템변수인 @@auto_increment_increment 를 변경하면 된다.
SET @@auto_increment_increment= 3;
<데이터수정 : UPDATE>
UPDATE 테이블 이름
SET 열1 = 값1, 열2 = 값2, ...
WHERE 조건;
- WHERE이 없다면 모든 값이 바뀔수 있으니 주의하자.
<데이터 삭제 : DELETE>
DELETE FROM 테이블이름 WHERE 조건;
- 그 외 DROP, TRUNCATE문 등을 활용해서 삭제를 할수 있다.
- DROP은 테이블을 아예 없애는 방법, TRUNCATE,DELETE는 빈테이블을 남기며 TRUNCATE가 DELETE보다 빠르다.
DELETE FROM table1;
DROP TABLE table2;
TRUNCATE TABLE table3;
'혼공단 > 혼공단 7기' 카테고리의 다른 글
혼자 공부하는 SQL 4장 - SQL 고급문법 (0) | 2022.01.29 |
---|---|
[혼공단 7기] 혼자 공부하는 SQL 2주차 후기 및 미션 인증 (0) | 2022.01.22 |
[혼공단 7기] 혼자 공부하는 SQL 1주차 후기 및 미션 인증 (0) | 2022.01.16 |
혼자 공부하는 SQL 2장 - 실전용 SQL 미리 맛보기 (0) | 2022.01.15 |
혼자 공부하는 SQL 1장 - 데이터베이스와 SQL (0) | 2022.01.15 |