Study/SQL

MySQL 기초-SELECT

토기발 2022. 9. 14. 23:22

귀여운 돌고래 로고

얄코의 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와는 다르게 정렬을 하지 않아 보다 빠르다.

 

 

 

출처: https://www.yalco.kr/