TRUNCATE는 ( , ) , 뒤의 숫자만큼 소수점을 나타낸다.
뒤의 숫자가 음수 일 경우에, 소수 점 자리에서 앞으로 한칸씩 0을 표시하면서 표기한다.
SELECT * FROM price;
를 하면 아래와 같이 나온다.
위에서 가격에 대한 정보를 좁혀보자
SELECT Price FROM Products
WHERE TRUNCATE(Price,0) = 12;
Price가 12.xxx인 정보들을 불러오게 된다.
SELECT CONCAT('O-ID: ', OrderID) FROM Orders;
SELECT CONCAT('언제 태어났니?' , BirthDate) FROM Employees;
검색시 사용자도 모르게 공백을 포함할 수 있는 경우에 TRIM을 이용하면 잘못 검색해도 공백없이 검색이 된다.
SELECT * FROM Categories
WHERE CategoryName = TRIM(' Beverages ');
SELECT
REPLACE(Description, ',' ,' and')
FROM Categories;
위의 사진 처럼 나온다. 하지만 and가 2번 나오는 것을 알수 있다. 위의 sql문을 실행하기 전에 먼저 and
를 ,
로 바꾸자.
SELECT
'01' = '1',
CONVERT('01', DECIMAL) = CONVERT('1', DECIMAL);
DECIMAL
은 SQL에서 숫자자료형 중 하나이다.
'2021-6-1' = '2021-06-01',
DATE('2021-6-1') = DATE('2021-06-01'),
'1:2:3' = '01:02:03',
TIME('1:2:3') = TIME('01:02:03');
SELECT
OrderDate,
CONCAT(
CONCAT_WS(
'/',
YEAR(OrderDate), MONTH(OrderDate), DAY(OrderDate)
),
' ',
UPPER(LEFT(DAYNAME(OrderDate), 3))
)
FROM Orders;
위와 같이 내가 원하는 형태로 데이터를 재조직할 수 있다!
SELECT IF( 1 > 2, '1은 2보다 크다.' , '1은 2보다 작다.');
SELECT
IF (Price > 30, 'Expensive' , 'Cheap'),
CASE
WHEN Price < 20 THEN '저가'
WHEN Price BETWEEN 20 AND 30 THEN '일반'
ELSE '고가'
END
FROM Products;
SELECT CategoryID FROM Products
GROUP BY CategoryID;
SELECT * FROM Customers;
위와 같이 고객정보가 나타난다.
나라별, 도시별로 GROUP BY 를 해보자!
SELECT
Country, City,
CONCAT_WS(', ' , City, Country)
FROM Customers
GROUP BY Country, City;
select * from Products
SELECT
ProductID,
SUM(Quantity) AS QuantitySum
FROM OrderDetails
GROUP BY ProductID
ORDER BY QuantitySum DESC;
SELECT
CategoryID,
MAX(Price) AS MaxPrice,
MIN(Price) AS MinPrice,
TRUNCATE((MAX(Price) + MIN(Price)) / 2,2) AS MedianPrice,
TRUNCATE(AVG(Price),2 ) AS AveragePrice
FROM Products
GROUP BY CategoryID;
WITH ROLLUP;
을 해준다.
SELECT
ProductID,
SUM(Quantity) AS QuantitySum
FROM OrderDetails
GROUP BY ProductID
WITH ROLLUP;
위의 사진과 같이 맨 아래부분에 공백이 주어진다.
ROLLUP을 사용할때 ORDER BY와는 함께 사용할 수 없다.
Suppliers 테이블에서 Country로 묶고 조건을 주어주자.
SELECT
Country, COUNT(*) AS Count
FROM Suppliers
GROUP BY Country
HAVING Count <= 3;
SELECT
COUNT(*) AS Count, OrderDate
FROM Orders
WHERE OrderDate > DATE('1996-12-31')
GROUP BY OrderDate
HAVING Count > 2;
위의 sql문의 처리과정은
1. WHERE문이 먼저 처리가 된다. 즉, OderDate가 1996-12-31보다 이후인 것들만 불러오게 된다.
2. OrderDate로 GROUPBY해준다.
3. count>2 인 경우에만 처리해준다.
SELECT DISTINCT Country
FROM Cusotmers
ORDER BY Country;
SELECT
Country,
COUNT(DISTINCT CITY)
FROM Customers
GROUP BY Country;
SELECT
Country,
COUNT(*)
FROM Customers
GROUP BY Country;
그 이유는 DISTINCT를 사용하지 않고 *
를 사용하면 중복을 허락하고 같은 도시여도 카운트하기 때문이다.