
SQL ( Structured Query Language ) : 구조적 쿼리 언어 ( 비절차식 )
관계형 데이터베이스에 정보 저장/처리하기 위한 프로그래밍 언어
명령어 사용 시 주의할 점 !
문자열은 ‘’ 작은 따옴표 사용
마지막에 ; 세미콜론으로 마무리
*(별표) : all, 모든 데이터를 의미
SELECT문 : 데이터 검색 ( 질의어 ), 가장 많이 사용됨
SELECT 속성이름 FROM 테이블이름 WHERE 조건
ex) 홍지수 고객의 주소를 찾으시오.
→ SELECT addr FROM customer WHERE custname = ‘홍지수’;
** SELECT문 실행순서
- 조회 테이블 확인 ( FROM )
- 데이터 추출 조건 확인 ( WHERE )
- 컬럼 그룹화 ( GROUP BY )
- 그룹화 조건 ( HAVING )
- 데이터 추출 ( SELECT )
- 데이터 순서 정렬 ( ORDER BY )
SELECT DISTINCT 속성이름 FROM 테이블이름 WHERE 조건 ORDER BY 속성이름
ex) 고객테이블에 있는 모든 주소를 검색 ( 중복 포함된 결과 )
SELECT addr FROM customer;
ex) 고객테이블에 있는 모든 주소를 검색 ( 중복 제외 ) -> DISTINCT
SELECT DISTINCT addr FROM customer;
SELECT 속성이름 FROM 테이블이름 WHERE 조건
ex) 제품 가격이 4000원 이상인 주문 내역 검색
SELECT * FROM orders WHERE price >= 4000;
비교 조건
= : 같다
: ~보다 크다
= : ~보다 크거나 같다
< : ~보다 작다
< = : ~보다 작거나 같다
! = , ^= , <> : 같지 않다 ( NOT 컬럼명 = ~와 같지 않다 )
SELECT 속성 FROM 테이블 WHERE 조건 ORDER BY 속성
order by 절을 사용하지 않는 경우,
pk기준으로 정렬 ( 인스턴스는 ABC순(오름차순)으로 정렬 )
ASC 오름차순 (기본값) / DESC 내림차순
ex) custname 기준으로 정렬
SELECT * FROM customer ORDER BY custname;
ex) custname 기준으로 내림차순 정렬
SELECT * FROM customer ORDER BY custname DESC;
ex) 2000년 이후 출생자 중에서 주소를 기준으로 내림차순 검색
SELECT * FROM customer WHERE birth >= '2000-01-01' ORDER BY addr DESC;
AND : 앞의 조건과 뒤의 조건이 같이 ‘참’이면 ‘참’
OR : 앞의 조건이나 뒤의조건 둘 중에 하나만 ‘참’이라도 ‘참’
NOT : 뒤의 조건과 반대
ex) 주소지가 대한민국이고, 2000년 이후 출생 고객 검색
SELECT * FROM customer WHERE addr LIKE '대한민국%' AND birth >= '2000-01-01';
ex) 휴대폰 번호 마지막 자리가 4가 아닌 고객 검색
SELECT * FROM customer WHERE phone NOT LIKE '%4';
ex) 1995년이상 2000년이하 출생 고객 검색
SELECT * FROM customer WHERE birth BETWEEN '1995-01-01' AND '2000-12-31';
SELECT * FROM customer WHERE birth >= '1995-01-01' AND birth <= '2000-12-31';
ex) 주소가 서울 혹은 런던인 고객 검색
SELECT * FROM customer WHERE addr = '대한민국 서울' or addr = '영국 런던';
ex) 주소가 서울 혹은 런던 아닌 고객 검색
SELECT * FROM customer WHERE addr != '대한민국 서울' or addr != '영국 런던';
% : 0개 이상의 문자
_: 1개의 단일 문자
ex) 고객 이름 두번째 글자가 '지'인 고객 검색
-- 이름이 3글자이며, 두번째 글자가 '지'인 경우만 해당
SELECT * FROM customer WHERE custname LIKE '지';
-- 이름 글자 수 제한 없이 두번째 글자가 '지'인 경우
SELECT * FROM customer WHERE custname LIKE '_지%';
-- 이름에 '지'가 들어가는 사람
SELECT * FROM customer WHERE custname LIKE '%지%';
주의) LIMIT에서 시작은 0임을 잊지말자 !!
LIMIT 개수 == LIMIT 시작, 개수 == LIMIT 개수 OFFSET 시작
LIMIT 2; == LIMIT 0, 2; == LIMIT 2 OFFSET 0
ex) 고객 테이블 전체 정보를 조회, 앞에 2건만 조회하고 싶은 경우
SELECT * FROM customer LIMIT 2;
ex) 고객 테이블 전테 정보를 조회, 두번째부터 여섯번째 행만 조회하고 싶은 경우
SELECT * FROM customer LIMIT 1, 5;
SELECT 집계함수 (속성이름) ….
SUM() : 합계
AVG() : 평균 값
MAX() : 최대값
MIN() : 최소값
COUNT() : 행 개수
COUNT(DISTINCT) : 중복 제외한 행 개수
SELECT COUNT() FROM orders;
SELECT COUNT() AS 'number_orders' FROM orders;
SELECT COUNT(orderid) FROM orders;
SELECT COUNT(*) FROM customer; -- 10
SELECT COUNT(phone) FROM customer; -- 9
customer 테이블 phone 속성엔 NULL 값이 1개 있기 때문에 9개가 조회
SELECT 속성 FROM 테이블 WHERE 조건 GROUP BY 속성 ORDER BY 속성 LIMIT 개수
-- 고객별로 주문한 주문 내역 건수 구하기
SELECT custid, count(*) FROM orders GROUP BY custid;

orders 테이블에서 custid 별로 주문 건수를 그룹화하여 custid 주문 개수를 카운트 함
SELECT 속성 FROM 테이블 WHERE 조건 GROUP BY 속성 HAVING 조건 ORDER BY 속성 LIMIT 개수
-- 총 주문액이 10000원 이상인 고객에 대해 고객별로 주문한 상품 총수량 구하기
SELECT custid, SUM(priceamount) total_price, SUM(amount) total_amount
FROM orders
GROUP BY custid
HAVING SUM(priceamount) >= '10000';

orders 테이블에서 custid 별로 총 주문액 합계가 10000원이상 총 주문액 합계(total_price)와 총 주문 건수 합계(total_amount)를 조회

MySQL Workbench를 사용할 때는 지정해둔 User ID와 PW를 사용하여 시작한다.


CMD를 이용해 MySQL가 있는 위치로 변경하고
mysql -u root -p를 통해서 로그인하고 비번을 넣는다.
프롬프트 명령어를 사용하여 명령어를 작성한다.
cd ( change directory ) : 작업 디렉토리의 위치를 변경
프롬프트 ( Prompt ) : 다음 동작에 대한 명령어, 지시어
복사/붙여넣기 단축키 사용가능
주소사이의 공백 인정
이전 명령어 → 방향키 ( 오타났을 때 유용 )
시스템 환경 변수 편집 -> 미리 설정이 되어있어야 함.


Git Bash를 이용해 MySQL가 있는 위치로 변경하고
mysql -u root -p를 통해서 로그인하고 비번을 넣는다.
프롬프트 명령어를 사용하여 명령어를 작성한다.
복사/붙여넣기 단축키 사용불가능 → 마우스 오른쪽 버튼
주소사이의 공백 불인정 → “ ” 큰 따옴표 사용
이전 명령어 → 방향키 ( 오타났을 때 유용 )
그 밖에 사용된 명령어
테이블의 구조 속성 확인할 때 → DESC 테이블이름;
DESC customer;테이블의 속성명 바꿀 때 -> AS '바꿀 속성명'
SELECT custid COUNT(*) AS 'total_custid' ... ;IS NULL -> 속성 값에 빈 값이 있는 경우를 조회
-- 고객 테이블에서 연락처가 존재하지 않는 고객 조회
SELECT * FROM customer WHERE phone IS NULL;IS NOT NULL -> 속성 값에 빈 값이 없는 경우를 조회
-- 고객 테이블에서 연락처가 존재하는 고객 조회
SELECT * FROM customer WHERE phone IS NOT NULL;
✨ 느낀점
드디어 MySQL을 설치하였고 그동안의 SQL이론들을 바탕으로 테이블들을 만들고 속성들을 채워넣는 실습들을 하게되었다.
옛날에 ERP 프로그램 공부했을 때랑 많이 비슷한 느낌이 들었다. 데이터들을 채워 넣고 그 데이터들을 가지고 이렇게저렇게 필요한 방향으로 구조화시키는 그런 모습이 비슷해 크게 겁먹지 않고 실습에 집중할 수 있었던 것 같다. 겁먹지 말쟈🙌
하지만 중간에 뭐 이상한 버튼 눌렀는데.. 그만 정리했던 코드들이 날아가고야 말았다...✈ 다행이도 노션에 그때 그때마다 정리해둔게 있어서 망정이지 아니였으면 그 날 공부한거 다 날아갈뻔했다. IT쪽 ( PLC, HMI, C++, SQL까지 ) 공부하기로 마음먹고 한 가지 깨달은게 저장... 백업... 너무너무 중요한거 같다.. 한 군데가 아니라 이곳 저곳에 백업을 해놔야 마음이 놓인다랄까? 앞으로도 잘 따라가자 !