SQL 연습
2023. 8. 2. 10:20ㆍSQL
기본적인 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; |
productID가 30번 이하인 제품들의 평균가격을 추출하시오. (추출될 컬럼명은 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; |
productID가 20번 이상인 제품들 중 가격이 가장 비싼 제품의 가격을 알려주세요 (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를 기준으로 오름차순하시오. (substr과 as를 함께 사용하시요)(orders 테이블)(컬럼명은 cnt)(일별 컬럼명은 Date) SELECT substr(OrderDate,9,2) as Date,count(*) as cnt FROM Orders group by Date order by Date; |
연도와 상관없이 월별 주문 건수를 집계하세요. 정렬순서는 Month를 기준으로 내림차순하시오. (컬럼명은 Month와 cnt) 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 테이블에서 카테고리ID가 3이하인 제품을 ‘소비재’로 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 "컬럼명"