Data Analysis/혼공SQL

[혼공SQL] 3-1. SELECT~FROM~WHERE

알밤바 2022. 5. 16. 10:06
728x90
반응형

본 포스팅은 '한빛출판네트워크'의 '혼공SQL' 책을 기반으로 작성한 포스팅입니다.

1. 실습용 데이터베이스 구축

1.1 데이터베이스 만들기

DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 삭제
CREATE DATABASE market_db;   -- 다시 market_db 생성

 

1.2 데이터베이스 지정

  • USE를 활용하여 현재 사용하는 데이터베이스를 지정
USE market_db;

 

1.3 테이블 만들기

1.3.1 회원 테이블(member)

CREATE TABLE member -- 회원 테이블(member) 생성
( mem_id  		CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(문자열 8자 / null값 x / PK)
  mem_name    	VARCHAR(10) NOT NULL, -- 이름 (문자열 10자 / null값 x)
  mem_number    INT NOT NULL,  -- 인원수 (정수 / null 값 x)
  addr	  		CHAR(2) NOT NULL, -- 지역(문자열 2자 / null 값 x)
  phone1		CHAR(3), -- 연락처의 국번(02, 031, 055 등 문자열 3자)
  phone2		CHAR(8), -- 연락처의 나머지 전화번호(하이픈제외 / 문자열 8자)
  height    	SMALLINT,  -- 평균 키
  debut_date	DATE  -- 데뷔 일자 (날짜)
);

MySQL 데이터형 및 크기

 

1.3.2 구매 테이블(buy)

CREATE TABLE buy -- 구매 테이블(buy) 생성
(  num 		    INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(정수 / 자동 숫자 입력 / null 값 x / PK)
   mem_id  	    CHAR(8) NOT NULL, -- 아이디(문자열 8자 / null 값 x / FK)
   prod_name 	CHAR(6) NOT NULL, --  제품이름 (문자열 6자 / null 값 x)
   group_name 	CHAR(4)  , -- 분류 (문자열 4자)
   price     	INT  NOT NULL, -- 가격 (정수 / null 값 x)
   amount    	SMALLINT  NOT NULL, -- 수량 (정수 / null 값 x)
   FOREIGN KEY (mem_id) REFERENCES member(mem_id)  -- foreign key 지정
);

[SQL][DDL] Foreign Key : 외래 키

 

1.4 데이터 입력하기

1.4.1 회원 테이블(member)

  • CHAR, VARCHAR DATE 형은 작은따옴표로 값을 묶어주기
  • INT형은 그대로 넣어주기
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');

 

1.4.2 구매 테이블 (buy)

  • 구매테이블의 순번(num)은 자동으로 입력되므로 NULL로 기재
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);

 

1.5 데이터 조회하기

SELECT * FROM member;

SELECT * FROM buy;

 

2. SELECT

SELECT 열_이름
		FROM 테이블_이름
    WHERE 조건식
	  GROUP BY 열_이름
    HAVING 조건식
    ORDER BY 열_이름
    LIMIT 숫자

 

📌 아래 2개의 식은 동일함

테이블의 전체 이름은 데이터베이스 이름.테이블 이름이나 USE문으로 데이터베이스를 지정해놓았기에 생략이 가능함

SELECT * FROM market_db.member;
SELECT * FROM member;

 

 

📌 필요한 열만 가지고 올 수도 있음

SELECT mem_name FROM member;

 

 

📌 열 이름의 별칭(alias) 설정 가능

  • 열 이름 다음에 지정하고 싶은 별칭 입력
  • 별칭에 공백이 있으면 큰따옴표로 묶기
SELECT addr 주소, debut_date "데뷔 일자" FROM member;

 

3. WHERE

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

 

📌 회원 테이블에서 회원 이름이 ‘블랙핑크’인 데이터만 추출

select * from member
where mem_name = '블랙핑크';

 

4. 관계 연산자, 논리 연산자

4.1 관계 연산자

  • <, >, = 등
select mem_id, mem_name from member
where height <= 162;

 

4.2 논리 연산자

  • AND, OR
select mem_name, height, mem_number from member
where height >= 162 and mem_number > 6;

 

4.3 BETWEEN ~ AND

select mem_name, height from member
where height between 163 and 165;
-- where height >= 163 and height <=165와 같음

 

4.4. IN()

  • 문자열은 범위를 지정할 수 없기에 IN을 사용하여 옵션 지정
  • OR 연산자로 일일이 써줄 필요 없음
select mem_name, addr from member
where addr IN('경기', '전남', '경남');

 

4.5 LIKE

📌 문자열의 일부 글자를 검색하려면 LIKE를 사용

select * from member
where mem_name LIKE '우%';

 

📌 뒤의 글자를 검색하려면 언더바(_)를 사용

select * from member
where mem_name LIKE '__핑크';

 

5. 서브 쿼리

  • mem_name이 ‘에이핑크’인 회원의 평균 키(height)보다 큰 회원을 검색

📌 서브 쿼리를 사용하지 않을 때는 아래의 코드로 검색

select height from member where mem_name = '에이핑크';
select mem_name, height from member where height > 164;

 

📌 서브 쿼리를 사용하였을 때

select mem_name, height from member
where height > (select height from member where mem_name = '에이핑크');

 

728x90
반응형