Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
[MySQL] SQL문 1. SELECT문
SELECT
데이터베이스 내의 테이블에서 원하는 정보를 추출하는 명령
형식
SELECT select_expr
[FROM table]
[WHERE 조건]
[GROUP BY {col_name | expr | position}]
...
SELECT FROM
select * from titles
- *: 모든 것을 선택한다는 의미
- titles 테이블에 있는 모든 내용을 가져오라는 SQL문
- employees.titles로도 표기 가능 (employees데이터 베이스의 title 테이블을 의미)
SELECT first_name FROM employees;
- employees 테이블의 first_name 열을 가져오라는 의미
- 여러개의 열을 불러오고 싶은 경우
,를 사용하여 선택 가능
SELECT first_name AS 이름
- 열 이름에 별칭을 붙이고 싶을 경우
AS 별칭형식으로 사용할 수 있다.
WHERE
SELECT 필드이름 FROM 테이블이름 WHERE 조건식
- WHERE: 조건을 지정하는 문법
SELECT * FROM usertbl WHERE birthYear >= 1970 AND height >= 182
- 1970년 이후 출생하고 신장이 182 이상인 사람을 조회하는 쿼리문
- 조건연산자(=, >, < 등)와 관계연산자(AND, OR, NOT 등)을 조합해 다양한 조건의 쿼리문 생성 가능
SELECT * FROM usertbl WHERE height between 180 AND 183
- Between ~ AND를 이용해 키가 180~183 사이인 사람을 조회할 수 있다.
- 연속적인 값에만 적용할 수 있다.
SELECT * FROM usertbl WHERE addr IN ('경남', '경북');
- IN (~)를 통해 이산적인 값을 조회할 수 있다.
SELECT * FROM usertbl WHERE name like '김%'
- like ~%를 통해 문자열의 내용과 일치하는 데이터를 조회한다.
ANY/ALLOW/SOME, 서브쿼리
SELECT * FROM usertbl WHERE height > (SELECT height From usertbl WHERE name='김경호')
- 서브쿼리: 쿼리문 안에 쿼리문이 들어있는 형태
- 데이터들 중 ‘김경호’이름을 가진 사람의 키 데이터를 조회해 해당 값보다 큰 키를 가진 사람을 모두 조회한다.
SELECT * FROM usertbl WHERE height >= ANY (SELECT height From usertbl WHERE addr='경남')
- 경남 사람들보다 키가 큰 사람을 출력하는 쿼리문
- ANY: 조회 결과가 2개 이상일 경우 사용하는 문법
- ALL: 조회 결과가 2개 이상일 경우, 해당 조회 결과들보다 더 큰 사람만 출력
- ANY와 ALL: 여러개의 결과값중 하나의 결과값만으로 조건이 만족되면 ANY 사용
- 모든 결과값에 대해 조건이 만족해야할 경우 ALL 사용
ORDER BY
SELECT name, mDate FROM usertbl ORDER BY mDate;
- ORDER BY: 출력되는 결과의 순서를 조절하는 구문
- 가입한 순서대로 회원을 출력한다(오름차순)
SELECT name, mDate FROM usertbl ORDER BY mDate DESC;
- 최근 가입한 순서대로 출력
- 결과를 내림차 순으로 정렬해 출력한다.
DISTINCT
SELECT DISTINCT addr From usertbl;
- 중복된 것들을 하나만 남길 때 사용하는 구문
GROUP BY와 집계함수
SELECT userID, SUM(amount) FROM buytbl GROUP BY userID;
- SUM(): 집계함수 = 주로 GROUP BY로 데이터를 그룹화 해주고 사용
- userID별로 구매한 물품의 개수를 합쳐 출력하는 구문
- SUM(price*amount)을 통해 총 구매 액수도 계산 가능
- 집계함수 종류: AVG(), MIN(), MAX(), COUNT(), STDEV(), VAR_SAMP()
HAVING
SELECT userID FROM buytbl GROUP BY userID HAVING SUM(amount*price) > 1000;
- 집계함수는 WHERE절에서 사용할 수 없어 사용되는 구문
- 반드시 GROUP BY절 이후 HAVING절이 나와야한다.
- 총 구입 액수가 1000원이 넘는 사용자만 조회
ROLLUP
SELECT num, groupName, SUM(price*amount) FROM buytbl group by groupName, num WITH rollup;
- 분류별로 함계와 총합이 필요할 경우 사용되는 구문