logo

SQL 절

  • SQL 절은 테이블에서 레코드 세트 또는 묶음을 검색하는 데 도움이 됩니다.
  • SQL 절은 테이블의 열이나 레코드에 대한 조건을 지정하는 데 도움이 됩니다.

구조적 쿼리 언어에서 사용할 수 있는 다양한 절은 다음과 같습니다.

  1. WHERE 조항
  2. 조항별 그룹
  3. 조항을 가지고
  4. 조항별 주문

예를 들어 각 조항을 하나씩 살펴보겠습니다. 예제에서는 쿼리를 작성하기 위해 MySQL 데이터베이스를 사용합니다.

1. WHERE 조항

SQL의 WHERE 절은 데이터 조작 언어 명령 중 하나인 SELECT 쿼리와 함께 사용됩니다. WHERE 절을 사용하여 결과 집합에 표시할 행 수를 제한할 수 있으며 일반적으로 레코드를 필터링하는 데 도움이 됩니다. WHERE 절의 특정 조건을 충족하는 쿼리만 반환합니다. WHERE 절은 SELECT, UPDATE, DELETE 문 등에 사용됩니다.

SELECT 쿼리가 포함된 WHERE 절

별표 기호는 SELECT 쿼리의 WHERE 절과 함께 사용되어 테이블의 모든 레코드에 대한 모든 열 값을 검색합니다.

테이블의 모든 레코드에 대한 모든 열 값을 검색하기 위한 선택 쿼리가 포함된 where 절의 구문:

 SELECT * FROM TABLENAME WHERE CONDITION; 

요구 사항에 따라 선택적 열만 검색하려는 경우 아래 구문을 사용합니다.

 SELECT COLUMNNAME1, COLUMNNAME2 FROM TABLENAME WHERE CONDITION; 

다음 데이터가 포함된 직원 테이블을 생각해 보세요.

E_ID 이름 샐러리 도시 지정 날짜_가입_가입 나이
1 삭시 쿠마리 50000 뭄바이 프로젝트 매니저 2021-06-20 24
2 테자스위니 나익 75000 델리 시스템 엔지니어 2019-12-24 23
아누자 샤르마 40000 자이푸르 관리자 2021-08-15 26
4 아누쉬카 트리파티 90000 뭄바이 소프트웨어 테스터 2021-06-13 24
5 루차 작탑 45000 방갈로르 프로젝트 매니저 2020-08-09 23
6 루투자 데쉬무크 60000 방갈로르 관리자 2019-07-17 26
7 바비스카의 목소리 55000 자이푸르 시스템 엔지니어 2021-10-10 24
8 셰이크가 있어요 45000 푸네 소프트웨어 엔지니어 2020-09-10 26
9 스와티 쿠마리 50000 푸네 소프트웨어 테스터 2021-01-01 25
10 마유리 파텔 60000 뭄바이 프로젝트 매니저 2020-10-02 24
열하나 심란 칸나 45500 콜라푸르 HR 2019-01-02 26
12 시바니 와그 50500 델리 소프트웨어 개발자 2016-09-10 25
13 키란 마헤스와리 50000 나시크 HR 2013-12-12 23
14 테잘 자인 40000 델리 프로젝트 매니저 2017-11-10 25
열 다섯 모히니 샤 38000 푸네 소프트웨어 개발자 2019-03-05 이십

예시 1:

직원 급여가 50000보다 큰 직원의 모든 레코드를 검색하는 쿼리를 작성하세요.

질문:

 mysql> SELECT * FROM employees WHERE Salary > 50000; 

위 쿼리는 직원의 급여가 50000보다 큰 직원의 모든 기록을 표시합니다. 급여가 50000 미만인 경우 조건에 따라 표시되지 않습니다.

다음과 같은 결과가 출력됩니다.

SQL 절

예상 출력에 따라 직원의 급여가 50000보다 큰 레코드만 표시됩니다. 직원 테이블에는 주어진 조건을 만족하는 6개의 레코드가 있습니다.

예 2:

직원의 기록을 업데이트하는 쿼리를 작성하고 업데이트된 이름을 직원의 도시 이름이 Jaipur인 'Harshada Sharma'로 설정합니다.

질문:

파이썬 __dict__
 mysql> UPDATE employees SET Name = 'Harshada Sharma' WHERE City = 'Jaipur'; 

SQL 절

위 쿼리는 직원의 도시가 Jaipur인 'Harshada Sharma'로 직원의 이름을 업데이트합니다.

레코드가 업데이트되었는지 여부를 확인하기 위해 선택 쿼리를 실행합니다.

 mysql> SELECT * FROM employees; 

SQL 절

직원의 도시가 'Jaipur'인 직원 테이블에는 레코드가 하나만 있습니다. 레코드의 ID는 3이며, 이는 주어진 조건을 만족합니다. 따라서 주어진 조건에 따라 직원 ID가 3인 직원의 이름은 이제 'Harshada Sharma'로 변경됩니다.

예시 3:

입사일이 '2013-12-12'인 직원의 기록을 삭제하는 쿼리를 작성해보세요.

질문:

 mysql> DELETE FROM employees WHERE Date_of_Joining = '2013-12-12'; 

SQL 절

위 쿼리는 입사일이 '2013-12-12'인 직원의 직원 정보를 삭제합니다.

위 쿼리의 결과를 확인하기 위해 선택 쿼리를 실행하겠습니다.

 mysql> SELECT *FROM employees; 

SQL 절

직원 테이블에는 직원의 입사 날짜가 '2013-12-12'인 레코드가 하나만 있습니다. 레코드의 ID는 13이며, 이는 주어진 조건을 만족합니다. 따라서 주어진 조건에 따라 직원 ID가 13인 직원이 이제 직원 테이블에서 삭제됩니다.

2. 조항별 그룹화

Group By 절은 유사한 종류의 레코드를 구조적 쿼리 언어의 그룹으로 정렬하는 데 사용됩니다. 구조적 쿼리 언어의 Group by 절은 Select 문과 함께 사용됩니다. Group by 절은 SQL 문의 where 절 뒤에 배치됩니다. Group By 절은 특히 max(), min(), avg(), sum(), count()와 같은 집계 함수와 함께 사용되어 하나 이상의 열을 기준으로 결과를 그룹화합니다.

Group By 절의 구문은 다음과 같습니다.

 SELECT * FROM TABLENAME GROUP BY COLUMNNAME; 

위 구문은 테이블에서 모든 데이터 또는 레코드를 선택하지만 쿼리에 제공된 열 이름을 기반으로 그룹의 모든 데이터 또는 레코드를 정렬합니다.

집계 함수가 포함된 Group By 절의 구문은 다음과 같습니다.

 SELECT COLUMNNAME1, Aggregate_FUNCTION (COLUMNNAME) FROM TABLENAME GROUP BY COLUMNNAME; 

예제를 통해 Group By 절을 이해해 보겠습니다.

다음 데이터가 포함된 직원 테이블을 생각해 보세요.

E_ID 이름 샐러리 도시 지정 날짜_가입_가입 나이
1 삭시 쿠마리 50000 뭄바이 프로젝트 매니저 2021-06-20 24
2 테자스위니 나익 75000 델리 시스템 엔지니어 2019-12-24 23
아누자 샤르마 40000 자이푸르 관리자 2021-08-15 26
4 아누쉬카 트리파티 90000 뭄바이 소프트웨어 테스터 2021-06-13 24
5 루차 작탑 45000 방갈로르 프로젝트 매니저 2020-08-09 23
6 루투자 데쉬무크 60000 방갈로르 관리자 2019-07-17 26
7 바비스카의 목소리 55000 자이푸르 시스템 엔지니어 2021-10-10 24
8 셰이크가 있어요 45000 푸네 소프트웨어 엔지니어 2020-09-10 26
9 스와티 쿠마리 50000 푸네 소프트웨어 테스터 2021-01-01 25
10 마유리 파텔 60000 뭄바이 프로젝트 매니저 2020-10-02 24
열하나 심란 칸나 45500 콜라푸르 HR 2019-01-02 26
12 시바니 와그 50500 델리 소프트웨어 개발자 2016-09-10 25
13 키란 마헤스와리 50000 나시크 HR 2013-12-12 23
14 테잘 자인 40000 델리 프로젝트 매니저 2017-11-10 25
열 다섯 모히니 샤 38000 푸네 소프트웨어 개발자 2019-03-05 이십

예시 1:

직원 테이블의 모든 기록을 표시하되 연령 열을 기준으로 결과를 그룹화하는 쿼리를 작성하세요.

질문:

 mysql> SELECT * FROM employees GROUP BY Age; 

위 쿼리는 직원 테이블의 모든 기록을 연령 열별로 그룹화하여 표시합니다.

다음과 같은 결과가 출력됩니다.

SQL 절

예 2:

직원 테이블의 모든 기록을 직위와 급여별로 그룹화하여 출력하는 쿼리를 작성하세요.

질문:

 mysql> SELECT * FROM employees GROUP BY Salary, Designation; 

위 쿼리는 직원 테이블의 모든 레코드를 급여 및 지정 열별로 그룹화하여 표시합니다.

다음과 같은 결과가 출력됩니다.

SQL 절

집계 함수를 사용하는 Group By 절의 예

예시 1:

특정 직무에 근무하는 직원 수를 나열하고 해당 직원의 직무별로 결과를 그룹화하는 쿼리를 작성하세요.

질문:

 mysql> SELECT COUNT (E_ID) AS Number_of_Employees, Designation FROM employees GROUP BY Designation; 

위의 쿼리는 해당 지정에 대해 작업하는 직원의 수와 함께 지정을 표시합니다. 이러한 모든 결과는 지정 열을 기준으로 그룹화됩니다.

다음과 같은 결과가 출력됩니다.

SQL 절

예상 출력에 따라 해당 직원 수와 함께 지정이 표시됩니다.

예 2:

직원의 연령별로 그룹화된 도시별로 직원의 급여 합계를 표시하는 쿼리를 작성하세요.

질문:

 mysql> SELECT SUM (Salary) AS Salary, City FROM employees GROUP BY City; 

위 쿼리는 먼저 각 도시에서 근무하는 급여 합계를 계산한 다음 해당 급여와 함께 급여 합계를 연령 열별로 그룹화하여 표시합니다.

다음과 같은 결과가 출력됩니다.

SQL 절

예상 출력에 따라 직원이 속한 도시에 따른 직원 급여의 합계가 표시됩니다. 두 명의 직원이 같은 도시에 속해 있으면 하나의 그룹에 속하게 됩니다.

3. 조항:

테이블 열에 조건을 배치해야 할 경우 SQL에서 WHERE 절을 사용합니다. 그러나 당시 Group By 절의 열에 조건을 사용하려면 열 조건에 Group By 절과 함께 HAVING 절을 사용합니다.

통사론:

 TABLENAME GROUP BY COLUMNNAME HAVING CONDITION; 

다음 데이터가 포함된 직원 테이블을 생각해 보세요.

E_ID 이름 샐러리 도시 지정 날짜_가입_가입 나이
1 삭시 쿠마리 50000 뭄바이 프로젝트 매니저 2021-06-20 24
2 테자스위니 나익 75000 델리 시스템 엔지니어 2019-12-24 23
아누자 샤르마 40000 자이푸르 관리자 2021-08-15 26
4 아누쉬카 트리파티 90000 뭄바이 소프트웨어 테스터 2021-06-13 24
5 루차 작탑 45000 방갈로르 프로젝트 매니저 2020-08-09 23
6 루투자 데쉬무크 60000 방갈로르 관리자 2019-07-17 26
7 바비스카의 목소리 55000 자이푸르 시스템 엔지니어 2021-10-10 24
8 셰이크가 있어요 45000 푸네 소프트웨어 엔지니어 2020-09-10 26
9 스와티 쿠마리 50000 푸네 소프트웨어 테스터 2021-01-01 25
10 마유리 파텔 60000 뭄바이 프로젝트 매니저 2020-10-02 24
열하나 심란 칸나 45500 콜라푸르 HR 2019-01-02 26
12 시바니 와그 50500 델리 소프트웨어 개발자 2016-09-10 25
13 키란 마헤스와리 50000 나시크 HR 2013-12-12 23
14 테잘 자인 40000 델리 프로젝트 매니저 2017-11-10 25
열 다섯 모히니 샤 38000 푸네 소프트웨어 개발자 2019-03-05 이십

예시 1:

직원의 이름, 급여, 직원의 최대 급여가 40000보다 큰 도시를 표시하고 결과를 지정별로 그룹화하는 쿼리를 작성하세요.

질문:

 mysql> SELECT Name, City, MAX (Salary) AS Salary FROM employees GROUP BY Designation HAVING MAX (Salary) > 40000; 

다음과 같은 결과가 출력됩니다.

SQL 절

위의 출력은 직원 급여가 40000보다 큰 직원의 직원 이름, 급여 및 도시를 지정별로 그룹화한 것을 보여줍니다. (유사한 명칭을 가진 직원은 한 그룹에 배치되고, 다른 명칭을 가진 직원은 별도로 배치됩니다.)

예 2:

직원의 급여 합계가 45000보다 큰 직원의 이름과 명칭을 표시하고 결과를 도시별로 그룹화하는 쿼리를 작성하세요.

질문:

 mysql> SELECT Name, Designation, SUM (Salary) AS Salary FROM employees GROUP BY City HAVING SUM (Salary) > 45000; 

다음과 같은 결과가 출력됩니다.

SQL 절

위 출력에는 직원의 이름, 직위, 급여가 표시됩니다. 급여 합계는 도시별로 그룹화하면 45000보다 큽니다. (비슷한 도시의 직원은 한 그룹에 배치되고, 유사하지 않은 도시의 직원은 별도로 배치됩니다.)

4. 조항별 주문

SQL에서 무엇이든 정렬하고 싶을 때마다 ORDER BY 절을 사용합니다. SQL의 ORDER BY 절은 테이블의 특정 열을 기반으로 데이터를 정렬하는 데 도움이 됩니다. 이는 ORDER BY 절을 실행하는 특정 열에 저장된 모든 데이터가 정렬된다는 의미입니다. 해당 열 값은 이전 단계에서 값을 얻은 순서대로 표시됩니다.

우리 모두 알고 있듯이 정렬은 오름차순 또는 내림차순을 의미합니다. 같은 방식으로 ORDER BY CLAUSE는 요구 사항에 따라 데이터를 오름차순 또는 내림차순으로 정렬합니다. 데이터는 다음과 같이 오름차순으로 정렬됩니다. ASC 키워드 ORDER by 절과 함께 사용되며 DESC 키워드 레코드를 내림차순으로 정렬합니다.

기본적으로 정렬 순서를 언급하지 않은 경우 SQL 정렬은 ORDER BY 절을 사용하여 ASCENDING 순서로 수행됩니다.

레코드를 정렬하는 ORDER BY 절의 예제로 넘어가기 전에 먼저 구문을 살펴보고 예제를 쉽게 살펴볼 수 있습니다.

asc 및 desc 키워드가 없는 ORDER BY 절의 구문:

 SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMNAME; 

오름차순으로 정렬하기 위한 ORDER BY 절의 구문:

 SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME ASC; 

내림차순으로 정렬하기 위한 ORDER BY 절의 구문:

 SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME DESC; 

다음 데이터가 포함된 직원 테이블이 있다고 가정해 보겠습니다.

E_ID 이름 샐러리 도시 지정 날짜_가입_가입 나이
1 삭시 쿠마리 50000 뭄바이 프로젝트 매니저 2021-06-20 24
2 테자스위니 나익 75000 델리 시스템 엔지니어 2019-12-24 23
아누자 샤르마 40000 자이푸르 관리자 2021-08-15 26
4 아누쉬카 트리파티 90000 뭄바이 소프트웨어 테스터 2021-06-13 24
5 루차 작탑 45000 방갈로르 프로젝트 매니저 2020-08-09 23
6 루투자 데쉬무크 60000 방갈로르 관리자 2019-07-17 26
7 바비스카의 목소리 55000 자이푸르 시스템 엔지니어 2021-10-10 24
8 셰이크가 있어요 45000 푸네 소프트웨어 엔지니어 2020-09-10 26
9 스와티 쿠마리 50000 푸네 소프트웨어 테스터 2021-01-01 25
10 마유리 파텔 60000 뭄바이 프로젝트 매니저 2020-10-02 24
열하나 심란 칸나 45500 콜라푸르 HR 2019-01-02 26
12 시바니 와그 50500 델리 소프트웨어 개발자 2016-09-10 25
13 키란 마헤스와리 50000 나시크 HR 2013-12-12 23
14 테잘 자인 40000 델리 프로젝트 매니저 2017-11-10 25
열 다섯 모히니 샤 38000 푸네 소프트웨어 개발자 2019-03-05 이십

예시 1:

직원 테이블에서 직원 지정의 오름차순으로 레코드를 정렬하는 쿼리를 작성하세요.

질문:

 mysql> SELECT * FROM employees ORDER BY Designation; 

여기 SELECT 쿼리에서는 '지정' 컬럼에 ORDER BY 절을 적용하여 레코드를 정렬했지만, 오름차순 정렬을 위해 ORDER BY 절 뒤에 ASC 키워드를 사용하지 않았습니다. 따라서 asc 키워드를 지정하지 않으면 기본적으로 데이터가 오름차순으로 정렬됩니다.

다음과 같은 결과를 얻게 됩니다:

SQL 절

예상되는 출력에 따라 레코드는 직원 지정의 오름차순으로 표시됩니다.

예 2:

직원 테이블에서 직원의 이름과 급여를 급여의 오름차순으로 표시하는 쿼리를 작성하세요.

질문:

 mysql> SELECT Name, Salary FROM employees ORDER BY Salary ASC; 

여기 SELECT 쿼리에서는 'Salary' 열에 ORDER BY 절을 적용하여 레코드를 정렬합니다. 직원의 급여를 오름차순으로 정렬하기 위해 ASC 키워드를 사용했습니다.

다음과 같은 결과가 출력됩니다.

SQL 절

모든 기록은 사원 급여의 오름차순으로 표시됩니다.

예시 3:

직원 테이블에 저장된 직원 이름의 내림차순으로 데이터를 정렬하는 쿼리를 작성하세요.

질문:

 mysql> SELECT * FROM employees ORDER BY Name DESC; 

여기서는 Name 열에 SELECT 쿼리를 적용한 ORDER BY 절을 사용하여 데이터를 정렬했습니다. 데이터를 내림차순으로 정렬하기 위해 ORDER BY 절 뒤에 DESC 키워드를 사용했습니다.

다음과 같은 결과가 출력됩니다.

SQL 절

모든 기록은 직원 이름의 내림차순으로 표시됩니다.