SELECT
[검색할 컬럼 입력] FROM [Table Name];
- Select Distinct -중복된 값을 제거 한 후 검색
SELECT Distinct [검색할 컬럼 입력] FROM [Table Name];
[검색할 컬럼 입력]에 들어간 컬럼의 중복을 제거한 후 보여준다.
SELECT [검색할 컬럼 입력] FROM [Table Name] GROUP BY [컬럼 입력];
[컬럼 입력]에 들어간 컬럼의 중복을 제거한 후 정렬해서 보여준다.
SELECT [검색할 컬럼 입력]
FROM [table_name]
WHERE [필터링 할 컬럼]=[값];
- And, Or, Not - where절에 결합하여 사용하는 연산자
SELECT [검색할 컬럼 입력]
FROM [table_name]
WHERE [필터링 할 컬럼]=[값], AND|OR|NOT [필터링 할 컬럼2]=[값2];
AND는 WHERE에 구분 된 모든 조건이 TRUE인 것만 검색
OR는 WHERE에 구분 된 조건 중 하나만 TRUE인 것만 검색
NOT는 조건이 참이 아닌 경우 검색
- Order By - 오름차순, 내림차순으로 정렬
SELECT * FROM [table_name]
ORDER BY [컬럼1] ASC, [컬럼2] DESC;
[컬럼1]은 오름차순으로 정렬, [컬럼2]은 내림차순으로 정렬한다.
INSERT INTO [table_name](column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
해당 컬럼에 해당되는 값을 추가할 수 있다.
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
=이 아닌 IS를 사용 NULL 의 반대로 NOT NULL 사용 가능
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE columnX = valueX;
에 WHERE문에서 columnX의 valueX에 해당하는 조건에서 column1을 value1로, column2을 value2로 수정한다.
※ WHERE문을 작성 안 할 경우 전부 다 수정되기 때문에 조심해야 한다.
WHERE문 반드시 작성
DELETE FROM table_name
WHERE [column]=[value];
column에 속한 value 값을 제거한다.
- MySQL
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
- Oracle
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
- Min and Max - 가장 작은 값과 큰 값을 보여줌
SELECT MIN(column_name) AS BestMin
FROM table_name;
table_name이라는 테이블에서 column_name 컬럼의 가장 작은 값을 BestMin이라는 표로 보여준다.
SELECT COUNT(column_name) FROM table_name;
SELECT AVG(column_name) FROM table_name;
SELECT SUM(column_name) FROM table_name;
위와 같이 COUNT는 column_name의 갯수, AVG는 평균, SUM은 합을 구할 수 있다.
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
columnN에 해당하며, pattern을 통해 검색
LIKE 구문 |
의미 |
LIKE 'a%' |
a로 시작하는 값을 찾는다. |
LIKE '%a' |
a로 끝나는 값을 찾는다. |
LIKE '%a%' |
a이 있는 값을 찾는다. |
WHERE column_name IN (value1, value2, ...);
또는
WHERE column_name IN (SELECT STATEMENT);
ex)
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
Country 컬럼에 'Germany', 'France', 'UK' 가 1개라도 있으면 검색
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
Country 컬럼에 'Germany', 'France', 'UK' 가 없으면 검색
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
Suppliers 이름의 테이블에서 Country 값과 같은 Customers테이블 Country을 보고 Customers 전체 컬럼 검색
SELECT *
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
column_name에 있는 값 value1와 value2 사이에 있는 값 검색
SELECT column_name AS alias_name
FROM table_name;
SELECT column_name(s)
FROM table_name AS alias_name;
AS 사용으로 column_name 별칭을 alias_name으로 바꿈
AS 사용으로 table_name 별칭을 alias_name으로 바꿈
※ 별칭에 공백이 있을 경우 큰따옴표 또는 []가 필요하다.
- Inner Join - 두 개 이상의 테이블의 행을 결합 (Inner 생략 가능)
SELECT Orders.OrderID, Customers.CustomerName, rgb(255, 187, 0).OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
Orders와 Customers의 CustomerID가 일치하는 값의 OrderID, CustomerName, OrderDate를 검색한다.
- Left Join - 두 개 이상의 테이블의 행을 결합하며, null도 검색
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
LEFT JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
Orders와 Customers의 CustomerID를 연동하여 OrderID, CustomerName, OrderDate를 검색한다. 연동되지 않은 것들은 null로 모두 검색
보통 count 할 때 사용
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
select문에 T1.컬럼 , T2.컬럼으로 가져올 수 있다.
- Union - 다른 테이블에 있는 내용을 한 열에 입력
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
table1에 있는 column_name과 table2의 column_name이 한 열에 검색
SELECT count(status), role
FROM tb_user
GROUP BY role;
role에 'user'와 'admin'의 status 개수를 그룹화 해서 검색
SELECT count(status), status, role
FROM tb_user
GROUP BY role;
HAVING COUNT(status) > 5;
'user'와 'admin'의 status 개수 중 5개 이상인 것만 검색
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE username="홍길동");
EXISTS 안에 username이 홍길동인 값이 있으면 true를 반환하여 column_name(s)를 출력한다.
- Any, All - Any는 하나 이상, All은 모든 값이 만족해야 참
SELECT column_name(s)
FROM table_name
WHERE sal
ANY|ALL (950, 3000, 1250);
ANY : sal 컬럼 값이 950 or 3000 or 1250일 경우 true 반환하여 출력
ALL : sal 컬럼 값이 950 and 3000 and 1250일 경우 true 반환하여 출력
다음 SQL 문은 Customers 백업 복사본을 만듭니다.
SELECT * INTO CustomersBackup2017
FROM Customers;
다음 SQL 문은 IN 절을 사용하여 테이블을 다른 데이터베이스의 새 테이블에 복사합니다.
SELECT * INTO CustomersBackup2017 IN 'Backup.mdb'
FROM Customers;
다음 SQL 문은 몇 개의 열만 새 테이블에 복사합니다.
SELECT CustomerName, ContactName INTO CustomersBackup2017
FROM Customers;
다음 SQL 문은 독일 고객 만 새 테이블로 복사합니다.
SELECT * INTO CustomersGermany
FROM Customers
WHERE Country = 'Germany';
다음 SQL 문은 둘 이상의 테이블의 데이터를 새 테이블로 복사합니다.
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2017
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
팁 : SELECT INTO를 사용하여 다른 테이블의 스키마를 사용하여 빈 테이블을 새로 만들 수도 있습니다. 쿼리가 데이터를 반환하지 않게하는 WHERE 절을 추가하기 만하면됩니다.
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';
Suppliers테이블을 복사해서 Customers테이블로 붙여넣는다.
- MySQL
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products
- Oracle
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products