SELECT 특성 or wildcards
FROM 테이블;
SELECT 특성 or Wildcards
FROM 테이블
WHERE 특성 (조건) '값';
ex)
SELECT c.FirstName
FROM customers c
WHERE c.FirstName = 'Sponge';
SELECT i.InvoiceId
FROM invoices i
WHERE i.BillingCity IN ('Stuttgart', 'Oslo', 'Redmond')
리스트의 값들과 일치하는 데이터를 필터할 때 사용
NULL
과 같은 경우를 찾을 때에는 IS
를 사용SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL;
ex)
SELECT *
FROM employees e
WHERE e.ReportsTo IS NULL;
값이 없는 경우를 제외할 때는 IS NOT
을 사용
SELECT a.Name
FROM artists a
WHERE a.Name LIKE '%the%';
text%
일 경우 모든 문자열 중 지정 text로 시작하는 문자열
%text
일 경우 모든 문자열중 지정 text로 끝나는 문자열
%text%
일 경우 문자열을 포함하는 모든 문자
% 대신 ?
를 쓸 경우 all 에서 +1
ex) 김? -> 김신, 김준 NOT 김시원, 김준표
SELECT *
FROM 테이블
ORDER BY 특성;
ex)
SELECT *
FROM employees e
ORDER BY e.EmployeeId;
기본 정렬은 오름차순 정렬
SELECT *
FROM employees e
ORDER BY e.EmployeeId DESC;
돌려받는 데이터의 갯수를 지정
SELECT *
FROM 테이블
LIMIT 돌려받고 싶은 개수;
ex)
SELECT *
FROM employees
LIMIT 10;
중복값을 제외한 값을 돌려줌
SELECT DISTINCT 특성
FROM 테이블;
SELECT DISTINCT 특성_1, 특성_2, 특성_3
FROM 테이블;
INNER JOIN
or JOIN
으로 사용 가능SELECT *
FROM 테이블
JOIN 테이블_2 ON 테이블_1.특성 = 테이블_2.특성;
ex)
SELECT a2.AlbumId
FROM artists a
JOIN albums a2 ON a.ArtistId = a2.ArtistId;
LEFT INCLUSIVE = LEFT OUTER JOIN
SELECT *
FROM 테이블
LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성 = 테이블_2.특성;
RIGHT INCLUSIVE = RIGHT OUTER JOIN
SELECT *
FROM 테이블
RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성 = 테이블_2.특성;
FULL OUTER JOIN
SELECT *
FROM 테이블
FULL OUTER JOIN 테이블_2 ON 테이블_1.특성 = 테이블_2.특성;
sqlite 에서는 RIGHT OUTER JOIN / FULL OUTER JOIN 을 지원하지 않기 때문에 순서를 바꾸어 LEFT JOIN 을 이용하는 방법을 사용
sql lite chinook.db tutorial을 사용한 예제입니다.
SELECT a2.AlbumId
FROM artists a
JOIN albums a2 ON a.ArtistId = a2.ArtistId
WHERE a.Name LIKE '%the%';
SELECT t.TrackId
FROM tracks t
WHERE t.Name LIKE 'The%';
SELECT c.CustomerId
FROM customers c
WHERE c.Email LIKE '%gmail.com';
SELECT InvoiceId
FROM invoices i
WHERE i.CustomerId IN (29, 30, 63)
AND i.Total >= 1.00
AND i.Total <= 3.00;
SELECT count(c.CustomerId) AS 'The_Num_of_customers_X_Country'
FROM customers c
Group BY c.Country
SELECT c.CustomerId
FROM customers c
JOIN invoices i
ON c.CustomerId = i.CustomerId
GROUP BY c.CustomerId
HAVING SUM(i.Total)
ORDER BY SUM(i.Total) DESC
LIMIT 5;
'genre_name'
칼럼과 구매한 고객수를 표시하는 'The_Number_of_customer_ID'
칼럼이 있어야 함SELECT g.Name as 'Genre_name',
count(DISTINCT c.CustomerId) as 'The Number of customer_ID'
FROM customers c
JOIN invoices i ON c.CustomerId = i.CustomerId
JOIN invoice_items ii ON i.InvoiceId = ii.InvoiceId
JOIN tracks t ON ii.TrackId = t.TrackId
JOIN genres g ON t.GenreId = g.GenreId
GROUP BY g.Name;