SQL 연습

2023. 8. 2. 10:20SQL

기본적인 SQL 문법들을 익혔다면 이제 여러 예문에 해당하는 SQL 구문을 쓸 줄 알아야 한다.

연습만이 살 길이다!!!

 

아래 링크를 통해 미리 생성된 DB를 활용할 수 있다.

설치하기 어려운 환경 혹은 간단히 select문을 연습할 때 유용한 것 같다

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

 

아래 표는 연습했던 여러 예제와 해당하는 SQL문을 적었다.

연습해본 결과 group by를 잘 사용해야 익숙하게 SQL문을 다룰 수 있을 것 같다.

정처기에서도 group by 예문은 정말 잘 나오더라..

제일 마지막 조건문 형태의 SQL문은 정말 당황스러웠다. 

참고로 알아두고 필요할 때 사용하면 되겠다!

 

연습
Customers에서 회원id(CustomerID), 거주도시(city), 거주국가(country)를 출력하시오


select CustomerID,city,country from Customers;
주문정보(Orders)중에서 건별ID, 주문고객ID, 주문일자(OrderDate)10건만 출력하시오


select OrderID,CustomerID,OrderDate from Orders limit 10;
Customers 테이블에서 Mexico에 사는 사람들 정보를 추출하시요 [홑따음표 쌍따음표 무관]


select * from Customers where Country='Mexico';
Customers 테이블에서 Mexico에 살지 않는 회원들의 정보를 추출하시오


select * from Customers where Country not in ('Mexico');
select * from Customers where Country != 'Mexico';
국가 이름이 'S'로 시작하는 국가에 거주하는 사람들 정보를 모두 추출하시오


select * from Customers where Country like 'S%';
국가 이름이 'A'로 끝나는 국가에 거주하는 사람들 정보를 모두 추출하시오


select * from Customers where Country like '%A';
국가 이름이 ‘S’로 시작하지 않는 국가에 거주하는 사람들 정보를 추출하시오


select * from Customers where Country not in ('S%');
Mexico에 거주 중인 사람과 이름(Contact Name)Yang Wang인 사람을 추출하시오


select * from Customers where Country='Mexico' or ContactName='Yang Wang';
Mexico에 사는 사람과 Sweden에 사는 사람들의 거주 정보 출력하기


select Address,City,Country from Customers where Country='Mexico' or Country='Sweden';
Mexico에 사는 사람, Sweden에 사는 사람, USA에 사는 사람 정보 출력하기 [in 사용해서 추출하기]


select * from Customers where Country in ('Mexico','Sweden','USA');
회원정보 테이블(Customers)에서 모든 컬럼 정보를 나라이름이 알파벳순으로 정렬 출력하시요. 역순도 출력하시오


select * from Customers order by Country;
select * from Customers order by Country desc;
회원정보 테이블(Customers)에서 모든 컬럼 정보를 5번째 컬럼이 알파벳순이 되도록 정렬 출력하시오.
역순도 출력하시오


select * from Customers order by 5;
select * from Customers order by 5 desc;
제품정보(Products) 테이블에서 가격이 높은 순서부터 모든 컬럼값이 출력되도록 하시오


SELECT * FROM Products order by Price desc;
Customers 테이블에서 나라별로 몇 명이 가입했는지 집계하시오


SELECT Country,count(Country) FROM Customers group by Country;
위에서 추출한 결과를 많이 가입한 나라 순서대로 정렬하시오


SELECT Country,count(Country) FROM Customers group by Country order by count(Country) desc;
위에서 추출한 결과의 컬럼명을 count(*)에서 cntID로 변경하시오


SELECT Country,count(Country) as cntID FROM Customers group by Country order by count(Country) desc;
위에서 추출한 결과에서 나라별 가입한 사람이 5명 이상인 경우만 추출하시오


SELECT Country,count(Country) as cntID FROM Customers group by Country having cntID>=5 order by count(Country) desc;
당사가 가지고 있는 모든 제품들의 가격을 합하면 얼마인지 계산하시오(Products, price)


SELECT sum(Price) FROM Products;
productID30번 이하인 제품들의 평균가격을 추출하시오.
(추출될 컬럼명은 avgPrice)


SELECT avg(Price) as avgPrice FROM Products where ProductID<=30
employee들의 생일을 연도를 구분한 월별로 내림차순 정렬하고, 연도를 구분한 월별로 생일이 각각 몇명이 있는지 출력하시오.
(연도를 구분한 월별 컬럼명은 Month)(인원수의 컬럼명은 cnt)
BirthDate데이터에서 7번째까지 데이터를 가져오면 년,월을 가져오게 된다. 1968-12 / 내림차순 정리


SELECT substr(BirthDate,1,7) as Month,count(*) as cnt FROM Employees group by Month order by Month desc;
위 문제에서 연도별로 내림차순으로 출력하세요. (생일의 해 컬럼명은 Year)


SELECT substr(BirthDate,1,4) as Year,substr(BirthDate,1,7) as Month,count(*) as cnt FROM Employees group by Month order by Year desc;
제품의 공급자별로 판매가격의 평균을 구해주세요.
(Products 테이블에서 SupplierID를 가지고)(컬럼명은 avgPrice)


SELECT SupplierID,avg(Price) as avgPrice FROM Products group by SupplierID;
productID20번 이상인 제품들 중 가격이 가장 비싼 제품의 가격을 알려주세요
(products 테이블에서)(출력할 컬럼명은 maxPrice)


SELECT Max(Price) FROM Products where ProductID>=20;
전체 제품 중 가격이 가장 낮은 제품 정보를 출력하시오


SELECT * FROM Products where price=(select min(price) from Products);
전체 제품 중 가격이 가장 높은 제품 정보를 출력하시오


SELECT * FROM Products where price=(select max(price) from Products);
연도, 월과 상관없이 일별(orderdate) 주문 건수를 집계하시오. , 정렬순서는 Date를 기준으로 오름차순하시오.
(substras를 함께 사용하시요)(orders 테이블)(컬럼명은 cnt)(일별 컬럼명은 Date)


SELECT substr(OrderDate,9,2) as Date,count(*) as cnt FROM Orders group by Date order by Date;
연도와 상관없이 월별 주문 건수를 집계하세요. 정렬순서는 Month를 기준으로 내림차순하시오.
(컬럼명은 Monthcnt)


SELECT substr(OrderDate,6,2) as Month,count(*) as cnt FROM Orders group by Month order by Month desc;
가입한 고객들의 나라별 중복되지 않는 도시 갯수를 각각 집계하여 추출하시오. 나라별로 도시가 몇 개씩 나오는지 집계하기. (도시 개수의 컬럼명은 cityNum)


SELECT country, COUNT(DISTINCT city) AS cityNum FROM customers GROUP BY country;
products 테이블에서 카테고리ID3이하인 제품을 소비재4-5인 제품을 사치재, 그리고 그 외 모든 제품을 'etc'로 분류되게 하여 카테고리ID와 분류된 정보를 출력하시오. (분류된 정보의 컬럼명은 분류)


SELECT ProductName,CategoryID,
CASE
WHEN CategoryID <= 3 THEN '소비재'
WHEN CategoryID BETWEEN 4 AND 5 THEN '사치재'
ELSE 'etc'
END AS 분류
FROM products;

 

참고

CASE 조건 WHEN 결과1 THEN 출력1

                   [WHEN 결과2 THEN 출력2]

                   ELSE 출력3
END "컬럼명"

'SQL' 카테고리의 다른 글

MySQL Workbench 8.0 CE  (0) 2023.08.04
SQL 총연습  (0) 2023.08.03
SQL 기타  (0) 2023.08.02
JOIN  (0) 2023.08.02
SQL 기본  (0) 2023.08.01