## 정렬
- 특정 컬럼을 지정해 그 컬럼의 값으로 행을 정렬.
- order by 컬럼 asc/desc
- asc : 오름차순
- desc : 내림차순
- Products 테이블에서 가격(Price)으로 오름차순, 제품번호(ProductId)로 내림차순 정렬하기
```
select *
from Products
order by Price ASC, ProductID DESC;
```
## 별명
- 특정 컬럼을 새로운 별명을 붙여 사용. 주로 연산이나 함수를 통해 새로 나온 컬럼에 붙인다.
- 컬럼 as 별명
- Products 테이블에서 ProductId, SupplierId, CategoryId를 더한 값으로 새로운 컬럼을 만들고 컬럼 이름을 NewId로 정하기
```
SELECT ProductId, SupplierId, CategoryId, ProductId + SupplierId + CategoryId as NewId FROM Products;
```
## 사칙연산
- +, *, /, -
- 숫자 + 숫자 == 산술 연산
- 문자 + 숫자 == 문자는 0 취급
- 컬럼1 + 컬럼2 == 컬럼의 모든 행이 연산.
- 사칙 연산 예제
```
SELECT 10 + 20;
SELECT 10 * 20;
SELECT 10 / 20;
SELECT 10 - 20;
```
## 비교연산
- >, <, =, !=
- 결과는 1(참, TRUE), 0(거짓, FALSE)
- 비교 연산 예제
```
SELECT 10 = 20;
SELECT 10 != 20;
SELECT 10 > 20;
SELECT 10 < 20;
SELECT 10 >= 20;
SELECT 10 <= 20;
```
## 논리연산
- and, or
- and : 조건이 여러개 일 때 모두 만족해야 맞다고 보는 연산
- or : 조건이 여러개일 때 하나라도 만족하면 맞다고 보는 연산
- Customers 테이블에서 CustomerId값이 10 이상이고 CustomerId값이 20 이하인 행만 조회
```
SELECT *
FROM Customers
where CustomerID >= 10
and CustomerId <= 20;
```
- Customers 테이블에서 CustomerId값이 20 이하인것 + CustomerId값이 80이상인 행을 모두 조회
```
SELECT *
FROM Customers
where CustomerID <= 20
or CustomerId >= 80;
```
- Customers 테이블에서 CustomerId갑이 20 이하인 것 + CustomerId값이 80이상인 모든 컬럼 중에서 city가 'London'인 행을 조회
```
SELECT *
FROM Customers
where (CustomerID <= 20
or CustomerId >= 80)
and city = 'London';
```
## 사잇값
- 컬럼 between A and B
- 컬럼값이 A와 B 사이인 것만 조회
- Customers 테이블에서 CustomerId값이 10과 20 사이인 행을 조회
```
SELECT *
FROM Customers
where CustomerID BETWEEN 10 AND 20;
```
## 포함
- 컬럼 in (A, B, C ...)
- 컬럼값이 A,B,C 인것을 모두 조회
- Customers 테이블에서 city 값에 'London', 'Berlin', 'Madrid' 중 하나라도 포함하는 행을 모두 조회
```
SELECT *
FROM Customers
WHERE City in ('London', 'Berlin', 'Madrid');
```
## LIKE, NOT LIKE
- 특정 문자로 시작여부, 끝나는지 여부, 포함하는지 여부
- 찾고자하는 문자열을 %기호와 조합해서 사용. 여기서 %는 나머지 문자를 의미
- 'A%' : A로 시작하는 문자열
- '%A' : A로 끝나는 문자열
- '%A%' : A를 포함하는 문자열
- Employees 테이블에서 LastName이 D로 시작하는 행만 조회
```
SELECT * FROM Employees
where LastName like 'D%';
```
- Employees 테이블에서 LastName이 D로 시작하지 않는 행만 조회
```
SELECT * FROM Employees
where LastName not like 'D%';
```
## CEIL, ROUND, FLOOR
- 소수점을 올림, 반올림, 버림
- CEIL() : 올림
- ROUND() : 반올림
- FLOOR() : 버림
- 1.2를 반올림
```
SELECT ROUND(1.2);
```
- Products 테이블의 Price 컬럼값들을 반올림한다.
```
SELECT ROUND(Price) FROM Products;
```
## AVG, MAX, MIN, SUM, COUNT
- AVG(컬럼) : 컬럼의 모든 행의 평균값 구하기
- MAX(컬럼) : 컬럼의 모든 행중 최대값 구하기
- MIN(컬럼) : 컬럼의 모든 행중 최소값 구하기
- SUM(컬럼) : 컬럼의 모든 행의 평균값 구하기
- COUNT(컬럼) : 컬럼의 모든 행의 개수를 구하기 (NULL값은 카운팅에서 제외됨)
- Categories 테이블에서 CategoryName 컬럼의 모든 행의 개수를 구하기.
```
SELECT count(CategoryName) FROM Categories;
```
## CONCAT(문자1, 문자2, 문자3 ...)
- 문자들을 이어 붙여줌.
- 문자열 'taejin'과 'cha'를 이어 붙이기
```
select concat('taejin', ' ','cha') as name;
```
- Employees 테이블의 LastName과 FirstName을 이어 붙여 FullName이라는 새로운 컬럼으로 만들기
```
SELECT EmployeeId, BirthDate, Photo, Notes, concat(LastName, ' ', FirstName) as FullName FROM Employees;
```
## SUBSTR(대상문자, 시작위치, 자르는길이)
- 문자열을 잘라줌
- 문자열 'taejincha'를 1번째 문자부터 6개 짜르기
```
select substr('taejincha', 1, 6) as fisrtName;
```
- Employees 테이블에서 BirthDate 컬럼의 모든 값을 1번째 문자부터 4개 짜르기(년도만 나오게 하기)
```
SELECT substr(BirthDate, 1, 4) as `year` FROM Employees
```
## REPLACE(대상문자(컬럼), 문자열1, 문자열2)
- 대상 문자(컬럼)에 문자열1인 부분을 찾아 문자열2로 치환해주기.
- Customers 테이블의 city 컬럼의 값에서 B문자를 찾아 b로 바꾸기
```
SELECT replace(city, 'B', 'b') FROM Customers;
```
## CURDATE(), NOW()
- 오늘날짜 구하기
- CURDATE : 연월일
- NOW : 연월일 시분초
## ADDDATE(기준날짜, interval n day), SUBDATE()
- 기준날짜로 부터 n만큼의 거리(간격)
## DATE_DIFF(날짜1, 날짜2)
- 날짜1과 날짜2의 차이를 구함
```
select datediff('2022-03-21', '2021-03-21');
```
## DISTINCT
- 조회 결과에서 중복되는 행을 제거한다.
- Suppliers에서 Country를 중복제거해서 조회하기
```
SELECT DISTINCT Country
FROM Suppliers
```
### 그룹핑
- 그룹핑은 특정 컬럼을 기준으로 그룹을 나누어 모든 행을 하나의 그룹으로 편입시켜 그룹별로 집계를 할 때 사용.
- 예를 들어 ~별 ~결과를 봐야한다고 하면 그룹핑해야 한다고 생각하면 된다.
- ex )
- 국가별 ~~ 석유 사용 현황 -> 국가로 그룹핑
- 연령별 ~~ 투표참여율 -> 연령으로 그룹핑
- 지역별 ~~ 초등학교 개수 -> 지역으로 그룹핑
- 도시별 ~~ 평균 주택 가격 -> 도시로 그룹핑
- Customer 테이블에서 국가별 회원 수 보기
```
SELECT Country, COUNT(Country)
FROM Customers
GROUP BY Country
```
- Customer 테이블에서 도시별 회원 수 보기
```
SELECT Country, City, COUNT(City)
FROM Customers
GROUP BY Country, City
```
### HAVING
- 일반적으로 select문은 from > where > group by > having > select > order by 순으로 실행된다.
- where가 group by 보다 먼저 실행되기 때문에 group by 이후에 where로 조건을 따질 수 없다. 그래서 having을 사용한다.
- Customers 테이블에서 회원수가 5이상인 국가만 보기
```
SELECT *, country, count(*) cnt FROM Customers
group by country
having cnt > 5
```
'sql' 카테고리의 다른 글
MySql 기본 예제들 (0) | 2023.04.10 |
---|---|
MySql emplyees 연습용 데이터,문제 (0) | 2023.04.10 |
문제 - 상황에 맞는 SQL을 작성하기, INNER JOIN, INDEX, UNIQUE INDEX, SQL_NO_CACHE, EXPLAIN, UUID (0) | 2023.04.08 |
상황에 맞는 SQL을 작성하기, SUM, MAX, MIN, COUNT (0) | 2023.04.08 |
상황에 맞는 SQL작성하기, INNER JOIN, 사원, 부서 (0) | 2023.04.08 |