간단한 연습문제로 MySQL 개념 익히기

Perfume·2022년 11월 7일
22

Translation

목록 보기
2/2
post-thumbnail

MySQL은 너무 쉬워서 개념을 몰라도 연습문제를 풀면서 익힐 수 있다는 이야기를 들었습니다. 믿을 수 없는 이야기에 반신반의하는 제게 친구가 W3School의 MySQL Exercise 링크를 보내주었습니다.

"MySQL은 코딩이 아니라 영작에 가까워. 문제를 읽고 생각나는 대로 답을 아무거나 입력해봐!"

실제로 MySQL에 대해 전혀 모르는 상태였는데도 불구하고 추측해보는 것만으로 대부분의 문제를 풀 수 있었습니다. 맞추지 못한 문제 역시 답을 보면 '아~!' 하고 바로 이해할 수 있는 수준이었습니다. 지우고 싶을 땐 Delete, 조건이 10과 20 사이인 숫자면 Between 10 and 20 등등.. 정말로 직관적이더라고요! 그래서 50가지 문제를 앉은 자리에 주욱 풀어나가면서 MySQL의 핵심개념을 자연스럽게 익힐 수 있었습니다.

양질의 자료라는 생각이 들어서 영어에 피로감을 느끼시는 분들도 가벼운 마음으로 풀어보실 수 있도록 W3Schools의 MySQL 50가지 연습문제를 번역하고 정리해봤습니다.

답을 스포(?)당하시지 않도록 글 앞부분에는 문제만 정리해두었고, 하단에는 문제와 답을 함께 정리해두었습니다.

문제 목록

Select

Q. Customers 테이블의 모든 열을 가져오는 명령문을 작성하세요.

Q. Customers 테이블에서 City 열을 선택하는 명령문을 작성하세요.

Q. Customers 테이블의 Country열에서 값이 다른 것을 모두 선택하세요.

Where

Q. City 열에서 "Berlin" 값을 가진 모든 레코드를 선택하세요.

Q. NOT 키워드를 사용해서 City가 'Berlin'이 아닌 모든 레코드를 선택하세요

Q. CustomerID 열에서 값이 32인 모든 레코드를 선택하세요.

Q. City 열의 값이 'Berlin'이고 PostalCode 열의 값이 12209인 모든 레코드를 선택하세요.

Q. City 열의 값이 'Berlin'이거나 'London'인 모든 레코드를 선택하세요.

Order By

Q. Customers 테이블의 모든 레코드를 선택하고, 그 결과를 City 열을 기준으로 알파벳순으로 정렬하세요.

Q. Customers 테이블의 모든 레코드를 선택하고, 그 결과를 City 열을 기준으로 알파벳 역순으로 정렬하세요.

Q. Customers 테이블의 모든 레코드를 선택하고, 그 결과를 먼저 Country 열을 기준으로 정렬한 다음 City열을 기준으로 정렬하세요.

Insert

Q. Customers 테이블에 새로운 레코드를 추가하세요.

Null

Q.Customers 테이블에서 PostalCode 열이 비어 있는 모든 레코드를 선택하세요.

Q.Customers 테이블에서 PostalCode 열이 비어 있지 않은 모든 레코드를 선택하세요.

Update

Q.Customers 테이블에 있는 모든 City열을 업데이트 하세요

Q. City 열의 값을 'Oslo'로 설정하되 Country 열의 값이 "Norway"인 값만 설정하세요

Q. CustomerID가 32인 레코드를 찾아 City와 Country 값을 업데이트 하세요

Delete

Q.Customers 테이블에서 Country 값이 'Norway'인 모든 레코드를 삭제하세요

Q.Customers 테이블의 모든 레코드를 삭제하세요

Functions

Q. MIN 함수를 이용해서 Price 열에 있는 값이 가장 작은 레코드를 선택하세요

Q. SQL 함수를 이용해서 Price 열에서 값이 가장 큰 레코드를 선택하세요

Q. 적절한 함수를 이용해서 Price 값이 18로 설정된 레코드의 갯수를 찾아 return하세요

Q. SQL 함수를 이용해서 products 테이블의 평균 Price값을 계산해보세요

Q. SQL 함수를 이용해서 Products 테이블의 Price 값의 합계를 구해보세요

Like

Q. City 열에서 값이 "a"로 시작하는 모든 레코드를 선택하세요

Q. City 열에서 값이 "a"로 끝나는 모든 레코드를 선택하세요

Q. City 열에서 값이 "a"를 포함하는 모든 레코드를 선택하세요

Q. City 열에서 값이 "a"로 시작해서 "b"로 끝나는 모든 레코드를 선택하세요

Q. City 열에서 값이 "a"로 시작하지 않는 모든 레코드를 선택하세요

Wildcards

Q. City 열에서 값의 두번째 글자가 "a"인 모든 레코드를 선택하세요

Q. City 열에서 값이 "b"로 시작하는 모든 레코드를 선택하세요

In

Q. IN 연산자를 이용해서 Country가 "Norway"거나 "France"인 레코드를 모두 선택하세요

Q. IN 연산자를 이용해서 Country가 "Norway"나 "France"가 아닌 레코드를 모두 선택하세요

Between

Q. BETWEEN 연산자를 이용해서 Price 값이 10에서 20 사이인 레코드를 모두 선택하세요

Q. BETWEEN 연산자를 이용해서 Price 값이 10에서 20 사이가 아닌 레코드를 모두 선택하세요

Q. BETWEEN 연산자를 이용해서 알파벳 순으로 정렬했을 때 ProductName이'Geitost'와 'Pavlova' 사이인 레코드를 모두 선택하세요

Alias

Q. Customers 테이블을 표시할 때 PostalCode 열을 Pno라는 별칭(alias)으로 참조하게 하세요

Q. Customers 테이블을 표시할 때 Customers 대신 Consumers로 참조하게 하세요

Join

Q. CustomerID 필드를 기준으로 Orders 테이블과 Customers 테이블을 조합하여 하나의 테이블로 표현해보세요

Q. Orders 테이블의 CustomerID 필드와 Customers 테이블의 CustomerID 필드가 서로 일치하는 레코드만 선택해보세요

Q. Orders 테이블을 기준으로 Orders 테이블의 키값과 Customers 테이블의 키값이 일치하는 레코드와 Orders 테이블 전체를 모두 선택하세요

Group By

Q. 각 Country의 Customers 수를 나열해보세요

Q. Customers의 숫자가 많은 순으로 각 Country의 Customers를 나열해보세요

Database

Q. testDB라는 새 데이터베이스를 생성해보세요

Q. testDB라는 데이터베이스를 삭제해보세요

Q. Persons라는 새 테이블을 생성해보세요

Q. Persons라는 테이블을 삭제해보세요

Q. TRUNCATE문을 사용해서 Persons라는 테이블의 모든 데이터를 삭제해보세요

Q. DATE 타입을 가진 Birthday라는 이름의 열을 추가해보세요

Q. Persons 테이블의 Birthday열을 삭제해보세요

문제 및 정답(Q&A)

Select

Q. Customers 테이블의 모든 열을 가져오는 명령문을 작성하세요.

SELECT * FROM Customers;

Q. Customers 테이블에서 City 열을 선택하는 명령문을 작성하세요.

SELECT City FROM Customers;

Q. Customers 테이블의 Country열에서 값이 다른 것을 모두 선택하세요.

SELECT DISTINCT Country FROM Customers;

Where

Q. City 열에서 "Berlin" 값을 가진 모든 레코드를 선택하세요.

SELECT * FROM Customers
WHERE City = 'Berlin';

Q. NOT 키워드를 사용해서 City가 'Berlin'이 아닌 모든 레코드를 선택하세요

SELECT * FROM Customers
WHERE NOT City = 'Berlin';

Q. CustomerID 열에서 값이 32인 모든 레코드를 선택하세요.

SELECT * FROM Customers
WHERE CustomerID = 32;

Q. City 열의 값이 'Berlin'이고 PostalCode 열의 값이 12209인 모든 레코드를 선택하세요.

SELECT * FROM Customers
WHERE City = 'Berlin'
AND PostalCode = 12209;

Q. City 열의 값이 'Berlin'이거나 'London'인 모든 레코드를 선택하세요.

SELECT * FROM Customers
WHERE City = 'Berlin'
OR City = 'London';

Order By

Q. Customers 테이블의 모든 레코드를 선택하고, 그 결과를 City 열을 기준으로 알파벳순으로 정렬하세요.

SELECT * FROM Customers
ORDER BY City;

Q. Customers 테이블의 모든 레코드를 선택하고, 그 결과를 City 열을 기준으로 알파벳 역순으로 정렬하세요.

SELECT * FROM Customers
ORDER BY City DESC;

Q. Customers 테이블의 모든 레코드를 선택하고, 그 결과를 먼저 Country 열을 기준으로 정렬한 다음 City열을 기준으로 정렬하세요.

SELECT * FROM Customers
ORDER BY Country, City;

Insert

Q. Customers 테이블에 새로운 레코드를 추가하세요.

INSERT INTO Customers (
CustomerName, 
Address, 
City, 
PostalCode,
Country)
VALUES (
'Hekkan Burger',
'Gateveien 15',
'Sandnes',
'4306',
'Norway');

Null

Q.Customers 테이블에서 PostalCode 열이 비어 있는 모든 레코드를 선택하세요.

SELECT * FROM Customers
WHERE PostalCode IS NULL;

Q.Customers 테이블에서 PostalCode 열이 비어 있지 않은 모든 레코드를 선택하세요.

SELECT * FROM Customers
WHERE PostalCode IS NOT NULL;

Update

Q.Customers 테이블에 있는 모든 City열을 업데이트 하세요

UPDATE Customers
SET City = 'Oslo';

Q. City 열의 값을 'Oslo'로 설정하되 Country 열의 값이 "Norway"인 값만 설정하세요

UPDATE Customers
SET City = 'Oslo'
WHERE Country = 'Norway';

Q. CustomerID가 32인 레코드를 찾아 City와 Country 값을 업데이트 하세요

UPDATE Customers
SET City = 'Oslo',
Country = 'Norway'
WHERE CustomerID = 32;

Delete

Q.Customers 테이블에서 Country 값이 'Norway'인 모든 레코드를 삭제하세요

DELETE FROM Customers
WHERE Country = 'Norway';

Q.Customers 테이블의 모든 레코드를 삭제하세요

DELETE FROM Customers;

Functions

Q. MIN 함수를 이용해서 Price 열에 있는 값이 가장 작은 레코드를 선택하세요

SELECT MIN(Price)
FROM Products;

Q. SQL 함수를 이용해서 Price 열에서 값이 가장 큰 레코드를 선택하세요

SELECT MAX(Price)
FROM Products;

Q. 적절한 함수를 이용해서 Price 값이 18로 설정된 레코드의 갯수를 찾아 return하세요

SELECT COUNT(*)
FROM Products
WHERE Price = 18;

Q. SQL 함수를 이용해서 products 테이블의 평균 Price값을 계산해보세요

SELECT AVG(Price)
FROM Products;

Q. SQL 함수를 이용해서 Products 테이블의 Price 값의 합계를 구해보세요

SELECT SUM(Price)
FROM Products;

Like

Q. City 열에서 값이 "a"로 시작하는 모든 레코드를 선택하세요

SELECT * FROM Customers
WHERE City LIKE 'a%';

Q. City 열에서 값이 "a"로 끝나는 모든 레코드를 선택하세요

SELECT * FROM Customers
WHERE City LIKE '%a';

Q. City 열에서 값이 "a"를 포함하는 모든 레코드를 선택하세요

SELECT * FROM Customers
WHERE City LIKE '%a%';

Q. City 열에서 값이 "a"로 시작해서 "b"로 끝나는 모든 레코드를 선택하세요

SELECT * FROM Customers
WHERE City LIKE 'a%b';

Q. City 열에서 값이 "a"로 시작하지 않는 모든 레코드를 선택하세요

SELECT * FROM Customers
WHERE City NOT LIKE 'a%';

Wildcards

Q. City 열에서 값의 두번째 글자가 "a"인 모든 레코드를 선택하세요

SELECT * FROM Customers
WHERE City LIKE '_a%';

Q. City 열에서 값이 "b"로 시작하는 모든 레코드를 선택하세요

SELECT * FROM Customers
WHERE City LIKE 'b%';

In

Q. IN 연산자를 이용해서 Country가 "Norway"거나 "France"인 레코드를 모두 선택하세요

SELECT * FROM Customers
WHERE Country IN ('Norway', 'France');

Q. IN 연산자를 이용해서 Country가 "Norway"나 "France"가 아닌 레코드를 모두 선택하세요

SELECT * FROM Customers
WHERE Country NOT IN ('Norway', 'France');

Between

Q. BETWEEN 연산자를 이용해서 Price 값이 10에서 20 사이인 레코드를 모두 선택하세요

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

Q. BETWEEN 연산자를 이용해서 Price 값이 10에서 20 사이가 아닌 레코드를 모두 선택하세요

SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;

Q. BETWEEN 연산자를 이용해서 알파벳 순으로 정렬했을 때 ProductName이'Geitost'와 'Pavlova' 사이인 레코드를 모두 선택하세요

SELECT * FROM Products
WHERE ProductName BETWEEN 'Geitost' AND 'Pavlova';

Alias

Q. Customers 테이블을 표시할 때 PostalCode 열을 Pno라는 별칭(alias)으로 참조하게 하세요

SELECT CustomerName,
Address,
PostalCode AS Pno
FROM Customers;

Q. Customers 테이블을 표시할 때 Customers 대신 Consumers로 참조하게 하세요

SELECT CustomerName,
Address,
PostalCode AS Pno
FROM Customers;

Join

Q. CustomerID 필드를 기준으로 Orders 테이블과 Customers 테이블을 조합하여 하나의 테이블로 표현해보세요

SELECT * 
FROM Orders
LEFT JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

Q. Orders 테이블의 CustomerID 필드와 Customers 테이블의 CustomerID 필드가 서로 일치하는 레코드만 선택해보세요

SELECT * 
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

Q. Orders 테이블을 기준으로 Orders 테이블의 키값과 Customers 테이블의 키값이 일치하는 레코드와 Orders 테이블 전체를 모두 선택하세요

SELECT * 
FROM Orders
RIGHT JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

Group By

참고: 위에서 사용했던 COUNT 함수를 이용하면 전체 개수만 가져올 수 있습니다. 하지만 GROUP BY를 사용하면 컬럼의 데이터를 그룹화해서 특정 유형의 개수를 알 수 있습니다.

Q. 각 Country의 Customers 수를 나열해보세요

SELECT COUNT(CustomerID),
Country
FROM Customers
GROUP BY Country;

Q. Customers의 숫자가 많은 순으로 각 Country의 Customers를 나열해보세요

SELECT COUNT(CustomerID),
Country
FROM Customers
GROUP BY Country;
ORDER BY COUNT(CustomerID) DESC;

Database

Q. testDB라는 새 데이터베이스를 생성해보세요

CREATE DATABASE testDB;

Q. testDB라는 데이터베이스를 삭제해보세요

DROP DATABASE testDB;

Q. Persons라는 새 테이블을 생성해보세요


CREATE TABLE Persons (
  PersonID int,
  LastName varchar(255),
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255) 
);

Q. Persons라는 테이블을 삭제해보세요

DROP TABLE Persons;

Q. TRUNCATE문을 사용해서 Persons라는 테이블의 모든 데이터를 삭제해보세요

참고: 위에서 사용했던 DROP의 경우 테이블 자체를 삭제하지만, TRUNCATE는 테이블 안의 내용물만 삭제한다는 점이 다릅니다.

TRUNCATE TABLE Persons;

Q. DATE 타입을 가진 Birthday라는 이름의 열을 추가해보세요

ALTER TABLE Persons
ADD Birthday DATE;

Q. Persons 테이블의 Birthday열을 삭제해보세요

ALTER TABLE Persons
DROP COLUMN Birthday;
profile
공부하는 즐거움

0개의 댓글