얄코의 MySQL 강의를 들으며 정리한 내용을 포스팅했습니다.
혹시 틀린 부분이 있다면 편하게 말씀 주세요^^~
select
1. 모든 데이터 가져오기
SELECT * FROM Customers;
* 는 모든 칼럼을 뜻한다.
2. 원하는 칼럼(열) 데이터 가져오기
SELECT CustomerName FROM Customers;
select 뒤에 구문을 붙여서 원하는 칼럼 데이터를 가져온다.
SELECT CustomerName, 1, 'Hello', NULL FROM Customers;
테이블의 컬럼이 아닌 값도 선택할 수 있다.
3. 원하는 row(행) 데이터 가져오기
SELECT * FROM Orders
WHERE EmployeeID = 3;
where 뒤에 구문을 붙여서 행 데이터를 가져올 수 있다.
4. 원하는 순서대로 데이터 가져오기
SELECT * FROM OrderDetails
ORDER BY ProductID ASC, Quantity DESC;
order by 뒤에 구문을 붙인다.
asc-오름차순
desc-내림차순
기본적으로는 asc로 되어있다.
5. 원하는 만큼만 데이터 가져오기
SELECT * FROM Customers
LIMIT 3, 10;
LIMIT {가져올 갯수} 또는 LIMIT {건너뛸 갯수}, {가져올 갯수} 를 사용하여, 원하는 위치에서 원하는 만큼만 데이터를 가져올 수 있다.
6. 연산자
SELECT 'ABC' + 3;
문자열은 0으로 인식한다. (결과값: 3)
SELECT ProductName, Price / 2 As Half FROM Products;
Price / 2는 칼럼에 없는 값이지만 연산이 되기 때문에 반값이 새 칼럼으로 출력된다.
SELECT TRUE, FALSE;
MySQL에서 True 는 1, FALSE는 0으로 저장된다.
SELECT * FROM Orders
WHERE
CustomerId = 15 AND EmployeeId = 4;
AND, &&는 양 쪽 모두 TRUE여야 TRUE이다.
따라서 두 조건 모두 만족한 값만 출력된다.
SELECT * FROM OrderDetails
WHERE
ProductId = 20
AND (OrderId = 10514 OR Quantity = 50);
OR, ||은 둘 중 하나만 TRUE여도 TRUE이다.
SELECT 'banana' NOT BETWEEN 'Apple' AND 'camera';
MySQL은 대소문자 구분을 하지 않는다.
BETWEEN {MIN} AND {MAX} 은 두 값 사이에 있다는 뜻이다.
A와 C사이에 B가 있기에 값은 TRUE이다.
*min값과 max값을 반대로 쓰면 안됨!! 그러면 FALSE가 된다.
SELECT * FROM Customers
WHERE City IN ('Torino', 'Paris', 'Portland', 'Madrid')
IN (...) 은 괄호 안의 값들 가운데 있다는 뜻이다.
연산자 의미
+, -, *, / | 각각 더하기, 빼기, 곱하기, 나누기 |
%, MOD | 나머지 |
IS | 양쪽이 모두 TRUE 또는 FALSE |
IS NOT | 한쪽은 TRUE, 한쪽은 FALSE |
AND, && | 양쪽이 모두 TRUE일 때만 TRUE |
OR, || | 한쪽은 TRUE면 TRUE |
= | 양쪽 값이 같음 |
!=, <> | 양쪽 값이 다름 |
>, < | (왼쪽, 오른쪽) 값이 더 큼 |
>=, <= | (왼쪽, 오른쪽) 값이 같거나 더 큼 |
BETWEEN {MIN} AND {MAX} | 두 값 사이에 있음 |
NOT BETWEEN {MIN} AND {MAX} | 두 값 사이가 아닌 곳에 있음 |
IN (...) | 괄호 안의 값들 가운데 있음 |
NOT IN (...) | 괄호 안의 값들 가운데 없음 |
LIKE '... % ...' | 0~N개 문자를 가진 패턴 |
LIKE '... _ ...' | _ 갯수만큼의 문자를 가진 패턴 |
SELECT
Price,
ROUND(price),
CEIL(price),
FLOOR(price)
FROM Products;
ROUND 반올림
CEIL 올림
FLOOR 내림
SELECT * FROM OrderDetails
WHERE ABS(Quantity - 10) < 5;
ABS 절대값
SELECT
UPPER('abcDEF'),
LOWER('abcDEF');
UPPER 모두 대문자로 변경
LOWER 모두 소문자로 변경
SELECT Country FROM Customers GROUP BY Country;
GROUP BY
조건에 따라 집계된 값을 가져온다.
SELECT Country, City, CONCAT_WS(', ', City, Country) FROM Customers GROUP BY Country, City;
여러 칼럼을 기준으로도 가능하다.
SELECT Country, Count(*) FROM Suppliers GROUP BY Country WITH ROLLUP;
WITH ROLLUP 전에는 국가마다의 행 수가 나온다.
그리고 WITH ROLLUP 을 하면 마지막에 전체를 합친 값이 추가된다.
SELECT Country, Count(*) AS Count FROM Suppliers GROUP BY Country HAVING Count >=3;
HAVING은 그룹화된 데이터를 걸러낸다.
*WHERE는 그룹하기 전 데이터, HAVING은 그룹 후 집계에 사용한다.
SELECT DISTINCT Country FROM Customers ORDER BY Country;
DISTINCT는 중복값을 제거한다.
GROUP BY와는 다르게 정렬을 하지 않아 보다 빠르다.
'Study > SQL' 카테고리의 다른 글
정보처리기사 8장 SQL응용 정리 (1) | 2023.01.28 |
---|---|
[프로그래머스 Oracle SQL] 서울에 위치한 식당 목록 출력하기 (0) | 2023.01.02 |