혼공단/혼공단 7기

혼자 공부하는 SQL 3장 - SQL 기본문법

하양훈 2022. 1. 22. 09:59
반응형

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;
반응형