수색…


소개

SELECT 문은 대부분의 SQL 쿼리의 핵심입니다. 쿼리에서 반환해야하는 결과 집합을 정의하며 거의 항상 데이터베이스의 어떤 부분을 쿼리해야하는지 정의하는 FROM 절과 함께 사용됩니다.

통사론

  • SELECT [DISTINCT] [column1] [, [column2] ...]
    FROM [table]
    [WHERE 조건]
    [GROUP BY [column1] [, [column2] ...]

    [HAVING [column1] [, [column2] ...]

    [ASC에 의해 주문 | DESC]

비고

SELECT 는 특정 테이블 에서 반환 할 열의 데이터와 해당 테이블의 순서를 결정 합니다 (쿼리의 다른 요구 사항 (필터 및 조인이있는 위치와 필요 조건).

SELECT Name, SerialNumber
FROM ArmyInfo

NameSerial Number 열의 결과 만 반환하지만 Rank 라는 열의 결과는 반환하지 않습니다 (예 :

SELECT *
FROM ArmyInfo

모든 열이 반환됨을 나타냅니다. 그러나 문자 그대로 테이블의 모든 열을 반환하기 때문에 SELECT * 를 사용하는 것은 바람직하지 않습니다.

와일드 카드 문자를 사용하여 쿼리의 모든 열을 선택합니다.

다음 두 테이블이있는 데이터베이스를 고려하십시오.

직원 테이블 :

신분증 FName LName 부서
1 제임스 스미스
2 남자 존슨 4

학과 표 :

신분증 이름
1 매상
2 마케팅
재원
4 그것

간단한 select 문

* 는 테이블에서 사용 가능한 모든 열을 선택하는 데 사용되는 와일드 카드 문자 입니다.

명시 적 컬럼 이름 대신 사용할 경우, 조회가 FROM 선택하는 모든 테이블의 모든 컬럼을 리턴합니다. 이 효과는 쿼리가 JOIN 절을 통해 액세스하는 모든 테이블에 적용됩니다.

다음 쿼리를 고려하십시오.

SELECT * FROM Employees

Employees 테이블의 모든 행에있는 모든 필드를 반환합니다.

신분증 FName LName 부서
1 제임스 스미스
2 남자 존슨 4

점 표기법

특정 테이블에서 모든 값을 선택하려면 점 표기법 을 사용하여 테이블에 와일드 카드 문자를 적용 할 수 있습니다.

다음 쿼리를 고려하십시오.

SELECT 
    Employees.*, 
    Departments.Name
FROM 
    Employees
JOIN 
    Departments 
    ON Departments.Id = Employees.DeptId

그러면 Employee 테이블의 모든 필드와 함께 Departments 테이블의 Name 필드가있는 데이터 세트가 반환됩니다.

신분증 FName LName 부서 이름
1 제임스 스미스 재원
2 남자 존슨 4 그것

사용에 대한 경고

가능한 경우 프로덕션 코드에서 * 를 사용하면 다음과 같은 잠재적 문제를 유발할 수 있으므로 사용하지 않는 것이 좋습니다.

  1. 데이터베이스 엔진이 필요하지 않은 데이터를 읽고이를 프런트 엔드 코드로 전송하기 때문에 IO, 네트워크로드, 메모리 사용량 초과 등이 발생합니다. 긴 노트 나 첨부 된 파일을 저장하는 데 사용되는 것과 같은 큰 필드가있는 경우 특히주의해야합니다.
  2. SELECT <columns> FROM <table> 보다 복잡한 쿼리 처리의 일부로 데이터베이스가 내부 결과를 디스크에 스풀링해야하는 경우 추가 IO로드가 증가합니다.
  3. 불필요한 열 중 일부가 다음과 같은 경우 추가 처리 (및 / 또는 더 많은 IO)
    • 데이터베이스를 지원하는 계산 된 열
    • 뷰에서 선택하는 경우 쿼리 최적화 프로그램이 달리 최적화 할 수있는 테이블 / 뷰의 열
  4. 테이블이나 뷰에 나중에 열이 추가되어 나중에 모호한 열 이름이 나타나는 경우 예기치 않은 오류가 발생할 수 있습니다. 예를 들어 SELECT * FROM orders JOIN people ON people.id = orders.personid ORDER BY displayname -라는 열 열 경우 displayname 다음 열 이름이 나타납니다 사용자가 주문을 나중에 참조 할 수 있도록 의미있는 이름을 부여 할 수 있도록 주문 테이블에 추가됩니다 오류가 발생할 수있는 ORDER BY 절이 모호하므로 (최근 MS SQL Server 버전에서 "모호한 열 이름")이 예제에서 응용 프로그램 코드에 사람 이름이있는 순서 이름이 표시되기 시작할 수 있습니다 새 열이 반환 된 첫 번째 이름이기 때문에 의도 된 것입니다.

때 당신이 사용할 수있는 * 마음 위의 경고 베어링,?

프로덕션 코드에서 피하는 것이 가장 좋지만 조사 또는 프로토 타입 작업을 위해 데이터베이스에 대해 수동 쿼리를 수행 할 때 * 사용하는 것이 좋습니다.

때로는 응용 프로그램의 결정은 피할 수 있도록 설계 (이러한 상황에서, 선호 tablealias.* 이상 단지 * 가능한 경우).

SELECT A.col1, A.Col2 FROM A WHERE EXISTS (SELECT * FROM B where A.ID = B.A_ID) 와 같이 EXISTS 사용할 경우 SELECT A.col1, A.Col2 FROM A WHERE EXISTS (SELECT * FROM B where A.ID = B.A_ID) 데이터를 반환하지 않습니다. 따라서 조인은 필요하지 않으며 엔진은 B로부터 리턴 된 값이 없다는 것을 알고 있으므로, * 를 사용하면 성능이 저하되지 않습니다. 마찬가지로 COUNT(*) 는 실제로 열을 반환하지 않으므로 필터링 용도로 사용되는 열을 읽고 처리해야하기 때문에 괜찮습니다.

조건으로 선택

WHERE 절이있는 SELECT의 기본 구문은 다음과 같습니다.

SELECT column1, column2, columnN
FROM table_name
WHERE [condition]

[condition] 은>, <, =, <>,> =, <=, LIKE, NOT, IN, BETWEEN 등과 같은 비교 연산자 또는 논리 연산자를 사용하여 지정된 모든 SQL 표현식이 될 수 있습니다.

다음 문은 상태 열이 'READY'인 'Cars'테이블에서 모든 열을 반환합니다.

SELECT * FROM Cars WHERE status = 'READY'

더 많은 예제는 WHERE 및 HAVING 을 참조하십시오.

개별 열 선택

SELECT 
    PhoneNumber, 
    Email, 
    PreferredContact 
FROM Customers

이 문은 Customers 테이블의 모든 행에서 PhoneNumber , EmailPreferredContact 열을 반환합니다. 또한 컬럼은 SELECT 절에 나타나는 순서대로 리턴됩니다.

결과는 다음과 같습니다.

전화 번호 이메일 PreferredContact
3347927472 [email protected] 전화
2137921892 [email protected] 이메일
없는 [email protected] 이메일

여러 테이블이 함께 조인 된 경우 [table_name].[column_name] 테이블 이름 [table_name].[column_name] 열 이름 [table_name].[column_name] 열 이름 앞에 테이블 이름을 지정하여 특정 테이블에서 열을 선택할 수 있습니다 [table_name].[column_name]

SELECT 
    Customers.PhoneNumber, 
    Customers.Email, 
    Customers.PreferredContact,
    Orders.Id AS OrderId
FROM 
    Customers
LEFT JOIN 
    Orders ON Orders.CustomerId = Customers.Id

* AS OrderIdOrders 테이블의 Id 필드가 OrderId 라는 열로 리턴됨을 의미합니다. 자세한 내용 은 열 별칭 을 사용 하여 선택을 참조하십시오.

긴 테이블 이름을 사용하지 않으려면 테이블 별칭을 사용할 수 있습니다. 이렇게하면 조인에서 선택하는 각 필드에 긴 테이블 이름을 쓰는 것이 어려워집니다. 자체 조인 ( 동일한 테이블의 두 인스턴스 간 조인)을 수행하는 경우 테이블 별명을 사용하여 테이블을 구별해야합니다. Customers c 또는 Customers AS c 와 같은 테이블 별칭을 작성할 수 있습니다. 여기서 cCustomers 의 별칭으로 작동하며 다음과 같은 Email 선택하도록 선택할 수 있습니다. c.Email .

SELECT 
    c.PhoneNumber, 
    c.Email, 
    c.PreferredContact,
    o.Id AS OrderId
FROM 
    Customers c
LEFT JOIN 
    Orders o ON o.CustomerId = c.Id

열 별칭을 사용하여 SELECT

열 별칭은 주로 코드를 단축하고 열 이름을보다 읽기 쉽게하기 위해 사용됩니다.

테이블 이름이 길고 불필요한 열 식별 (예 : 테이블에 ID가 2 개 있지만 문에 하나만 사용됨)이 발생하면 코드가 짧아집니다. 테이블 별칭 과 함께이 옵션을 사용하면 데이터베이스 구조에서 설명이 더 긴 이름을 사용하고 해당 구조에 대한 쿼리를 간결하게 유지할 수 있습니다.

또한 계산 된 출력의 이름을 지정하기 위해보기에 필요한 경우가 있습니다.

모든 버전의 SQL

별칭은 큰 따옴표 ( " )를 사용하여 모든 버전의 SQL에서 만들 수 있습니다.

SELECT 
    FName AS "First Name", 
    MName AS "Middle Name",
    LName AS "Last Name"
FROM Employees  

다른 SQL 버전

작은 따옴표 ( ' ), 큰 따옴표 ( " ) 및 대괄호 ( [] )를 사용하여 Microsoft SQL Server에서 별칭을 만들 수 있습니다.

SELECT 
    FName AS "First Name", 
    MName AS 'Middle Name',
    LName AS [Last Name]
FROM Employees  

둘 다 결과 :

이름 중간 이름
제임스 남자 스미스
남자 제임스 존슨
남자 이름 마커스 윌리엄스

이 문은 지정된 이름 (별칭)으로 FNameLName 열을 반환합니다. 이는 별칭이 오는 AS 연산자 또는 열 이름 바로 뒤에 별칭을 쓰는 방법으로 수행됩니다. 즉, 다음 쿼리는 위와 동일한 결과를 나타냅니다.

SELECT 
    FName "First Name", 
    MName "Middle Name",
    LName "Last Name"
FROM Employees 
이름 중간 이름
제임스 남자 스미스
남자 제임스 존슨
남자 이름 마커스 윌리엄스

그러나 명시 적 버전 (즉, AS 연산자 사용)은 더 읽기 쉽습니다.

별칭에 예약어가 아닌 하나의 단어가있는 경우 작은 따옴표, 큰 따옴표 또는 대괄호없이 작성할 수 있습니다.

SELECT 
    FName AS FirstName, 
    LName AS LastName
FROM Employees  
이름
제임스 스미스
남자 존슨
남자 이름 윌리엄스

MS SQL Server에서 사용할 수있는 변형은 <alias> = <column-or-calculation> 입니다. 예를 들면 다음과 같습니다.

SELECT FullName = FirstName + ' ' + LastName, 
       Addr1    = FullStreetAddress,
       Addr2    = TownName
FROM CustomerDetails  

이는 다음과 같습니다.

SELECT FirstName + ' ' + LastName As FullName
       FullStreetAddress          As Addr1,
       TownName                   As Addr2
FROM CustomerDetails  

둘 다 결과 :

FullName Addr1 Addr2
제임스 스미스 123 AnyStreet 타운 빌
존 존슨 668 MyRoad 애니 타운
마이클 윌리엄스 999 하이 엔드 박사 윌리엄스 버그

일부는 사용 찾을 = 대신 As 많은 사람들이이 형식에 대해 권장하지만 그렇게 널리 모든 데이터베이스에서 지원하지 않는 표준 없습니다 주로 때문에, 쉽게 읽을. = 문자의 다른 용도와 혼동을 일으킬 수 있습니다.

모든 SQL 버전

당신이 예약 된 단어를 사용해야하는 경우 또한, 당신은 탈출 괄호 나 따옴표를 사용할 수 있습니다 :

SELECT
    FName as "SELECT",
    MName as "FROM",
    LName as "WHERE"
FROM Employees

다른 SQL 버전

마찬가지로 모든 다른 접근법을 사용하여 MSSQL에서 키워드를 이스케이프 처리 할 수 ​​있습니다.

SELECT 
    FName AS "SELECT", 
    MName AS 'FROM',
    LName AS [WHERE]
FROM Employees  
고르다 에서 어디에
제임스 남자 스미스
남자 제임스 존슨
남자 이름 마커스 윌리엄스

또한 열 별칭은 ORDER BY 와 같은 동일한 쿼리의 마지막 절 중 하나를 사용할 수 있습니다.

SELECT 
    FName AS FirstName, 
    LName AS LastName
FROM 
    Employees 
ORDER BY 
    LastName DESC

그러나, 당신은 사용할 수 없습니다

SELECT
    FName AS SELECT,
    LName AS FROM
FROM 
    Employees
ORDER BY 
    LastName DESC

예약어 ( SELECTFROM )에서 별칭을 만들려면

이로 인해 실행시 많은 오류가 발생합니다.

정렬 된 결과가있는 선택

SELECT * FROM Employees ORDER BY LName

이 명령문은 Employees 테이블의 모든 컬럼을 리턴합니다.

신분증 FName LName 전화 번호
2 남자 존슨 2468101214
1 제임스 스미스 1234567890
남자 이름 윌리엄스 1357911131
SELECT * FROM Employees ORDER BY LName DESC

또는

 SELECT * FROM Employees ORDER BY LName ASC

이 문은 정렬 방향을 변경합니다.

여러 정렬 열을 지정할 수도 있습니다. 예 :

SELECT * FROM Employees ORDER BY LName ASC, FName ASC

이 예제에서는 먼저 LName 결과를 정렬 한 다음 동일한 LName 레코드를 FName 정렬합니다. 그러면 전화 번호부에서 볼 수있는 것과 비슷한 결과를 얻을 수 있습니다.

ORDER BY 절에 열 이름을 다시 입력하는 것을 저장하기 위해 대신 열의 번호를 사용할 수 있습니다. 열 번호는 1부터 시작합니다.

SELECT Id, FName, LName, PhoneNumber FROM Employees ORDER BY 3

CASE 문을 ORDER BY 절에 포함시킬 수도 있습니다.

SELECT Id, FName, LName, PhoneNumber FROM Employees ORDER BY CASE WHEN LName='Jones` THEN 0 ELSE 1 END ASC

이렇게하면 결과가 정렬되어 LName 이 "Jones"인 모든 레코드가 맨 위에 표시됩니다.

예약 된 키워드 다음에 이름이 지정된 열을 선택하십시오.

열 이름이 예약어와 일치하면 표준 SQL에서는 큰 따옴표로 묶어야합니다.

SELECT 
    "ORDER",
    ID 
FROM ORDERS

열 이름은 대소 문자를 구분합니다.

일부 DBMS에는 이름을 인용하는 독점적 인 방법이 있습니다. 예를 들어, SQL Server는 대괄호를 사용하여 다음과 같은 작업을 수행합니다.

SELECT 
    [Order],
    ID 
FROM ORDERS

MySQL (및 MariaDB)은 기본적으로 백틱을 사용합니다.

SELECT 
    `Order`,
    id 
FROM orders

지정된 레코드 수 선택

SQL 2008 표준 은 리턴 된 레코드 수를 제한하기 위해 FETCH FIRST 절을 정의합니다.

SELECT Id, ProductName, UnitPrice, Package 
FROM Product 
ORDER BY UnitPrice DESC
FETCH FIRST 10 ROWS ONLY

이 표준은 일부 RDMS의 최신 버전에서만 지원됩니다. 벤더 특정 비표준 구문은 다른 시스템에서 제공됩니다. 진행 OpenEdge 11.x는 FETCH FIRST <n> ROWS ONLY 구문도 지원합니다.

또한 FETCH FIRST <n> ROWS ONLY 전에 OFFSET <m> ROWS 는 행을 가져 오기 전에 행을 건너 뛸 수 있습니다.

SELECT Id, ProductName, UnitPrice, Package 
FROM Product 
ORDER BY UnitPrice DESC
OFFSET 5 ROWS
FETCH FIRST 10 ROWS ONLY

다음 쿼리는 SQL Server 및 MS Access에서 지원됩니다.

SELECT TOP 10 Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC

MySQL 또는 PostgreSQL에서도 같은 작업을 수행하려면 LIMIT 키워드를 사용해야합니다.

SELECT Id, ProductName, UnitPrice, Package
FROM Product
ORDER BY UnitPrice DESC
LIMIT 10

Oracle에서는 ROWNUM 하여 동일한 작업을 수행 할 수 있습니다.

SELECT Id, ProductName, UnitPrice, Package
FROM Product
WHERE ROWNUM <= 10
ORDER BY UnitPrice DESC    

결과 : 10 기록.

Id    ProductName               UnitPrice             Package
38    Côte de Blaye             263.50                12 - 75 cl bottles
29    Thüringer Rostbratwurst   123.79                50 bags x 30 sausgs.
9    Mishi Kobe Niku            97.00                 18 - 500 g pkgs.
20    Sir Rodney's Marmalade    81.00                 30 gift boxes
18    Carnarvon Tigers          62.50                 16 kg pkg.
59    Raclette Courdavault      55.00                 5 kg pkg.
51    Manjimup Dried Apples     53.00                 50 - 300 g pkgs.
62    Tarte au sucre            49.30                 48 pies
43    Ipoh Coffee               46.00                 16 - 500 g tins
28    Rössle Sauerkraut         45.60                 25 - 825 g cans

공급 업체 뉘앙스 :

Microsoft SQL의 TOPWHERE 절 다음에 작동하며 ROWNUMWHERE 절의 일부로 작동하는 동안 테이블의 어느 위치 에나 존재하는 경우 지정된 수의 결과를 반환하므로 다른 조건이 WHERE 절에 없으면 유의하십시오. 테이블의 시작 부분에 지정된 행 수를 사용하면 다른 행이있을 수있는 경우 결과가 0이됩니다.

테이블 별명으로 선택

SELECT e.Fname, e.LName 
FROM Employees e

Employees 테이블에는 테이블 이름 바로 뒤에 별칭 'e'가 지정됩니다. 이렇게하면 여러 테이블의 필드 이름이 같고 데이터를 반환 할 테이블에 대해 구체적으로 지정해야하는 시나리오에서 모호성을 제거하는 데 도움이됩니다.

SELECT e.Fname, e.LName, m.Fname AS ManagerFirstName 
FROM Employees e 
    JOIN Managers m ON e.ManagerId = m.Id

별칭을 정의한 후에는 더 이상 표준 테이블 이름을 사용할 수 없습니다. 즉,

SELECT e.Fname, Employees.LName, m.Fname AS ManagerFirstName 
FROM Employees e 
JOIN Managers m ON e.ManagerId = m.Id

오류가 발생합니다.

INNER JOIN 인한 중복 열 문제를 해결하기 위해 SQL 언어에 공식적으로 '범위 변수'인 테이블 별칭이 도입되었습니다. 1992 SQL 표준은 NATURAL JOIN (mySQL, PostgreSQL 및 Oracle에서는 구현되었지만 아직 SQL Server에서는 구현되지 않음)을 도입함으로써 초기 설계상의 결함을 수정했으며, 그 결과로 중복 된 열 이름이 생성되지 않았습니다. 위의 예제는 테이블이 다른 이름 ( IdManagerId )이있는 열에 조인되지만 동일한 이름 ( LName , FName )을 가진 열에 조인되지 않아 열의 이름을 변경해야한다는 점에서 흥미 롭습니다 가입 전에 :

SELECT Fname, LName, ManagerFirstName 
FROM Employees
     NATURAL JOIN
     ( SELECT Id AS ManagerId, Fname AS ManagerFirstName
       FROM Managers ) m;

dervied 테이블에 대해 별칭 / 범위 변수를 선언해야하지만 (그렇지 않으면 SQL에서 오류가 발생합니다.) 실제로 쿼리에서 실제로 사용하는 것은 의미가 없습니다.

여러 테이블에서 행 선택

SELECT *
FROM
    table1,
    table2
SELECT
    table1.column1,
    table1.column2,
    table2.column1
FROM
    table1,
    table2

이것은 SQL에서 십자가 (cross product)라고 불리며, 세트 내의 십자가 상품과 동일합니다

이 명령문은 하나의 쿼리에서 여러 테이블의 선택된 열을 반환합니다.

각 테이블에서 리턴 된 컬럼 간에는 특별한 관계가 없습니다.

집계 함수로 선택

평균

AVG() 집계 함수는 선택된 값의 평균을 반환합니다.
SELECT AVG(Salary) FROM Employees
집계 함수는 where 절과 결합 될 수도 있습니다.
SELECT AVG(Salary) FROM Employees where DepartmentId = 1
집계 함수는 group by 절과 결합 할 수도 있습니다.

직원이 여러 부서로 분류되고 모든 부서의 평균 급여를 찾으려면 다음 쿼리를 사용할 수 있습니다.

SELECT AVG(Salary) FROM Employees GROUP BY DepartmentId

최저한의

MIN() 집계 함수는 선택된 최소값을 리턴합니다.
SELECT MIN(Salary) FROM Employees

최고

MAX() 집계 함수는 선택된 최대 값을 반환합니다.
SELECT MAX(Salary) FROM Employees

카운트

COUNT() 집계 함수는 선택된 값의 수를 리턴합니다.
SELECT Count(*) FROM Employees
특정 조건을 만족하는 행 수를 얻기위한 조건과 결합 할 수도 있습니다.
SELECT Count(*) FROM Employees where ManagerId IS NOT NULL
특정 열을 지정하여 열의 값 수를 얻을 수도 있습니다. NULL 값은 계산되지 않습니다.
Select Count(ManagerId) from Employees
Count는 distinct count와 distinct 키워드를 조합하여 사용할 수도 있습니다.
Select Count(DISTINCT DepartmentId) from Employees

합집합

SUM() 집계 함수는 모든 행에 대해 선택된 값의 합계를 반환합니다.
SELECT SUM(Salary) FROM Employees

null로 선택

SELECT Name FROM Customers WHERE PhoneNumber IS NULL

nulls를 사용한 선택은 다른 구문을 사용합니다. = 을 사용하지 말고, 대신 IS NULL 또는 IS NOT NULL 사용하십시오.

CASE로 선택

결과에 'on the fly'로직을 적용해야 할 경우 CASE 문을 사용하여이를 구현할 수 있습니다.

SELECT CASE WHEN Col1 < 50 THEN 'under' ELSE 'over' END threshold
FROM TableName 

또한 쇠사슬로 묶일 수있다.

SELECT 
    CASE WHEN Col1 < 50 THEN 'under' 
         WHEN Col1 > 50 AND Col1 <100 THEN 'between' 
         ELSE 'over' 
    END threshold
FROM TableName 

또한 다른 CASE 문 안에 CASE 를 가질 수 있습니다.

SELECT 
    CASE WHEN Col1 < 50 THEN 'under' 
         ELSE 
            CASE WHEN Col1 > 50 AND Col1 <100 THEN Col1 
            ELSE 'over' END 
    END threshold
FROM TableName 

테이블을 잠그지 않고 선택

때로는 테이블이 대부분 읽기 전용으로 사용되는 경우 인덱싱이 더 이상 도움이되지 않고 모든 작은 비트가 중요 할 때 LOCK없이 select를 사용하여 성능을 향상시킬 수 있습니다.


SQL 서버

SELECT * FROM TableName WITH (nolock)

MySQL

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TableName;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

신탁

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TableName;

DB2

SELECT * FROM TableName WITH UR;

여기서 UR 은 "커밋되지 않은 읽기"를 나타냅니다.


레코드 수정 사항이있는 테이블에서 사용하면 예기치 않은 결과가 발생할 수 있습니다.

고유 한 값 선택 (고유 값만)

SELECT DISTINCT ContinentCode
FROM Countries;

이 쿼리는 Countries 테이블에서 ContinentCode 열의 모든 DISTINCT (고유 한 다른 값)을 반환합니다.

대륙 코드
OC
유럽 ​​연합
같이
없음
AF

SQLFiddle 데모

열에서 여러 값의 조건으로 선택하십시오.

SELECT * FROM Cars  WHERE status IN ( 'Waiting', 'Working' )

이것은 의미 론적으로 동일하다.

SELECT * FROM Cars  WHERE ( status = 'Waiting' OR status = 'Working' )

즉, value IN ( <value list> ) 은 분리 (논리 OR )의 약자입니다.

행 그룹에 대해 집계 된 결과 가져 오기

특정 열 값을 기반으로 행 계산 :

SELECT category, COUNT(*) AS item_count
FROM item
GROUP BY category;

부서별 평균 소득 얻기 :

SELECT department, AVG(income)
FROM employees
GROUP BY department;

중요한 것은 GROUP BY 절에 지정된 열만 선택하거나 집계 함수 와 함께 사용하는 입니다.


WHERE 절은으로도 사용할 수 있습니다 GROUP BY 하지만, WHERE 어떤 그룹이 완료되기 전에 기록을 필터링 :

SELECT department, AVG(income)
FROM employees
WHERE department <> 'ACCOUNTING'
GROUP BY department;

그룹화가 완료된 후 결과를 필터링해야하는 경우 (예 : 평균 수입이 1000 인 부서 만 보려는 경우) HAVING 절을 사용해야합니다.

SELECT department, AVG(income)
FROM employees
WHERE department <> 'ACCOUNTING'
GROUP BY department
HAVING avg(income) > 1000;

둘 이상의 조건으로 선택.

AND 키워드는 쿼리에 조건을 추가하는 데 사용됩니다.

이름 나이 성별
18
남자 21
단발 22
메리 23 에프
SELECT name FROM persons WHERE gender = 'M' AND age > 20;

그러면 다음과 같이 반환됩니다.

이름
남자
단발

OR 키워드 사용

SELECT name FROM persons WHERE gender = 'M' OR age < 20;

그러면 다음과 같이 반환됩니다.

이름
남자
단발

다음 키워드를 조합하면보다 복잡한 기준 조합을 허용 할 수 있습니다.

SELECT name
FROM persons
WHERE (gender = 'M' AND age < 20)
   OR (gender = 'F' AND age > 20);

그러면 다음과 같이 반환됩니다.

이름
메리


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