SELECT [PREDICATE] [테이블명.]속성명[AS 별칭][,[테이블명.]속성명,...]
[,그룹함수(속성명) [AS 별칭]]
[,Window함수 OVER (PARTITION BY 속성명1, 속성명2,...
ORDER BY 속성명3, 속성명4,...)]
FROM 테이블명[,테이블명,...]
[WHERE 조건]
[GROUP BY 속성명, 속성명,...]
[HAVING 조건]
[ORDER BY 속성명 [ASC | DESC]];
[PREDICATE] : 불러올 튜플 수를 제한할 명령어를 기술
- ALL : 모든 튜플을 검색하는 것으로 주로 생략
- DISTINCT : 중복된 튜플이 있으면 첫번째 한 개만 검색, 선택된 속성 대상
- DISTINCTROW : 중복된 튜플을 제거하고 한 개만 검색, 튜플 전체 대상
속성명 : 검색하여 불러올 속성. 모든 속성을 지칭할 때 * 사용. 두 개 이상의 테이블은 테이블명.속성명
AS(ALIAS) : 별칭. 다른제목으로 표시하기 위해 사용
● 기본검색
SELECT * FROM 사원;
SELECT 사원.* FROM 사원;
SELECT 이름, 부서, 생일, 주소 FROM 사원;
SELECT 사원.이름, 사원.부서 FROM 사원;
● 조건지정검색
SELECT * FROM 사원 WHERE 부서 = '기획';
SELECT * FROM 사원 WHERE 부서 = '기획' AND 기본급 > 110;
SELECT * FROM 사원 WHERE 부서 IN('기획', '인터넷');
SELECT * FROM 사원 WHERE 이름 LIKE "김%"';
SELECT * FROM 사원 WHERE 생일 BETWEEN #01/01/69# AND #12/31/73#;
SELECT * FROM 사원 WHERE 주소 IS NULL;
● 정렬검색
SELECT * FROM 사원 ORDER BY 주소;
SELECT TOP 2 * FROM 사원 ORDER BY 이름 DESC;
SELECT * FROM 사원 ORDER BY 주소 ASC, 이름 DESC;
● 하위질의
SELECT 이름 FROM 사원 WHERE 이름 = (SELECT 이름 FROM 여가활동 WHERE 취미 ='배드민턴');
SELECT 이름 FROM 사원 WHERE 이름 IN (SELECT 이름 FROM 여가활동 WHERE 취미 ='배드민턴');
SELECT 이름 FROM 사원 WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);
● 복수 테이블 검색('여가활동'이 '베드민턴'인 사원의 '이름','부서','취미' 검색)
SELECT 사원.이름, 사원.부서, 여가활동.취미 FROM 사원, 여가활동
WHERE 여가활동.취미 = '배드민턴' AND 사원.이름 = 여가활동.이름;
● 그룹 지정 검색
SELECT 부서, AVG(상여금) AS 평균 FROM 상여금 GROUP BY 부서;
SELECT 부서, COUNT(*) AS 사원수 FROM 상여금
WHERE 상여금 >= 100 GROUP BY 부서 HAVING COUNT(*) >=2;
<상여금> 테이블의 '부서','상여내역', '상여금'에 대한 부서별 상여내역별 소계와 전체 합계
SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계 FROM 상여금 GROUP BY ROLLUP(부서, 상여내역);
SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계 FROM 상여금 GROUP BY CUBE(부서, 상여내역);
● union
SELECT MIN(나이) FROM 사원;
DELETE FROM 사원 WHERE 나이 = (SELECT MIN(나이) FROM 사원);
SELECT (SELECT COUNT(*) FROM [Customers] WHERE Country = 'Germany') AS GermanyCount,
(SELECT COUNT(*) FROM [Customers] WHERE Country = 'Mexico') AS MexicoCount;
SELECT * FROM (SELECT FirstName, LastName FROM [Employees] WHERE EmployeeID < 10);
SELECT * FROM [OrderDetails] WHERE Quantity = (SELECT MAX(Quantity) FROM [OrderDetails]);
select min(나이) from day20;
DELETE FROM sample WHERE a = (SELECT MIN(a) FROM sample);//MySQL 불가
select(select count(*) from day20 where 소속학과 = '정보통신') as 정보통신합계,
-> (select count(*) from day20 where 소속학과 = '컴퓨터') as 컴퓨터합계;
select * from (select 이름, 나이 from day20 where 나이 < 30) as 나이제한;
select * from day20 where 나이 = (select max(나이) from day20);
-- 여러테이블 다루기: 합집합
SELECT Country FROM [Customers] UNION SELECT Country FROM [Suppliers] ORDER BY Country;
SELECT Country FROM [Customers] UNION ALL SELECT Country FROM [Suppliers] ORDER BY Country;
select name from kacnet union select name from kacnet1 order by name;
select name from kacnet union all select name from kacnet1 order by name;
-- 여러테이블 다루기: 내부결합
SELECT * FROM [Products], [Employees] WHERE [Employees].EmployeeID = [Products].SupplierID;
SELECT * FROM [Products] INNER JOIN [OrderDetails] ON Products.ProductID = OrderDetails.ProductID;
SELECT * FROM kacnet, kacnet1 WHERE kacnet.name = kacnet1.name;
SELECT * FROM kacnet INNER JOIN kacnet1 ON kacnet.name = kacnet1.name;
-- 여러테이블 다루기: 외부결합
SELECT * FROM [Products] LEFT JOIN [Employees] ON [Employees].EmployeeID = [Products].SupplierID;
SELECT * FROM [Employees] RIGHT JOIN [Products] ON [Employees].EmployeeID = [Products].SupplierID;
SELECT * FROM kacnet1 LEFT JOIN kacnet ON kacnet.number = kacnet1.number;
SELECT * FROM kacnet1 RIGHT JOIN kacnet ON kacnet.number = kacnet1.number;
- 기본검색(실습할 Table)
- 합집합
- 내부결합
- LEFT JOIN
- RIGHT JOIN
'언어 배우기 > SQL' 카테고리의 다른 글
Oracle - 계정설정 (0) | 2021.07.21 |
---|---|
MariaDB 한글설정 - ERROR 1366 (22007): Incorrect string value (0) | 2021.07.19 |
MySQL - DDL, DML (0) | 2021.07.19 |
MySQL 재설치 오류 (0) | 2021.07.17 |