[혼자 공부하는 SQL] 3장

728x90

 

Chapter3 SQL 기본 문법

3-1 기본 중에 기본 SELECT ~ FROM ~ WHERE

SELECT문

 

- 구축이 완료된 테이블에서 데이터를 추출하는 기능
- 기본 형식 SELECT ~ FROM ~ WHERE

 

실습용 데이터베이스

DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 우선 삭제한다.
CREATE DATABASE market_db;

USE market_db;
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, -- 지역(경기,서울,경남 식으로 2글자만입력)
  phone1		CHAR(3), -- 연락처의 국번(02, 031, 055 등)
  phone2		CHAR(8), -- 연락처의 나머지 전화번호(하이픈제외)
  height    	SMALLINT,  -- 평균 키
  debut_date	DATE  -- 데뷔 일자
);
CREATE TABLE buy -- 구매 테이블
(  num 		INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
   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)
);

INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19');
INSERT INTO member VALUES('BLK', '블랙핑크', 4, '경남', '055', '22222222', 163, '2016.08.08');
INSERT INTO member VALUES('WMN', '여자친구', 6, '경기', '031', '33333333', 166, '2015.01.15');
INSERT INTO member VALUES('OMY', '오마이걸', 7, '서울', NULL, NULL, 160, '2015.04.21');
INSERT INTO member VALUES('GRL', '소녀시대', 8, '서울', '02', '44444444', 168, '2007.08.02');
INSERT INTO member VALUES('ITZ', '잇지', 5, '경남', NULL, NULL, 167, '2019.02.12');
INSERT INTO member VALUES('RED', '레드벨벳', 4, '경북', '054', '55555555', 161, '2014.08.01');
INSERT INTO member VALUES('APN', '에이핑크', 6, '경기', '031', '77777777', 164, '2011.02.10');
INSERT INTO member VALUES('SPC', '우주소녀', 13, '서울', '02', '88888888', 162, '2016.02.25');
INSERT INTO member VALUES('MMU', '마마무', 4, '전남', '061', '99999999', 165, '2014.06.19');

INSERT INTO buy VALUES(NULL, 'BLK', '지갑', NULL, 30, 2);
INSERT INTO buy VALUES(NULL, 'BLK', '맥북프로', '디지털', 1000, 1);
INSERT INTO buy VALUES(NULL, 'APN', '아이폰', '디지털', 200, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '아이폰', '디지털', 200, 5);
INSERT INTO buy VALUES(NULL, 'BLK', '청바지', '패션', 50, 3);
INSERT INTO buy VALUES(NULL, 'MMU', '에어팟', '디지털', 80, 10);
INSERT INTO buy VALUES(NULL, 'GRL', '혼공SQL', '서적', 15, 5);
INSERT INTO buy VALUES(NULL, 'APN', '혼공SQL', '서적', 15, 2);
INSERT INTO buy VALUES(NULL, 'APN', '청바지', '패션', 50, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '지갑', NULL, 30, 1);
INSERT INTO buy VALUES(NULL, 'APN', '혼공SQL', '서적', 15, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '지갑', NULL, 30, 4);

SELECT * FROM member;
SELECT * FROM buy;

 

USE문 : 데이터베이스를 선택하는 문장

  • USE 데이터베이스_이름;

AUTO_INCREMENT : 자동으로 숫자 입력

 

SELECT문 형식

 

SELECT 열_이름

 FROM 테이블_이름

 WHERE 조건식

 GROUP BY 열_이름

 HAVING 조건식

 ORDER BY 열_이름

 LIMIT 숫자

 

관계 연산자 : <, >, <=, >=, = 등

 

논리 연산자 : AND, OR

 

BETWEEN A AND B 

 

IN()

 

LIKE : 문자 검색

  • 무엇이든 허용: %, 하나로 지정: _

확인문제

  1. 4번
    • 회원 테이블(PK), 구매 테이블(FK)은 연결되어 있다.
  2. 2, 3번
    • 테이블 지정 X
    • MySQL 워크벤치를 재시작하거나, 새 쿼리 창을 열면 USE를 재지정해야 한다.
  3. 1번
  4. 1, 3번

 

3-2 좀 더 깊게 알아보는 SELECT 문

 

ORDER BY: 결과의 정렬

  • ASC(기본값): 오름차순, DESC: 내림차순

LIMIT: 결과의 개수 제한

  • 중간부터 출력도 가능(LIMIT3, 2; 는 3번째부터 2건 조회)

DISTINCT: 중복된 데이터 제거

 

GROUP BY: 지정한 열의 데이터들을 그룹으로 묶음

  • HABING: GROUP BY절에 조건식 추가
  • GROUP BY와 함께 주로 사용되는 집계 함수
SUM() 합계를 구합니다
AVG() 평균을 구합니다
MIN() 최소값을 구합니다
MAX() 최대값을 구합니다
COUNT() 행의 개수를 셉니다
COUNT(DISTINCT) 행의 개수를 셉니다(중복은 1개만 인정)

 

간단한 실습

 

확인문제

  1. SELECT, FROM, WHERE, ORDER BY, LIMIT 순서

    1. SELECT * FROM member ORDER BY height;
    2. SELECT * FROM member LIMIT 5, 2;
    3. SELECT DISTINCT phone1 FROM member;
  2.  오름차순 ASC, 내림차순 DESC
  3.  LIMIT 0, 3, 5
  4.  DISTINCT
  5.  HAVING()

 

3-3 데이터 변경을 위한 SQL문

INSERT: 테이블에 데이터 삽입 하는 명령어

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

 

AUTO_INCREMENT: 1부터 증가하는 값을 입력,  반드시 PRIMARY KEY로 지정

  • @@auto_increment_increment: AUTO_INCREMENT의 증가값을 지정하는 시스템 변수

 

INSERT INTO ~ SELECT: 다른 테이블의 데이터를 한 번에 입력하는 구문

INSERT INTO 테이블_이름 (열_이름1, 열_이름2, ...)
SELECT 문;

 

UPDATE: 기존에 입력되어 있는 값 수정

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

 

DELETE: 테이블의 행 데이터 삭제

DELETE FROM 테이블이름 WHERE 조건;

 

확인문제 

  1. 테이블 이름 생략 불가능
  2. AUTO_INCREMENT 값 직접 입력X / INSERT문에서 해당 위치의 열은 NULL를 남겨 둠
  3. LAST_INSERT_ID() : AUTO_INCREMENT로 지정한 열에 현재 어디까지 입력되었는지 확인하는 함수 
  4. INSERT INTO ~ SELECT: 다른 테이블의 데이터를 한 번에 입력하는 구문
  5. UPDATE, SET, WHERE
  6. TRUNCATE

 

728x90

'SQL > 혼자 공부하는 SQL' 카테고리의 다른 글

[혼자 공부하는 SQL] 6장  (2) 2024.01.07
[혼자 공부하는 SQL] 5장  (0) 2023.12.16
[혼자 공부하는 SQL] 4-3  (0) 2023.12.08
[혼자 공부하는 SQL] 4(4-1, 4-2)장  (4) 2023.12.04
[혼자 공부하는 SQL] 2장  (0) 2023.11.24