수색…


통사론

  • SELECT column_name
    FROM table_name
    WHERE column_name 연산자 값
  • SELECT column_name, aggregate_function (column_name)
    FROM table_name
    GROUP BY column_name
    aggregate_function (column_name) 연산자 값이 있음

WHERE 절은 조건과 일치하는 행만 반환합니다.

Steam에는 상점 페이지의 10 달러 섹션 아래에 게임이 있습니다. 시스템의 중심부 어딘가에 아마도 다음과 같은 쿼리가있을 것입니다.

SELECT * 
FROM Items 
WHERE Price < 10

IN을 사용하여 목록에 포함 된 값이있는 행을 반환합니다.

이 예제는 예제 데이터베이스의 Car Table 을 사용합니다.

SELECT *
FROM Cars
WHERE TotalCost IN (100, 200, 300)

이 쿼리는 비용이 200 인 Car # 2와 100 인 Car # 3을 반환합니다. 이는 OR 여러 절을 사용하는 것과 같습니다. 예 :

SELECT *
FROM Cars
WHERE TotalCost = 100 OR TotalCost = 200 OR TotalCost = 300

LIKE를 사용하여 일치하는 문자열 및 하위 문자열을 찾습니다.

LIKE 연산자에 대한 전체 설명서를 참조하십시오.

이 예제에서는 예제 데이터베이스의 Employees 테이블 을 사용합니다.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

이 쿼리는 첫 번째 이름이 'John'과 정확히 일치하는 Employee # 1 만 반환합니다.

SELECT *
FROM Employees
WHERE FName like 'John%'

% 추가하면 하위 문자열을 검색 할 수 있습니다.

  • John% - 이름이 'John'으로 시작하고 그 뒤에 임의의 문자가 오는 Employee를 반환합니다.
  • %John - 이름이 'John'으로 끝나고 모든 문자 수만큼 진행되는 Employee를 반환합니다.
  • %John% - 이름에 'John'이 포함 된 Employee를 반환합니다.

이 경우 쿼리는 이름이 'John'인 Employee # 2와 이름이 'Johnathon'인 Employee # 4를 반환합니다.

NULL / NOT NULL 값이있는 WHERE 절

SELECT *
FROM Employees
WHERE ManagerId IS NULL

이 명령.은 ManagerId 컬럼 값이 NULL 모든 Employee 레코드를 리턴 NULL .

결과는 다음과 같습니다.

Id    FName    LName    PhoneNumber    ManagerId    DepartmentId
1     James    Smith    1234567890     NULL         1

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

이 명령문은 ManagerId 값이 NULL아닌 모든 Employee 레코드를 리턴 NULL .

결과는 다음과 같습니다.

Id    FName       LName     PhoneNumber    ManagerId    DepartmentId
2     John        Johnson   2468101214     1            1
3     Michael     Williams  1357911131     1            2
4     Johnathon   Smith     1212121212     2            1

참고 : WHERE 절을 WHERE ManagerId = NULL 또는 WHERE ManagerId <> NULL 변경하면 동일한 쿼리가 결과를 반환하지 않습니다.

집계 함수와 HAVING 사용

WHERE 절과 달리 HAVING 은 집계 함수와 함께 사용할 수 있습니다.

집계 함수는 더 중요한 의미 또는 측정 ( Wikipedia )의 단일 값을 형성하기 위해 여러 행의 값이 특정 기준의 입력으로 함께 그룹화되는 기능입니다.

일반적인 집계 함수에는 COUNT() , SUM() , MIN()MAX() 있습니다.


이 예제는 예제 데이터베이스의 Car Table 을 사용합니다.

SELECT CustomerId, COUNT(Id) AS [Number of Cars]
FROM Cars
GROUP BY CustomerId
HAVING COUNT(Id) > 1

이 쿼리는 둘 이상의 자동차를 보유한 고객의 CustomerIdNumber of Cars 개수를 반환합니다. 이 경우 두 대 이상의 고객이있는 유일한 고객은 고객 # 1입니다.

결과는 다음과 같습니다.

고객 ID 자동차 수
1 2

BETWEEN을 사용하여 결과 필터링

다음 예제에서는 Item SalesCustomers 샘플 데이터베이스를 사용합니다.

주 : BETWEEN 연산자 포함됩니다.

Numbers에서 BETWEEN 연산자 사용 :

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

이 쿼리는 수량이 10보다 크고 17보다 작거나 같은 모든 ItemSales 레코드를 반환합니다. 결과는 다음과 같습니다.

신분증 판매 날짜 ItemId 수량 가격
1 2013-07-01 100 10 34.5
4 2013-07-23 100 15 명 34.5
5 2013 년 7 월 24 일 145 10 34.5

날짜 값에 BETWEEN 연산자 사용 :

SELECT * From ItemSales
WHERE SaleDate BETWEEN '2013-07-11' AND '2013-05-24'

이 쿼리는 2013 년 7 월 11 일보다 크거나 2013 년 5 월 24 일 이하의 SaleDate 를 가진 모든 ItemSales 레코드를 반환합니다.

신분증 판매 날짜 ItemId 수량 가격
2013-07-11 100 20 34.5
4 2013-07-23 100 15 명 34.5
5 2013 년 7 월 24 일 145 10 34.5

날짜 대신 datetime 값을 비교할 때 datetime 값을 날짜 값으로 변환하거나 올바른 결과를 얻으려면 24 시간을 더하거나 뺄 필요가 있습니다.


텍스트 값에 BETWEEN 연산자 사용 :

SELECT Id, FName, LName FROM Customers
WHERE LName BETWEEN 'D' AND 'L';

실례 : SQL 바이올린

이 쿼리는 알파벳순으로 'D'와 'L'사이에 이름이있는 모든 고객을 반환합니다. 이 경우 고객 # 1과 고객 # 3이 반환됩니다. 이름이 'M'으로 시작하는 고객 # 2는 포함되지 않습니다.

신분증 FName LName
1 윌리엄 존스
리차드 데이비스

평등

SELECT * FROM Employees 

이 명령.은 Employees 테이블에서 모든 행을 리턴합니다.

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

SELECT 문의 끝에 WHERE 를 사용하면 리턴 된 행을 조건으로 제한 할 수 있습니다. 이 경우 = 기호를 사용하여 정확히 일치하는 위치 :

SELECT * FROM Employees WHERE DepartmentId = 1

DepartmentId1 행만 반환합니다.

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

AND 및 OR

더 복잡한 WHERE 조건을 생성하기 위해 여러 연산자를 결합 할 수도 있습니다. 다음 예제에서는 Employees 테이블을 사용합니다.

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

SELECT * FROM Employees WHERE DepartmentId = 1 AND ManagerId = 1

돌아올 것입니다 :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002

또는

SELECT * FROM Employees WHERE DepartmentId = 2 OR ManagerId = 2

돌아올 것입니다 :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

HAVING을 사용하여 그룹의 여러 조건을 확인하십시오.

주문 표

고객 ID 제품 ID 수량 가격
1 2 5 100
1 2 200
1 4 1 500
2 1 4 50 개
5 6 700

ProductID 2와 3을 모두 주문한 고객을 확인하려면 HAVING을 사용할 수 있습니다

 select customerId
 from orders
 where productID in (2,3)
 group by customerId
 having count(distinct productID) = 2

반환 값 :

고객 ID
1

쿼리는 질문에 productID가있는 레코드 만 선택하고 HAVING 절을 사용하면 두 개 뿐인 productIds가있는 그룹에 대해 HAVING 절을 검사합니다.

또 다른 가능성은

 select customerId
 from orders
 group by customerId
 having sum(case when productID = 2 then 1 else 0 end) > 0
    and sum(case when productID = 3 then 1 else 0 end) > 0

이 쿼리는 productID가 2이고 productID가 3 인 레코드가 적어도 하나있는 그룹 만 선택합니다.

존재하는 곳

레코드 선택하게됩니다 TableName 에 일치하는 기록이 TableName1 .

SELECT * FROM TableName t WHERE EXISTS (
    SELECT 1 FROM TableName1 t1 where t.Id = t1.Id)


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow