타자 설정을 새로고침하지 못했습니다. 페이지를 새로고침하여 다시 시도하세요.
타자 연습: SQL 언어로 프로그래밍
정확성 계산 규칙이 변경되었습니다. 이 연습은 처음부터 다시 시작합니다.
완료한 세션의 저장을 확인할 수 없었습니다. 다시 입력하지 않고 저장을 다시 시도하세요.
타자 연습: SQL 언어로 프로그래밍
프로그래밍에서는 터치 타이핑이 중요합니다. 빠른 입력 기술을 사용하여 SQL 프로그래밍 언어로 코드를 작성하는 것이 더 효율적입니다.
SQL 프로그래밍 및 터치 타이핑
SQL을 배우는 것과 타자 연습은 자연스럽게 연결됩니다. SQL 쿼리는 괄호, 쉼표, 연산자, 따옴표로 가득 차 있습니다. 따옴표를 잘못 입력하거나 세미콜론을 빼먹는 작은 실수도 쿼리 전체를 실패하게 만들 수 있습니다. SQL을 입력할 때는 어떤 구문 요소가 여러 데이터베이스에서 공통이고, 어떤 것이 특정 시스템에만 해당하는지 아는 것이 도움이 됩니다. 이 글은 주로 PostgreSQL에 초점을 맞추지만, 구문이 다른 부분에서는 MySQL, SQLite, SQL Server도 언급합니다.
SQL 구문의 특징은 무엇인가?
SQL(Structured Query Language)은 선언적 언어입니다. 데이터를 가져오는 방법을 단계별로 설명하는 대신, 원하는 데이터를 선언합니다. 거의 모든 문장은 SELECT, INSERT, UPDATE 같은 키워드로 시작합니다. 절의 순서는 고정되어 있습니다: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY .... PostgreSQL과 MySQL은 이 순서를 공유하므로 하나에서 배운 것을 다른 곳에서도 사용할 수 있습니다.
SELECT id, name
FROM customers
WHERE active = true
ORDER BY created_at DESC;
자주 사용하는 특수 문자
SQL은 많은 구두점을 포함합니다. 괄호 ()는 함수의 인수를 감싸고 조건을 묶는 데 사용됩니다. 쉼표 ,는 열을 구분합니다. 점 .은 스키마와 테이블 이름에 사용됩니다 (예: public.users). 작은따옴표 '...'는 문자열 리터럴을 나타냅니다. PostgreSQL은 식별자에 큰따옴표 "..."를 사용하고, MySQL은 백틱 `...`을 사용합니다. SQL Server에서는 대괄호 [...]가 사용되기도 합니다. 이러한 기호들을 연습하는 것은 쿼리를 망치지 않고 정확히 입력하는 데 도움이 됩니다.
-- 문자열 리터럴
SELECT * FROM books WHERE title = 'War and Peace';
-- 공백이 포함된 식별자 (PostgreSQL)
SELECT "Order ID", "Customer Name" FROM orders;
대문자와 소문자
관례적으로 SQL 키워드는 대문자로 입력됩니다: SELECT, FROM, WHERE. 이는 쿼리에서 눈에 잘 띄게 하지만 필수는 아닙니다. PostgreSQL에서는 따옴표 없는 식별자가 자동으로 소문자로 변환되므로 MyTable과 mytable은 동일하게 처리됩니다. MySQL에서 데이터베이스와 테이블 이름의 대소문자를 구분하는지는 운영체제와 서버 설정에 따라 달라집니다. 연습할 때 키워드를 대문자로 쓰는 것이 일반적이며 쿼리 구조를 잘 드러냅니다.
세미콜론과 문장의 끝
SQL에서는 세미콜론 ;으로 문장을 끝냅니다. psql, MySQL 클라이언트, SQLite 셸 같은 대화형 도구는 보통 이 문자가 입력될 때까지 기다린 뒤 문장을 실행합니다. psql에서는 \g로 현재 쿼리를 전송할 수도 있습니다. 결과 대신 추가 입력을 기다리는 프롬프트가 표시되면 문장을 끝냈는지 확인하세요.
SELECT 쿼리와 JOIN
쿼리를 작성하는 것은 종종 JOIN을 작성하는 것을 의미합니다. PostgreSQL은 INNER JOIN, LEFT JOIN, RIGHT JOIN을 사용합니다. 아래 예에서는 ON 뒤에 조인 조건을 지정합니다. USING이나 NATURAL을 사용하는 조인도 있습니다. 공백 하나를 빼먹거나 조건을 잘못 입력하면 쿼리가 실패합니다. JOIN 연습은 =와 . 같은 기호를 정확하게 입력하는 데 도움이 됩니다.
SELECT c.id, c.name, o.amount
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id
WHERE o.amount > 100;
함수와 표현식
PostgreSQL에는 COUNT(), SUM(), AVG() 같은 내장 함수가 많이 있습니다. 괄호는 항상 필요합니다. 날짜와 시간 함수인 NOW()와 DATE_TRUNC()는 PostgreSQL에서 사용할 수 있습니다. 사용할 수 있는 함수와 동작은 데이터베이스마다 다릅니다. MySQL에는 CURDATE()나 DATE_FORMAT() 같은 함수도 있습니다. 이를 정확히 입력하려면 밑줄, 쉼표, 괄호에 주의해야 합니다.
SELECT DATE_TRUNC('month', created_at) AS month,
COUNT(*) AS orders
FROM orders
GROUP BY month
ORDER BY month;
INSERT, UPDATE, DELETE
데이터를 수정하는 명령어에는 구두점이 많이 포함됩니다. INSERT는 열과 값을 나열하기 위해 괄호와 쉼표를 사용합니다. UPDATE는 =로 값을 대입하고, 각 대입을 쉼표로 구분합니다. DELETE는 키워드와 조건을 결합합니다. 이러한 구조는 PostgreSQL, MySQL, SQLite, SQL Server에서 거의 동일하지만 따옴표 규칙은 다를 수 있습니다.
INSERT INTO users (id, name, email)
VALUES (1, 'Alice', 'a@example.com');
UPDATE users
SET name = 'Bob', email = 'bob@example.com'
WHERE id = 1;
DELETE FROM users WHERE id = 2;
Common Table Expressions (CTE)
PostgreSQL은 WITH로 시작하는 CTE(Common Table Expressions)를 자주 사용합니다. CTE는 괄호와 쉼표가 많이 포함되어 있어 타자 연습에 적합합니다. MySQL, SQLite, SQL Server도 CTE를 지원합니다. 여는 괄호와 닫는 괄호가 올바르게 짝을 이루는지 확인하세요.
WITH recent_orders AS (
SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT customer_id, COUNT(*) AS order_count
FROM recent_orders
GROUP BY customer_id;
윈도 함수
PostgreSQL은 고급 윈도 함수로 유명합니다. 일반적인 구문 OVER (PARTITION BY ... ORDER BY ...)는 괄호와 키워드를 정확히 입력해야 합니다. MySQL과 SQL Server도 윈도 함수를 지원합니다. 아래 예는 PostgreSQL 구문을 사용합니다.
SELECT customer_id,
SUM(amount) OVER (PARTITION BY customer_id ORDER BY created_at) AS running_total
FROM payments;
매개변수와 플레이스홀더
애플리케이션에서 매개변수 플레이스홀더는 데이터베이스와 드라이버에 따라 달라집니다. PostgreSQL에서 직접 처리하는 준비된 명령문은 $1, $2를 사용하고, MySQL의 준비된 명령문과 SQLite 쿼리는 ?를 사용할 수 있습니다. SQL Server 매개변수에는 @p1 같은 이름을 붙입니다. 드라이버는 Psycopg의 %s처럼 다른 구문을 요구할 수도 있습니다. 작은 기호는 오타가 나기 쉬우므로 사용하는 드라이버의 문서를 확인하세요.
-- PostgreSQL
SELECT * FROM users WHERE id = $1;
-- MySQL
SELECT * FROM users WHERE id = ?;
요약
관례적으로 SQL 키워드는 대문자로 입력합니다. PostgreSQL은 큰따옴표로 묶지 않은 식별자를 소문자로 변환하며, 다른 시스템에서는 규칙이 다릅니다. PostgreSQL은 식별자에 큰따옴표를 사용하고, $n 플레이스홀더, CTE, 윈도 함수를 지원합니다. MySQL은 백틱과 ? 플레이스홀더를 사용합니다. SQL Server는 대괄호와 @ 매개변수를 도입합니다. SQLite는 단순한 구문을 유지하지만, 정확성이 필요합니다. SQL 쿼리를 연습하는 것은 기호와 키워드를 정확히 입력하는 능력을 키우며, PostgreSQL을 중심으로 실무에서도 쓰이는 쿼리 구문을 입력하는 연습을 할 수 있습니다.