SQL 기타

2023. 8. 2. 15:51SQL

https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_select_all

위 링크에서 그 밖의 SQL문을 알아보자.
수학 연산식과 여러 가지 함수들이 잔뜩 있는 SQL문을 아래와 같이 정리하였다.
복사 붙여넣기를 통해 각 함수들과 연산이 어떻게 적용되는지 직관적으로 파악하면
앞으로 SQL문을 다룰 때 무리 없을 것이라 예상된다.
 

https://dev.mysql.com/doc/refman/8.0/en/numeric-functions.html

위 링크에서 여러 가지함수에 대한 설명들이 적혀있으니 참고해도 좋다.
 

 

연습
사칙연산
SELECT 1 + 2;
SELECT 10 % 3;
SELECT 5 - 2.5 AS DIFFERENCE;
SELECT 3 * (2 + 4) / 2, 'Hello';
SELECT 3 * (2 + 4) / 2 as number, 'Hello' as Test;
SELECT 'ABC' + 3;
SELECT 'ABC' * 3;
SELECT '1' + '002' * 3;
SELECT OrderID + ProductID FROM OrderDetails;
SELECT OrderID, ProductID, OrderID + ProductID AS SUM FROM OrderDetails;
SELECT ProductName, Price / 2 AS HalfPrice FROM Products;
SELECT ProductName, Price, Price / 2 AS HalfPrice FROM Products;
SELECT ProductName, Price, Price / 2 AS HalfPrice, Price * 2 AS doubleprice FROM Products;
SELECT ProductName, Price, Price / 2 AS HalfPrice, Price * 2 AS doubleprice, Price * 0.75 AS SalePrice FROM Products;
, 거짓
SELECT TRUE, FALSE;
SELECT !TRUE, NOT 1, !FALSE, NOT FALSE;
SELECT 0 = TRUE, 1 = TRUE, 0 = FALSE, 1 = FALSE;
SELECT * FROM Customers WHERE TRUE;
SELECT * FROM Customers WHERE FALSE;
select * from Customers where City = 'Berlin';
SELECT TRUE IS TRUE;
SELECT TRUE IS NOT FALSE;
SELECT (TRUE IS FALSE) IS NOT TRUE;
사전식 배열
SELECT 5 BETWEEN 1 AND 10;
SELECT 'banana' not BETWEEN 'Apple' AND 'camera';
SELECT * FROM OrderDetails WHERE ProductID BETWEEN 1 AND 4;
SELECT * FROM Customers WHERE CustomerName BETWEEN 'b' AND 'c';
SELECT * FROM Customers WHERE CustomerName BETWEEN 'B' AND 'C';
멤버 연산
SELECT 1 + 2 IN (2, 3, 4);
SELECT 'Hello' IN (1, TRUE, 'hello');
SELECT * FROM Customers WHERE City IN ('Torino', 'Paris', 'Portland', 'Madrid')
검색
SELECT
'HELLO' LIKE 'hel%',
'HELLO' LIKE 'H%',
'HELLO' LIKE 'H%O',
'HELLO' LIKE '%O',
'HELLO' LIKE '%HELLO%',
'HELLO' LIKE '%H',
'HELLO' LIKE 'L%'
SELECT
'HELLO' LIKE 'HEL__',
'HELLO' LIKE 'h___O',
'HELLO' LIKE 'HE_LO',
'HELLO' LIKE '_____',
'HELLO' LIKE '_HELLO',
'HELLO' LIKE 'HEL_',
'HELLO' LIKE 'H_O'
SELECT * FROM Employees WHERE Notes LIKE '%economics%'
수학적 표현
SELECT ROUND(0.5), CEIL(0.4), FLOOR(0.6); 반올림, 올림, 내림 ceiling
SELECT Price, ROUND(price), CEIL(price), FLOOR(price) FROM Products;
SELECT ABS(1), ABS(-1), ABS(3 - 10);
SELECT * FROM OrderDetails WHERE ABS(Quantity - 10) < 5;
SELECT GREATEST(1, 2, 3), LEAST(1, 2, 3, 4, 5);
SELECT OrderDetailID, ProductID, Quantity, GREATEST(OrderDetailID, ProductID, Quantity) FROM OrderDetails;
select LEAST(OrderDetailID, ProductID, Quantity) FROM OrderDetails;
SELECT OrderDetailID, ProductID, Quantity, GREATEST(OrderDetailID, ProductID, Quantity), LEAST(OrderDetailID, ProductID, Quantity) FROM OrderDetails;
SELECT MAX(Quantity), MIN(Quantity), COUNT(Quantity), SUM(Quantity), AVG(Quantity)
FROM OrderDetails;
SELECT MAX(Quantity), MIN(Quantity), COUNT(Quantity), SUM(Quantity), AVG(Quantity)
FROM OrderDetails WHERE OrderDetailID BETWEEN 20 AND 30;
select pow(2,3), power(5,2), sqrt(16);
SELECT Price, pow(Price, 1/2) FROM Products where sqrt(Price)<4;
잘라내기
select truncate(1234.5678,1), truncate(1234.5678,2), truncate(1234.5678,3), truncate(1234.5678,-1), truncate(1234.5678,-2), truncate(1234.5678,-3);
select ProductID,Price from Products where truncate(Price, 0) = 12;
대소문자
SELECT UPPER('abcDEF'), LOWER('abcDEF');
SELECT UCASE(CustomerName), LCASE(ContactName) FROM Customers;
연접함수
SELECT CONCAT('HELLO', ' ', 'THIS IS ', 2023)
SELECT CONCAT_WS('-', 2021, 8, 15, 'AM')
SELECT CONCAT('O-ID: ', OrderID) FROM Orders;
Employees 테이블에서 fullname이라는 컬럼으로 first namelast name을 사이 한칸 띄우고 출력하시오
ex) Nancy Davolio


SELECT concat(firstname,' ',lastname) as fullname from Employees;
select CONCAT_WS(' ',firstname,lastname) as fullname from Employees;
슬라이싱
SELECT
SUBSTR('ABCDEFG', 3),
SUBSTR('ABCDEFG', 3, 2),
SUBSTR('ABCDEFG', -4),
SUBSTR('ABCDEFG', -4, 2);
SELECT
LEFT('ABCDEFG', 3),
RIGHT('ABCDEFG', 3);
SELECT Orderdate,substr(Orderdate,1,4) as Year,substr(Orderdate,6,2) as Month,substr(Orderdate,9,2) as Day FROM Orders;
길이함수
SELECT
LENGTH('ABCDE'),
CHAR_LENGTH('ABCDE'),
CHARACTER_LENGTH('ABCDE');
-- w3wchool 사이트에서는 한글이 제대로 동작하지 않는다
SELECT
LENGTH('안녕하세요'), -- 15
CHAR_LENGTH('안녕하세요'), -- 5
CHARACTER_LENGTH('안녕하세요'); -- 5
공백 제거 함수
SELECT CONCAT('|', ' HELLO ', '|'), CONCAT('|', LTRIM(' HELLO '), '|'), CONCAT('|', RTRIM(' HELLO '), '|'), CONCAT('|', TRIM(' HELLO '), '|');
trim 양쪽 공백 제거, ltrim 왼쪽 공백 제거, rtrim 오른쪽 공백 제거
사용자가 CategoryName 테이블에서 Beverages를 검색을 할 때, 앞뒤에 스페이스를 주고 검색을 하면, 내용이 출력되지 않는다. 예를 들어 앞에 한칸 띄우고 ' Beverages'로 검색하거나 앞뒤로 한칸씩 띄우고 검색하면 ‘ Beverages '
사용자가 앞뒤 빈공간을 두고 [스페이스를 두고] 검색하더라도 원하는 Beverages 결과가 출력되도록 하시오


SELECT * FROM Categories where CategoryName=trim(' Beverages ');

 

모두 테스트 해본 결과 열의 검색에는 대소문자 구분이 없었지만, 데이터 값에는 대소문자 구분이 있었다.

많은 함수들이 있지만 파이썬에서 겹치는 것도 있고 여러번 사용하면 자연스럽게 익혀지니 너무 부담은 가지지 말자.

'SQL' 카테고리의 다른 글

MySQL Workbench 8.0 CE  (0) 2023.08.04
SQL 총연습  (0) 2023.08.03
JOIN  (0) 2023.08.02
SQL 연습  (0) 2023.08.02
SQL 기본  (0) 2023.08.01