SQL(집계함수, IN, BETWEEN, Aliases)

w3schools.com 의 ‘SQL’과정을 참고하였습니다.


SQL 집계 함수

  • WHERE 절에서는 사용 불가,
  • NULL 속성 값은 제외하고 계산

SELECT TOP

  • 특정한 레코드의 숫자를 결과값으로 넘겨준다.
  • SELECT TOP의 경우, 데이터가 많은 테이블에서 사용하는게 좋다. 왜냐하면 많은 레코드를 결과값으로 하는 경우, 성능에 영향을 줄 수 있다. 또 반면에 데이터가 많은 테이블에서는 성능을 향상 시킬 수 있다 .
  • 특정 SQL 에서만 사용가능
-- SQL sever, MS
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
-- MySQL
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
-- Oracle
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

-- 예제
SELECT TOP 3 * FROM Customers;

SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
SELECT * FROM Customers
WHERE Country='Germany' AND ROWNUM <= 3;

SQL MIN() / MAX()

-- MIN()
SELECT MIN(컬럼이름)
FROM 테이블 이름
WHERE 조건

-- MAX()
SELECT MAX(컬럼이름)
FROM 테이블 이름
WHERE 조건

SQL COUNT(),AVG(),SUM()

-- COUNT(): 컬럼의 갯수를 반환
SELECT COUNT(컬럼이름)
FROM 테이블 이름
WHERE 조건

-- AVG(): 평균값
SELECT AVG(컬럼이름)
FROM 테이블 이름
WHERE 조건

-- SUM() : 총합
SELECT SUM(컬럼이름)
FROM 테이블 이름
WHERE 조건

SQL LIKE

  • WHERE절에서 사용된다.

SQL Wildcard

  • 일정 문자열을 대체
  • % 는 0, 1 또는 여러 문자열들을 의미
  • _ 는 문자 하나를 의미
  • [charlist]
  • [^charlist] = [!charlist]

-- a로 시작하는 값
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE 'a%'

-- a로 끝나는 값
WHERE columnN LIKE '%a'

-- or을 가지고 있는 값
WHERE columnN LIKE '%or%'

-- r이 두번째로 위치한 단어
WHERE columnN LIKE '_r%'

-- a로 시작하고 적어도 3글자 이상의 단어
WHERE columnN LIKE 'a_%_%'

-- 도시명이 b or s or p 로 시작하는 것
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';

-- 도시명이 b or s or p 로 시작하지 않는 것
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';

SELECT * FROM Customers
WHERE City NOT LIKE '[bsp]%';

SQL IN

  • WHERE 절에서 사용하여, 여러 특정 데이터를 가져 올 때 사용
-- 예제
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
WHERE Country NOT IN ('Germany', 'France', 'UK');

-- 부속 질의문에서도 사용가능
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);

SQL BETWEEN

  • WHERE절에서 사용
-- Price 가 10에서 20 사이이며, CategoryID가 1,2,3이 아닌 레코드
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);

-- ProductsName이 c와 m 사이에 포함되지 않는 데이터를 ProductName으로 정렬
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

-- date 예제 : 날짜의 경우 #으로 감싸서 표현
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;


SQL Aliases

  • 테이블 혹은 컬럼 이름을 간단하게 별칭으로 바꿀 때 사용
  • 테이블 2개를 join 하는 경우에도 사용
-- column
SELECT column_name AS alias_name
FROM table_name;
-- table
SELECT column_name(s)
FROM table_name AS alias_name;

-- CustomerName,Address,PostalCode,City,Country  -> Address 로
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;

-- Mysql
SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;

-- 두개 이상 테이블 결합  
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName="Around the Horn" AND c.CustomerID=o.CustomerID;