문제 풀이를 진행하기 전에 MySQL 구문을 다시 정리해보자!
QUIT(서버와의 연결을 끊음)
와 같은 경우를 제외한 일반적인 구문 뒤에는 세미콜론 ;
을 붙이며, 세미콜론은 SQL 구문을 구분하는 기준이 된다.SELECT 필드명
FROM 테이블명
[WHERE 조건]
SELECT
문을 사용하여 테이블의 레코드(열)
을 선택할 수 있다.FROM
절은 레코드를 선택할 테이블의 이름
을 명시한다.WHERE
절을 사용하면 선택할 레코드의 조건
을 상세히 설정할 수 있다.SELECT *
FROM 테이블명
*
기호를 사용하면, 해당 테이블의 모든 필드를 선택할 수 있다.SELECT 필드명
FROM 테이블명
WHERE 조건
SELECT
문과 함께 WHERE
절을 사용하면 검색할 레코드의 조건을 설정할 수 있다.WHERE
절은 테이블의 크기가 매우 크거나, 특정 조건에 맞는 레코드만을 선택하고 싶을 때 유용하게 사용된다.AND
와 OR
연산자를 이용하여 여러 조건을 연결할 수도 있다.SELECT 필드명1, 필드명2, ...
FROM 테이블명
SELECT
키워드 다음에 필드명
을 명시하면, 해당 테이블의 특정 필드만을 불러올 수 있다.,
를 사용하면 여러 개의 필드명을 한번에 명시할 수 있다.SELECT DISTINCT 필드명
FROM 테이블명
DISTINCT
키워드를 사용하여 그 값이 한 번만 선택되도록 설정할 수 있다.SELECT 필드명
FROM 테이블명
ORDER BY 필드명 [ASC|DESC]
ORDER BY
절을 사용하여 SELECT
문으로 선택한 결과를 정렬할 수 있다.ASC
)이며, 키워드를 이용하여 내림차순(DESC
)으로 정렬할 수도 있다.,
를 이용하여 필드마다 다른 설정으로 정렬할 수도 있다.SELECT 필드명 AS 별칭
FROM 테이블명
AS
키워드를 이용하여 해당 필드에 새로운 별칭을 부여할 수 있다.SELECT 필드명
FROM 테이블명 AS 별칭
AS
키워드를 이용하여 해당 테이블에 새로운 별칭을 부여할 수 있다.💡 문제마다 추가적으로 필요한 개념들은 따로 정리해보도록 하겠다!
Query all columns for all American cities in the CITY table with populations larger than 100000. The CountryCode for America is USA.
CITY
테이블에서 POPULATION
값이 100000
을 초과하는 레코드의 모든 컬럼을 출력하라.COUNTRYCODE
는 'USA'
이다.SELECT *
FROM CITY
WHERE POPULATION > 100000
AND COUNTRYCODE = 'USA';
Query the NAME field for all American cities in the CITY table with populations larger than 120000. The CountryCode for America is USA.
CITY
테이블에서 POPULATION
값이 120000
을 초과하는 레코드의 NAME
필드를 출력하라.COUNTRYCODE
는 'USA'
이다.SELECT NAME
FROM CITY
WHERE POPULATION > 120000
AND COUNTRYCODE = 'USA';
Query all columns (attributes) for every row in the CITY table.
CITY
테이블의 모든 컬럼을 출력하라.SELECT *
FROM CITY;
Query all columns for a city in CITY with the ID 1661.
CITY
테이블의 ID
필드 값이 1661
인 레코드의 모든 컬럼을 출력하라.SELECT *
FROM CITY
WHERE ID = 1661;
Query all attributes of every Japanese city in the CITY table. The COUNTRYCODE for Japan is JPN.
CITY
테이블의 COUNTRYCODE
필드값이 'JPN'
인 레코드의 모든 컬럼을 출력하라.SELECT *
FROM CITY
WHERE COUNTRYCODE = 'JPN';
Query the names of all the Japanese cities in the CITY table. The COUNTRYCODE for Japan is JPN.
CITY
테이블의 COUNTRYCODE
필드값이 'JPN'
인 데이터의 NAME
컬럼을 출력하라.SELECT NAME
FROM CITY
WHERE COUNTRYCODE = 'JPN';
Query a list of CITY and STATE from the STATION table.
STATION
테이블의 CITY
, STATE
컬럼을 출력하라.SELECT CITY, STATE
FROM STATION;
Query a list of CITY names from STATION for cities that have an even ID number. Print the results in any order, but exclude duplicates from the answer.
STATION
테이블의 짝수 ID
번호를 갖는 레코드의 CITY
를 출력하라.SELECT DISTINCT CITY
FROM STATION
WHERE ID % 2 = 0;
Find the difference between the total number of CITY entries in the table and the number of distinct CITY entries in the table.
STATION
테이블의 CITY
컬럼 총 개수와 CITY
컬럼 중 고유한 값을 갖는 레코드 개수의 차이를 출력하라.SELECT COUNT(*) - COUNT(DISTINCT CITY)
FROM STATION;
✅ COUNT(컬럼명) 함수
- SELECT절에서 반환된
컬럼명
레코드 개수를 가져온다.- 이때
NULL
값은 제외하고 카운트한다.
Query the two cities in STATION with the shortest and longest CITY names, as well as their respective lengths (i.e.: number of characters in the name). If there is more than one smallest or largest city, choose the one that comes first when ordered alphabetically.
STATION
테이블의 CITY
필드값의 길이가 가장 짧은 값과 가장 긴 값의 길이를 CITY
필드의 값과 함께 출력하라. (CITY 필드 값, 필드 값의 길이)SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY), CITY
LIMIT 1;
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) DESC, CITY
LIMIT 1;
SELECT
절은 (가장 짧은 도시의 이름, 길이)를 출력한다.SELECT
절은 (가장 긴 도시의 이름, 길이)를 출력한다.✅ LIMIT number;
- 반환할 레코드 수를 지정할 때 사용되며, number개를 반환한다.
LIMIT
절은 수천 개의 레코드가 있는 큰 테이블에 유용하다.
Query the list of CITY names starting with vowels (i.e., a, e, i, o, or u) from STATION. Your result cannot contain duplicates.
STATION
테이블에서 CITY
필드값 중 모음으로 시작하는
(첫 글자가 모음) 레코드의 CITY
를 출력하라.SELECT DISTINCT CITY
FROM STATION
WHERE LEFT(CITY, 1) IN ('a', 'e', 'i', 'o', 'u');
✅ LEFT
문자열
에서 왼쪽부터개수
만큼의 문자를 추출한다.- 예)
LEFT('MYSQL', 1)
→ 왼쪽 첫 번째 글자인M
추출
Query the list of CITY names ending with vowels (a, e, i, o, u) from STATION. Your result cannot contain duplicates.
STATION
테이블에서 CITY
필드값 중 모음으로 끝나는
(끝 글자가 모음) 레코드의 CITY
를 출력하라.SELECT DISTINCT CITY
FROM STATION
WHERE RIGHT(CITY, 1) IN ('a', 'e', 'i', 'o', 'u');
✅ RIGHT(문자열, 개수)
문자열
에서 오른쪽부터개수
만큼의 문자를 추출한다.- 예)
RIGHT('MYSQL', 1)
→ 오른쪽 첫 번째 글자인L
추출
Query the list of CITY names from STATION which have vowels (i.e., a, e, i, o, and u) as both their first and last characters. Your result cannot contain duplicates.
STATION
테이블에서 CITY
필드값 중 모음으로 시작하고 끝나는
(첫 글자, 끝 글자가 모음) 레코드의 CITY
를 출력하라.SELECT DISTINCT CITY
FROM STATION
WHERE LEFT(CITY, 1) IN ('a', 'e', 'i', 'o', 'u')
AND RIGHT(CITY, 1) IN ('a', 'e', 'i', 'o', 'u');
Query the list of CITY names from STATION that do not start with vowels. Your result cannot contain duplicates.
STATION
테이블에서 CITY
필드값 중 모음으로 시작하지 않는
(첫 글자가 모음 ❌(즉, 자음)) 레코드의 CITY
를 출력하라.SELECT DISTINCT CITY
FROM STATION
WHERE LEFT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u');
Query the list of CITY names from STATION that do not end with vowels. Your result cannot contain duplicates.
STATION
테이블에서 CITY
필드값 중 모음으로 끝나지 않는
(끝 글자가 모음 ❌(즉, 자음)) 레코드의 CITY
를 출력하라.SELECT DISTINCT CITY
FROM STATION
WHERE RIGHT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u');
Query the list of CITY names from STATION that either do not start with vowels or do not end with vowels. Your result cannot contain duplicates.
STATION
테이블에서 CITY
필드값 중 모음으로 시작하거나 끝나지 않는
(첫 글자 자음 OR 끝 글자 자음) 레코드의 CITY
를 출력하라.SELECT DISTINCT CITY
FROM STATION
WHERE LEFT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u')
OR RIGHT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u');
Query the list of CITY names from STATION that do not start with vowels and do not end with vowels. Your result cannot contain duplicates.
STATION
테이블에서 CITY
필드값 중 모음으로 시작하고 끝나지 않는
(첫 글자 자음 AND 끝 글자 자음) 레코드의 CITY
를 출력하라.SELECT DISTINCT CITY
FROM STATION
WHERE LEFT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u')
AND RIGHT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u');
Query the Name of any student in STUDENTS who scored higher than 75 Marks. Order your output by the last three characters of each name. If two or more students both have names ending in the same last three characters (i.e.: Bobby, Robby, etc.), secondary sort them by ascending ID.
STUDENTS
테이블에서 Marks
필드값이 75
보다 높은 레코드의 Name
필드값을 출력하라.Bobby
, Robby
등) ID를 기준으로 오름차순으로 정렬하라.SELECT NAME
FROM STUDENTS
WHERE MARKS > 75
ORDER BY RIGHT(NAME, 3), ID;
Write a query that prints a list of employee names (i.e.: the name attribute) from the Employee table in alphabetical order.
Employee
테이블에서 NAME
속성을 알파벳 순서로 출력하라.SELECT NAME
FROM EMPLOYEE
ORDER BY NAME;
Write a query that prints a list of employee names (i.e.: the name attribute) for employees in Employee having a salary greater than $2000 per month who have been employees for less than 10 months. Sort your result by ascending employee_id.
Employee
테이블에서 months
필드값이 10
보다 작으며 salary
필드값이 2000
보다 큰 레코드의 name
필드를 출력하라.employee_id
를 기준으로 결과를 정렬하라.SELECT NAME
FROM EMPLOYEE
WHERE MONTHS < 10
AND SALARY > 2000
ORDER BY EMPLOYEE_ID;
http://tcpschool.com/mysql/mysql_basic_syntax
https://www.w3schools.com/sql/func_mysql_count.asp
https://www.w3schools.com/sql/func_mysql_right.asp
https://www.w3schools.com/mysql/mysql_limit.asp
https://www.w3schools.com/sql/func_sqlserver_round.asp