본문 바로가기

언어 배우기/SQL

MySQL - SELECT 정리

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(부서, 상여내역);

 

좌 : ROLLUP / 우 : 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