본문 바로가기

SQL

MySQL - SQL 기본(1)

728x90

1. SELECT문

SELECT 열 이름
	FROM 테이블이름
	WHERE 조건절
	GROUP BY 열 이름 
	HAVING 집계함수에 대한 조건절
	ORDER BY 열 이름
    
-- HAVING절은 GROUP BY절 다음 순서.
-- ORDER BY는 가장 마지막 순서.

 

  • USE; 데이터베이스 지정 
-- 쿼리를 적용할 데이터베이스 선택
USE 데이터베이스_이름;

 

  • AS; 열 이름 별칭 지정 
-- 별칭에 띄어쓰기가 포함될 경우 ''로 묶어주기.
SELECT 열_이름 AS 별칭, 열_이름2 별칭2, 열_이름3 '별 칭3'
FROM 테이블이름

 

  • 조건절 WHERE; AND, OR, BETWEEN, IN, LIKE(%, _)
-- 이름이 '홍길동'인 사람에 대한 '모든 컬럼값'을 usertbl에서 불러오기
SELECT * FROM usertbl WHERE name = '홍길동';

-- 1970년 이후 출생 '그리고' 키가 182 이상인 사람의 아이디와 이름을 usertbl에서 불러오기
SELECT userID, Name FROM usertbl WHERE birthYear >= 1970 AND Height >= 182;

-- 1970년 이후 출생이거나 '또는' 키가 182 이상인 사람의 아이디와 이름을 usertbl에서 불러오기
SELECT userID, Name FROM usertbl WHERE birthYear >= 1970 OR Height >= 182;

-- 키가 '180이상 183이하'인 사람 이름과 키를 usertbl에서 불러오기(1) 
SELECT name, height FROM usertbl WHERE height >= 180 AND height <= 183;

-- 키가 '180이상 183이하'인 사람 이름과 키를 usertbl에서 불러오기(1) - 연속적인(Continuous) 값
SELECT name, height FROM usertbl WHERE height BETWEEN 180 AND 183;

-- 지역이 '경남', '전남', '경북'인 사람의 이름과 주소를 usertbl에서 불러오기 - 이산적인(Discrete) 값
SELECT name, addr FROM usertbl WHERE addr IN ('경남', '전남', '경북');

-- 성이 '김'씨인 사람 이름과 키를 usertbl에서 불러오기
SELECT name, height FROM usertbl WHERE name LIKE '김%';

-- 이름이 '종신'인 사람 이름과 키를 usertbl에서 불러오기
SELECT name, height FROM usertbl WHERE name LIKE '_종신';

 

  • ANY/SOME/ALL 그리고 서브쿼리(SubQuery)
-- ANY(SOME)는 서브쿼리의 여러 개의 결과 중 한 가지만 만족해도 됨.
-- 주소가 '경남'인 사람들의 키(170, 173)보다 크거나 같은 사람의 이름과 키를 usertbl에서 불러오기.
-- 키가 170 또는 173보다 큰 사람을 부르기때문에 170보다 크거나 같은 사람은 전부 불러옴.
SELECT name, height FROM usertbl
	WHERE height >= ANY (SELECT height FROM usertbl WHERE addr='경남')
    
-- 주소가 '경남'인 사람들의 키(170, 173)와 같은 사람의 이름과 키를 usertbl에서 불러오기
-- 키가 170 또는 173과 같은 사람을 출력
SELECT name, height FROM usertbl
	WHERE height = ANY (SELECT height FROM usertbl WHERE addr='경남')
    
-- 따라서 '=ANY'와 'IN'은 동일한 기능을 할 수 있음.
SELECT name, height FROM usertbl
	WHERE height IN (SELECT height FROM usertbl WHERE addr='경남')
    
-- ALL은 서브쿼리의 여러 개의 결과를 모두 만족해야 됨.
-- 주소가 '경남'인 사람들의 키(170, 173)보다 크거나 같은 사람의 이름과 키를 usertbl에서 불러오기.
-- 170 또는 173보다 크거나 같은 사람이란 조건을 모두 만족해야하기 때문에 173보다 크거나 같은 사람만 불러옴.
SELECT name, height FROM usertbl
	WHERE height >= ALL (SELECT height FROM usertbl WHERE addr='경남')

 

  • ORDER BY; 원하는 순서대로 정렬
-- 가입한 순서대로 회원들을 불러오기
SELECT name, mDate FROM usertbl ORDER BY mDate;

-- 오름차순(ASCENDING)으로 정렬 - (default값이라 생략해도 됨)
SELECT name, mDate FROM usertbl ORDER BY mDate ASC;

-- 내림차순(DESCENDING)으로 정렬 
SELECT name, mDate FROM usertbl ORDER BY mDate DESC;

-- 키가 큰 순서대로 정렬하되 키가 같을 경우엔 이름을 가나다 순으로 정렬하기
SELECT name, height FROM usertbl ORDER BY height DESC, name ASC;

 

  • DISTINCT; 중복 제거
-- 전체 회원들의 주소가 중복 없이 총 몇 군데인지 불러오기.
SELECT DISTINCT addr FROM usertbl;

 

  • LIMIT; 출력 개수 제한
-- employees 데이터베이스에서 회사 입사일이 오래된 직원 5명의 사원 번호 불러오기.

USE employees;;
SELECT emp_no, hire_date FROM employees
	ORDER BY hire_date ASC
    LIMIT 5;
    
-- 'LIMIT 시작, 개수' 또는 'LIMIT 개수 OFFSET 시작' 형식도 가능.
USE employees;;
SELECT emp_no, hire_date FROM employees
	ORDER BY hire_date ASC
    LIMIT 0, 5;
    
USE employees;;
SELECT emp_no, hire_date FROM employees
	ORDER BY hire_date ASC
    LIMIT 5 OFFSET 0;

 

  • GROUP BY절; 집계합수(SUM, AVG, MIN, MAX, COUNT, STDEV, VAR_SAMP) + Having절
-- sqlDB의 구매 테이블(buytbl)에서 사용자(userID)별 구매한 개수(amount)의 합계(SUM) 불러오기.
USE sqldb;
SELECT userID AS '사용자 ID', SUM(amount) AS '총 구매 개수' 
	FROM buytbl GROUP BY userID;
    
-- sqlDB의 구매 테이블(buytbl)에서 사용자(userID)별 구매한 금액(price * amount)의 합계(SUM) 불러오기.
USE sqldb;
SELECT userID AS '사용자 ID', SUM(price*amount) AS '총 구매액' 
	FROM buytbl GROUP BY userID;
    
-- 각 사용자 별 구매한 물품 개수(amount)의 평균(AVG) 불러오기
USE sqltbl;
SELECT userID, AVG(amount) AS '평균 구매 개수' FROM buytbl GROUP BY userID;

-- 총 구매액이 1000 이상인 사람만 불러오기
USE sqldb;
SELECT userID AS '사용자 ID', SUM(price*amount) AS '총 구매액' 
	FROM buytbl 
    GROUP BY userID
    HAVING SUM(price*amount) > 1000;
    
-- 총 구매액이 1000 이상인 사람을 내림차순으로 정렬해서 불러오기
USE sqldb;
SELECT userID AS '사용자 ID', SUM(price*amount) AS '총 구매액' 
	FROM buytbl 
    GROUP BY userID
    HAVING SUM(price*amount) > 1000
    ORDER BY SUM(price*amount) DESC;

 

'SQL' 카테고리의 다른 글

SQL 용어 정리  (0) 2021.09.01
PHP와 MySQL 연동하기(1) - 회원관리시스템  (0) 2021.09.01
MySQL - SQL 고급  (0) 2021.08.23
MySQL - SQL 기본(2)  (0) 2021.08.23
MySQL(1)  (0) 2021.08.17