SQL 기타
2023. 8. 2. 15:51ㆍSQL
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 name과 last 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 '); |
모두 테스트 해본 결과 열의 검색에는 대소문자 구분이 없었지만, 데이터 값에는 대소문자 구분이 있었다.
많은 함수들이 있지만 파이썬에서 겹치는 것도 있고 여러번 사용하면 자연스럽게 익혀지니 너무 부담은 가지지 말자.