SELECT FROM
SQL에서 데이터를 조회할 때는 기본적으로 SELECT A FROM B를 사용한다.
SQL의 특징 중 하나는 사용하는 구문이 영어 그 자체와 비슷하다는 점이다.
SELECT(선택한다) A를 , FROM B (B로부터)라고 해석하면 어느 정도 말이 된다.
SELECT CustomerName FROM Customers;
위의 코드는 " 선택한다, CustomerName을, 어디로부터? , Customers 테이블로부터. "라고 해석할 수 있다.
이렇게 간단하면 좋겠지만, 이외에도 WHERE, AS, DISTINCT 등 여러 가지 키워드를 덧붙여서 조금 더 조건에 맞는 데이터를 조회하기 위한 방법들이 있다.
조건을 더하기위해 WHERE을 사용한다.
SELECT... FROM... WHERE...
SELECT attribute(s)
FROM table(s)
WHERE condition(s)
SELECT * FROM Customers WHERE CustomerID < 10;
조회 기본
1) SELECT FROM - 전체 조회
* (asterisk) : 선택된 tuples의 모든 값들을 가져오려 할 때 사용한다.
아래 코드는 Customers 테이블의 모든 데이터를 조회한다.
SELECT * FROM Customers;
2) column(attribute) 조회
SELECT CustomerName FROM Customers;
(여러 개의 column을 한 번에 가져올 수도 있다.)
SELECT CustomerId, CustomerName, PostalCode FROM Customers;
3) row(tuple) 조회
WHERE의 조건에 맞는 tuple 들을 조회한다.
SELECT * FROM Customers WHERE CustomerID < 10;
WHERE : 조건 지정
위에서 SELECT와 FROM 사이에 조건을 넣기도 하고, 뒤에 WHERE을 사용해서 조건을 넣기도 했다.
이 두 개를 혼합해서 사용하면 좀 더 자세한 조건을 지정할 수 있다.
예제 1) : 원하는 column, 조건 지정
SELECT : customerId, CustomerName, country 세 개의 column
FROM : Customers 테이블
WHERE : CustomerID가 3 이하인 tuple
SELECT customerId, CustomerName, country FROM Customers WHERE CustomerID <= 3;
예제 2) : 두 개의 테이블에서 조건 지정
SELECT : Employees 테이블에서 EmployeeID, LastName, FirstName 정보를 조회한다.
FROM : Employees, Orders 두 개의 테이블
WHERE : OrderID=10250이고, Employees.EmployeeID=Orders.EmployeeID
즉, Orders의 OrderID가 10250인 tuple의 직원 정보를 찾는다.
SELECT Employees.EmployeeID, LastName, FirstName
FROM Employees,Orders
WHERE Orders.OrderID=10250 and Employees.EmployeeID=Orders.EmployeeID;
위의 예제에서 WHERE의 조건들은 selection condition, join condition 두 개로 볼 수 있다.
Orders.OrderID=10250
- selection condition으로, Orders 테이블의 OrderID가 10250인 tuple을 선택한다.
Employees.EmployeeID=Orders.EmployeeID
- join condition으로, Employees 테이블과 Orders 테이블을 연결시켜 준다.
3) attribute 이름이 두 개의 테이블에 모두 존재할 때
(예제 2)에서 Employees.EmployeeID와 같이 해당 attribute가 속해있는 테이블 명을 명시해 줬다.
그 이유는 Employees 테이블에도 EmployeeID가 존재하고, Orders 테이블에도 EmployeeID가 존재하기 때문이다.
따라서 두 테이블에 모두 존재하는 attribute의 경우에는 위와 같이 테이블명을 명시해줘야 한다.
하나의 테이블에만 존재하는 attribute의 경우에는 생략해도 된다.
AS : 별칭 지정
AS는 테이블이나 attribute에 별칭(alias)을 붙일 때 사용한다.
1) attribute에 별칭 지정
SELECT
CustomerId AS ID,
CustomerName AS name,
PostalCode AS code
FROM Customers;
2) TABLE에 별칭 지정
WHERE의 (예제 2)에 쓰였던 SQL을 아래와 같이 바꿀 수 있다.
SELECT E.EmployeeID, E.LastName, E.FirstName
FROM Employees AS E, Orders AS O
WHERE O.OrderID=10250 and E.EmployeeID=O.EmployeeID;
DISTINCT : 중복 제거
검색 결과가 여러 개인데, 중복이 있을 때 정확히 일치하는 중복을 제거해 준다.
아래 예제는 position이 DSGN(디자인)인 employee가 참여하고 있는 project를 조회한다.
SELECT : project id, project name
FROM : employee , works_on , project 테이블
WHERE
- selection condition : employee.position='DSGN'
- join condition : E.id=W.empl_id and W.proj_id=P.id
SELECT DISTINCT P.id, P.name
FROM employee AS E, works_on AS W, project AS P
WHERE E.position='DSGN' and E.id=W.empl_id and W.proj_id=P.id
LIKE
% 기호는 0개 이상의 임의의 개수를 가지는 문자를 의미한다.
예제 1) ~로 시작하는, ~로 끝나는 ( % )
아래 예제는 employee 테이블에서, 이름이 N으로 시작하거나 N으로 끝나는 임직원의 이름을 조회한다.
SELECT name
FROM employee
WHERE name LIKE 'N%' or name LIKE '%N';
예제 2) ~를 포함하는 ( %...%)
아래 예제는 employee 테이블에서, 이름에 NG가 들어가는 임직원의 이름을 조회한다.
SELECT name
FROM employee
WHERE name LIKE '%NG%';
예제 3) 글자수 지정 ( _ )
아래 예제는 employee 테이블에서, 이름이 J로 시작하고, 4글자인 임직원의 이름을 조회한다.
( "_" 사이에 띄어쓰기는 안 한다.)
SELECT name
FROM employee
WHERE name LIKE 'J_ _ _';
예제 4) escape
% 또는 _ 앞에 백슬래시 "\"와 함께 사용한다.
아래 예제는 %로 시작하거나 _ 로 끝나는 프로젝트 이름을 조회한다.
SELECT name
FROM project
WHERE name LIKE '\%%' or name LIKE'%\_';
ORDER BY : 정렬 지정
- ASC : 오름차순 (default)
- DESC : 내림차순
OrderDetails 테이블에서 ProductId를 오름차순으로, 같은 ProductId끼리는 Quantity를 내림차순으로 정렬
SELECT * FROM OrderDetails ORDER BY ProductID ASC, Quantity DESC;
LIMIT : 가져올 개수 지정
- LIMIT {가져올 개수}
- LIMIT {건너뛸 개수, 가져올 개수}
10개의 데이터를 가져온다.
SELECT * FROM Customers LIMIT 10;
20개를 건너뛰고, 그다음 10개를 가져온다.
SELECT * FROM Customers LIMIT 20, 10;
예제
- 조건 1(WHERE) : Quantity가 10 이상 30 이하인 tuple들.
- 조건 2(ORDER BY) : Quantity 기준으로 오름차순 정렬
- 조건 3(LIMIT) : 30개의 tuple 건너뛰고, 10개 가져오기. ( 31~40번째 )
- 조건 4(SELECT) : 해당 tuple의 OrderDetailID, Quantity column만 가져오기
SELECT OrderDetailID, Quantity FROM OrderDetails
WHERE Quantity<=30 and Quantity>=10
ORDER BY Quantity
LIMIT 30,10;
예제에서 사용한 TABLE
(Customers)
(Orders)
(OrderDetails)
(employees)
w3 schools
웹 환경에서 여러 가지 프로그래밍 언어 실습을 할 수 있는 사이트이다.
여기서 제공하는 실습용 테이블들을 사용할 것이다.
http://https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_editor
W3스쿨즈는 온라인으로 웹 기술을 배우는 교육용 웹 사이트이다. 콘텐츠에는 HTML, CSS, 자바스크립트, JSON,
'Database > SQL' 카테고리의 다른 글
[DB / SQL] DB Join 조인 (left join / right join / inner join / outer join) (0) | 2024.02.22 |
---|---|
[SQL/MariaDB] ALTER TABLE 명령어 정리 (0) | 2023.07.27 |
[SQL/MariaDB] 데이터 추가, 수정, 삭제 (INSERT, UPDATE, DELETE) (0) | 2023.04.20 |
[SQL/MariaDB] Constraints / Table 생성하기 (0) | 2023.04.20 |
[SQL] SQL Data type (0) | 2023.04.20 |