아래 과정을 저와 같이 따라하고 싶으시다면 아래 사이트에 접속하셔서 그대로 쿼리를 작성해보시면 됩니다!
https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_select_all
1. 원하는 데이터 불러오기 (전체)
SELECT * FROM Customers;
MySQL에서 SELECT는 "가져오다" 정도로 해석하면 용이할 듯하다.
* 표시는 '모든 칼럼(행)'이라고 해석하면 되겠다.
즉 위 구문은 'Customers'라는 테이블의 모든 행(칼럼)을 가져온다고 생각하면 되겠다.
'Run SQL' 초록 박스를 클릭하여 실행하니 아래 Result로 불러온 91개의 Customers 데이터를 확인할 수 있었다.
2. 주석 넣기
프로그래밍을 해보신 분들이라면 익숙하겠지만, 비전공자 거나 문서 작업을 해본 적이 없는 학생이라면 생소할 수 있는 '주석' 기능이다.
위 화면에서
-- 성웅이는 성공하고 싶다.라고 표시된 부분은 실제 프로그램 실행 시 그 어떠한 영향을 미치지 않는다.
즉 프로그래머들도 수십수백수천 줄의 프로그램 언어를 작성하다 보면 이게 무슨 명령문인지, 어떤 조건문인지 헷갈리는 경우가 비일비재하기 때문에 각자만의 주석을 달아두기도 하는데, 그때를 위한 기능이다.
-- 뒤에 하고 싶은 주석을 입력하면 되겠다. (프로그램 실행 시 해당 주석은 표시되지 않는다!)
3. 정해진 테이블에서 원하는 항목 불러오기
제일 처음 SELECT(가져오기) 명령어와 *(전체 행) 목적어를 통해 모든 Customers 값을 불러왔다면,
이번엔 그중에 내가 원하는 내용 (사용자의 이름: Customername)만 불러와보자.
SELECT가 가져오게 하는 기능이고, *는 전체를 뜻하는 목적어였으므로 * 자리에 Customername을 넣어주면 끝난다.
즉 명령어는 SELECT Customername FROM Customers; 가 되겠다.
마찬가지로 한 가지 카테고리뿐만 아니라 여러 가지 카테고리를 동시에 입력하여 위 그림처럼 추출 해올 수도 있다.
쉬운 내용이지만 한 번 더 정리하자면
SELECT 가져올 항목 1, 가져올 항목 2, 가져올 항목 3 FROM 가져올 테이블명;
=
SELECT CustomerName, Contactname, Country FROM Customers;
위 같은 쿼리가 생성되겠다.
4. 응용하기 ( 1, '문자열', NULL)
명령 문에서 ' '는 문자열을 입력했음을 뜻한다.
Customername은 이미 불러올 데이터에서 존재하는 칼럼(행)이기 때문에 ' '를 붙이지 않아도 컴퓨터가 인식할 수 있다. 숫자 1 역시 컴퓨터가 인식할 수 있다. 하지만 Hello라는 문자열은 데이터에도, 명령어에도 존재하지 않기 때문에 인식하지 못해 오류를 야기한다. 따라서 ' ' 표시를 통해 오류를 방지하는 개념이라고 생각하면 될 듯하다.
NULL은 "비어있는 값"이라는 뜻으로 아무것도 출력되지 않은 결과 값을 아래에서 확인할 수 있다. 추가 활용 법은 나중에 다룰 예정이니 이 정도로만 알아 두도록 하자.
5. 원하는 조건의 행 걸러서 데이터 추출하기.
MySQL에서 '내가 원하는 조건'에 맞추어 데이터를 추출할 때 사용되는 명령어는 WHERE이다.
이번엔 ORDERS라는 데이터베이스에서 Employee의 IDentifcatio이 3에 해당하는 조건의 데이터들만 추출해 보았다. 빨간색으로 표시된 명령어와 결과 값을 참조하여 이해해보자.
위와 같이 응용해서, *대신 CustomerID와 EmployeeID를 입력하여 두 ID만 추출하고, 그중에서도 ShipperID가 2인 데이터들만 추출했다. (ShipperID는 조건에는 해당하지만 SELECT 명령문으로 가져오지는 않았으므로 결괏값에는 표기되지 않는다.)
5-1 N보다 작은 값 추출하기
마찬가지로 Orderdetials 테이블(데이터베이스)에서 Quantity가 5보다 작은 데이터들만 추출하고 싶다면, WHERE 조건문 뒤에 Quantity < 3을 입력하여 데이터를 불러올 수 있겠다.
5-2 N보다는 크고 M보다는 작은 값 추출하기 (응용)
내가 독학하기 위해 참고하는 자료에서 WHERE 조건문 뒤에 부등호와 숫자를 통해 ~보다 작은 값, ~보다 큰 값을 추출하는 법은 직접 테스트해보았다.
그런데 n보다는 크고 m보다는 작은 값, 즉 n < Quantity < m과 같은 식도 사용할 수 있을까? 해서
WHERE 2 < Quanitity < 5;라는 식을 만들어 출력해보았고
그 결과 2보다 큰 값만 와장창창 추출되었다... (5보다 작은 <<이라는 조건이 적용되지 않았다.)
예전에 엑셀 공부를 할 때 And와 OR 문을 작성하고 응용했던 기억이 떠올라
위와 같이
Where 2 < Quantity AND Quantity < 5;라는 식을 직접 작성해 보았고,
결과는 성공적으로 2와 5 사이에 해당하는 데이터들만 추출됨을 확인하였다.
이 맛에 프로그래머들이 코딩을 하는 걸까..?라는 생각과 이 정도 가지고 만족하지 말자...라는 생각이 교차하며 다음 Step들을 밟아보기로 했다.
6. ORDER BY 문을 통한 오름차순, 내림차순 불러오기
Customers 데이터베이스를 불러옴에 있어서 ContactName을 기준으로 오름차순으로 정렬하여 데이터를 불러오고 싶다면 어떻게 해야 할까?
명령문은 다음과 같다.
ORDER BY 기준이 될 카테고리명
ㄴ 포인트는 ASC인데 ORDER BY라는 명령어와 함께 제일 뒤에 ASC(어센딩)이 오면 오름차순으로 정렬할 수 있다. ASC라는 워드를 생략해도 기본 설정 값인 오름차순으로 정렬됨을 확인할 수 있겠다.
내림차순으로 정렬하고 싶다면 ASC 대신에 DESC(디센딩)를 삽입하면 된다.
SQL의 장점은 일반적인 프로그래밍 언어와 다르게 영어 그대로 해석하면 쿼리문을 쉽게 이해할 수 있다는 점인 것 같다.
필자의 경우 헬스를 하면서 어센딩(피라미드 운동법)과 디센딩(역피라미드 운동법)의 개념을 잘 알고 있어 보다 수월하게 용어를 이해하고 암기할 수 있었다.
마찬가지로 어센딩과 디센딩을 병행할 수 도 있다.
데이터를 불러오면서 ProductID기준으로는 오름차순을, Quantity는 내림차순으로 정렬하여 위와 같이 추출할 수도 있겠다.
7. 내가 원하는 만큼만 데이터 추출하기 (LIMIT A, B)
데이터베이스에 있는 모든 자료를 가져오다 보면 차질이 생길 수도 있다. 그럴 때 필요한 만큼만 정보를 가져오려면 어떻게 해야 할까?
바로 LIMIT(제한) 명령어를 사용하면 된다.
LIMIT 숫자 A, 숫자 B;로 이루어지는 이 쿼리는
"숫자 A만큼 건너뛰고, 숫자 B만큼 자료를 가져오라"라고 해석할 수 있겠다.
위 자료처럼 LIMIT 0, 10;을 입력했다면, 0개의 데이터는 건너뛰고, 10개의 데이터를 가져오라고 했으니 1번~10번의 데이터가 추출되는 것이다.
만약 30개의 데이터는 Skip 하고, 그 뒤의 10개의 데이터를 가져오게 하려면 어떻게 해야 할까?
LIMIT 30, 10; 의 형식으로 쿼리를 짜야할 것이며, 31번부터 40번까지의 데이터가 추출되어야 할 것이다.
한번 실행해보자.
정상적으로 실행된 모습.
8. 내가 원하는 이름(별명)으로 데이터 추출하기 (AS)
기존 테이블(DataBase)에 있던 데이터들의 카테고리명이 CustomerID, CustomerName, Adress 등으로 구성돼 이었다면 쉽게 해석할 순 있어도 한국인 입장에서, 보고하고 받는 입장에서 불편한 가독성을 감수해야 한다.
데이터를 추출할 때 내가 원하는 네이밍으로 가져올 수 있다면 데이터 추출을 훨씬 가독성 있고 센스 있게 할 수 있지 않을까?
기본의 SELECT A FROM B 쿼리에서
A 자리에 '불러 올 카테고리명 AS 내가 원하는 카테고리명'으로 대체해주면 된다.
나는 CustomerID는 ID로, CustomerName은 이름으로, Address는 주소로 추출하고 싶었고,
이 과정에서 한글 같은 경우 문자열이기 때문에 반드시 " "표기를 해주어야 오류 없이 추출됨을 피드백할 수 있었다.
참고: ' '도 가능하다.
1장 2장 쿼리 하나로 총 복습하기!
1장과 2장에서 배웠던 기본적인 데이터 추출하기, 조건문, 원하는 별명으로 데이터 추출하기 명령어를 활용하여 한 쿼리로 만들어 보자.
<조건 제시>
테이블(DB)을 Customers로 설정하고, 거기서 CustomerID와 CustomerName, City와 Country를 각각 아이디, 고객명, 도시, 국가라는 별명으로 추출하되 City가 London이거나 Country가 Mexico인 데이터만 추출하라. CustomerName을 기준으로 오름차순으로 정렬하며, 단 0개의 데이터는 제외하고 5개의 데이터만 추출할 것.
직접 쿼리를 짜 보고 필자가 작성한 아래 정답과 비교해보자.
Select
CustomerID AS '아이디',
CustomerName AS '고객명',
City AS '도시',
Country AS '국가'
FROM Customers
WHERE City =' London' OR Country = 'Mexico'
Order By CustomerName
Limit 0, 5;
만약 잘 입력한 것 같은데 실행이 안된다면,
1) 오타가 있지는 않은지 CustomersName(X) CustomerName(O) < s가 붙어있어 실행 X
2) 문자열에 ' ' 표시를 꼭 해주었는지 London(X) 'London'(O) 국가(X) '국가'(O)
확인해보도록 하자 :o
성공적으로 실행되었다면 아래와 같은 화면이 추출될 것이다.
'Skills > MySQL' 카테고리의 다른 글
4. MySQL 참/거짓 관련 연산자 쿼리 A to Z (0) | 2022.06.27 |
---|---|
3. MySQL 숫자와 문자열을 다루는 함수들 (초보자 MySQL 강좌) (0) | 2022.04.18 |
2. MySQL 각종 연산 쿼리 - 사칙연산, 할인가격, 참/거짓 (초보자 무작정 따라하기) (0) | 2022.04.16 |