데이터 분석가:Applied Data Analytics/SQL

혼자 공부하는 SQL-3장-SQL 기본 문법 ~ Select문 데이터 변경을 위한 SQL문

데이터분석 2025. 1. 7. 16:14
320x100
728x90

USE  SELECT~FROM~WHERE  관계연산자   논리 연산자   LIKE

ORDER BY   LIMIT   DISTINCT   GROUP BY   HAVING

INSERT   AUTO_INCREMENT   INSER INTO~SELECT   UPDATE   DELETE

 

MySQL(표준SQL) 은 많은 회사에서 다루고 있기 때문에 알고있으면 많은 도움이 됩니다.

 

SELECT 완료된 테이블에서 테이터를 추출하는 기능

  • 기본 형식 : SELECT ~ FROM ~ WHERE (SELECT 다음은 열이름, FROM 다음에는 테이블 이름이 온다. WHERE 다음에는 조건식이온다. )

예제파일을 열고 Execute를 실행한 모습

-- 회원 아이디 (주석으로 -- 이후 한칸을 띄우고 설명을 작성해야됨)

 

위의 예제는 아래 처럼 구분 됩니다.

 

회원 테이블 만들기

USE market_db;  -- 사용할 데이터베이스 지정 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;

 

※ 지금까지 구성은 테이블 만들기 - 데이터 입력하기 - 데이터 조회하기 입니다.

 

기본 조회하기 : SELECT ~ FROM

use market_db;
select * from market_db.member ; -- *(모든것) 여기서는 member 테이블의 8개 열 모두 FROM 다음에 테이블 이름

-- (USE문에 지정해 놓은 market_db 데이터베이스_이름이 있으므로, 테이블 이름만 사용해도 된다.)

 

쿼리 창의 SELECT문 과 FROM 실행

 

SELECT ~ FROM ~ WHERE (WHERE는 필요한 것들만 골라서 결과를 보는 효과로 WHERE없이 조회하면 테이블의 모든행이 출력되므로 주의하고 실무에서는 SELECT문은 WHERE문과 같이 사용된다.)

 

select문의 사용예

SELECT * 
from member
where mem_name = '블랙핑크'; -- ; 전까지는 한줄에 안써도 상관없다
select * from member where mem_number = 4; -- mem_number처럼 숫자형 열을 조회할 때는 작은따움표가 필요없다.
select mem_id, mem_name from member where height <= 162; -- 평균키가 162이하인 회원
select mem_id, mem_name from member where height >= 165 and mem_number >6;  -- 평균키가 165이상이며 인원도 6명 초과인 회원
select mem_id, mem_name, height from member where height >= 165 or mem_number >6;  -- 평균키가 165이상이거나 인원이 6명 초과인 회원 전부
select height, mem_name from member where height >= 163 and height <=165;  -- 평균키가 163이상이며 165이하인  회원
select height, mem_name from member where height between 163 and 165;  -- between 문으로 동일한 내용 평균키가 163이상이며 165이하인  회원
select mem_name, addr from member where addr = '경기' or addr = '전남' or addr = '경남';  -- 주소 문자는 경기/전남/경남 중 한곳에 사는 회원을 검색하려면 or로 일일이 써줘야함.
select mem_name, addr from member where addr IN('경기', '전남', '경남');  -- 위에 or 문과 동일한 내용
select * from member where mem_name like '우%'; -- mem_name 중 젤 앞 글자가 '우'이고 뒤에는 무엇이든지 허용
select * from member where mem_name like '__핑크';  -- 언더바 2개로 뒤에 '핑크'글자 포함을 출력
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 = '에이핑크');  -- 에이핑크의 키를 출력해서 그키보다 큰 키를 출력을 에이핑크 키 보다 큰 키를 출력으로 Select두개 사용 

 

ORDER BY 절 : 결과가 출력되는 순서를 조절

집계함수

SUM() 합계를 구함

AVG() 평균을 구함

MIN() 최소값을 구함

MAX() 최대값을 구함

COUNT() 행의 개수를 구함

COUNT(DISTINCT) 행의 개수를 셉니다(중복은 1개만 인정)

 

 

alter table로 100부터 시작하게 변경된 결과
또다른 테이블 hongong3를 만든다음 시작을 1000으로 설정하고 @@으로 증가값을 3으로

 

시작이 1000으로 시작하고 증가는 3씩 증가
다른 테이블 값을 가져오는 insert into ~ select
update 및 delete를 실행하기 전 설정을 변경해야 된다.
update 사용예 where문이 없을 경우 모든 행에 해당되므로 주의

 

select * from city_popul where city_name like 'new%';

new로 시작하는 도시를 보여주며 44개의 도시가 있는걸 알수 있다.

 

delete from city_popul where city_name like 'new%' limit 5;  -- new로시작하는 도시중 상위5건만 삭제

 

delete from big_table1; -- 테이블구조를 남기지만 속도가 느림.
drop table big_table2;  -- 속도는 빠르지만 테이블 자체를 삭제함.
truncate table big_table3;  -- 테이블 구조를 남기고 빠르게 삭제. (테이블구조를 남겨야한다면 추천)