[혼자 공부하는 SQL] Chapter 03

혜원·2024년 1월 18일
0

혼자 공부하는 SQL

목록 보기
2/4

벨로그가 제목을 적지 않으면 임시저장이 안된다는걸 지금 알아버린 1인...
알고싶지 않았는데 말이죠.....

기본 미션: p. 138의 확인 문제 2번 풀고 인증하기


데이터베이스 만들기

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  -- 데뷔 일자
);

VARCHAR = CHAR와 동일하게 문자를 입력하는 것


구매테이블 만들기

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)
);

구매 테이블 생성후 회원테이블 만들었던것과 같이 만들어줌
AUTO_INCREMENT = 순번을 입력할 필요없이 자동으로 숫자를 입력해줌


데이터 입력하기

  • int형은 작은따옴표없이 그냥 넣어주면 됨

데이터 조회하기

SELECT * FROM member;
SELECT * FROM buy;

입력된 내용을 확인해주기 위해서 SELECT로 조회해줌



이런식으로 테이블을 완성시켰다.


SELECT ~ FROM

USE문

USE 데이터베이스_이름

SELECT문을 실행하기 전 사용할 데이터베이스를 지정해야함
만약 market_db를 사용한다면 쿼리창에 USE market_db 입력


SELECT와 FROM

USE market_db;
SELECT * FROM member;

member 테이블에서 모든 열의 내용을 가져오라는 의미

  • SELECT = 테이블에서 데이터를 가져올 때 사용하는 예약어
  • "*" = 일반적으로 '모든 것'을 의미
  • FROM 다음에는 테이블 이름이 나오고 그 테이블에서 데이터를 가져옴

SELECT * FROM market_db.member;

원래 테이블의 전체 이름은 데이터베이스이름.테이블이름 형식으로 표현함
원칙적으로는 위와 같이 사용하는게 옳은 방법

하지만 데이터베이스 이름을 생략하면 USE문으로 지정해놓은 데이터베이스가 자동으로 선택되기에 두 쿼리가 동일한 것이 됨


특정 조건만 조회하기 SELECT ~ FROM ~ WHERE

기본 WHERE절

SELECT 열_이름 FROM 테이블_이름 WHERE 조건식;

찾는 이름이 블랙핑크라면 다음과 같은 조건식을 사용하면 됨


관계연산자 논리연산자의 사용

  • 숫자로 표현된 데이터는 범위 지정 가능 ( >, <, >=, <=, =)
  • 두 조건 모두 만족해야할 시 AND
  • 한 조건만 만족해도 된다면 OR
  • 범위에 있는 값을 구할 경우 BETWEEN ~ AND
  • 문자로 표현되는 데이터를 더 간결하게 나타낼 때 IN()
  • 문자의 일부 글자를 검색 할 때 LIKE
  • 한 글자와 매치시킬 때는 _(언더바)

ORDER BY절

  • 결과가 출력되는 순서를 조절함

데뷔일자가 빠른 순서대로 출력
만약 데뷔일자가 늦은 순서대로 출력하고 싶다면 맨 마지막에 DESC를 붙이면 됨


LIMIT

출력하는 개수를 제한함

이렇게 사용하게 되면 앞에서 3건만 조회 가능함

  • LIMIT 형식 : LIMIT 시작, 개수
    LIMIT 3만 쓴다면 LIMIT 0,3과 동일함

DISTINCT

조회된 결과에서 중복된 데이터를 1개만 남김

이런식으로 즁복된 데이터를 1개만 남기고 제거하는 것을 볼 수 있다.


GROUP BY

  • GROUP BY는 말그대로 그룹으로 묶어주는 역할을 함

집계 함수

함수명설명
SUM()합계를 구함
AVG()평균을 구함
MIN()최소값을 구함
MAX()최대값을 구함
COUNT()행의 개수를 셈
COUNT(DISTINCT)중복은 1개만 인정하고 행의 개수를 셈

이렇게 각 회원별로 구매한 개수를 합쳐서 출력할 수 있음


HAVING 절

집계 함수에 대한 조건을 제한함

총 구매액이 1000이상인 회원만 나타내게 한 것이다.
WHERE도 사용가능 할 것 같아 보이지만 WHERE절은 집계함수와 관련되어 사용할 수 없다.


데이터 입력 INSERT

테이블에 행 데이터를 입력하는 기본적인 SQL문은 INSERT임

기본적인 형식

INSERT INTO 테이블 [(1,2, ... )] VALUES (1,2 ...)

AUTO_INCREMENT

  • AUTO_INCREMENT는 열을 정의할 때 1부터 증가하는 값을 입력해준다.
  • 단, AUTO_INCREMENT로 지정하는 열은 꼭 PRIMARY KEY로 지정해줘야 함

INSERT INTO ~ SELECT

  • 다른 테이블의 데이터를 가져와서 한번에 입력할 수 있게 함
  • SELECT문의 열 개수와 INSERT할 테이블의 열 개수와 같아야 함

world.city 테이블의 내용을 city_popul 테이블에 입력해보았다.
이렇게 다른 테이블의 데이터를 한번에 가져왔다.


데이터 수정 UPDATE

UPDATE문의 기본 문법

UPDATE 테이블_이름
SET1 =1,2 =2, ...
WHERE 조건;

이렇게 도시이름중에서 seoul을 서울로 변경해주었다.


![](https://velog.velcdn.com/images/hyewon4052/post/4ba054fa-1060-4a1b-bae9-1d99dde30602/image.jpg) ![](https://velog.velcdn.com/images/hyewon4052/post/884f2c00-e7de-4192-900a-4e5250093673/image.jpg) ![](https://velog.velcdn.com/images/hyewon4052/post/e32e3259-5acb-4409-b12f-78664a0240e8/image.jpg)

데이터 삭제 DELETE

기본 형식은 이렇다

DELETE FROM 테이블이름 WHERE 조건;


city_popul테이블에서 new로 시작하는 도시를 삭제하기 위해 입력해준 코드이다.

0개의 댓글