AI 시대를 향유하는 AI 노마더

자바&Springboot플랫폼 과정/MariaDB

CHECK/GROUP BY/DISTINCT와 세부검색 그리고 게임만들기

AI노마더 2023. 11. 30. 17:51

오늘의 구문

 

 

GROUP BY구문 활용

  • 이 구문은 SQL에서 데이터를 특정 칼럼의 값에 따라 그룹화하기 위해 사용된다. 
  • 주로 집계함수와 함께 사용되고, 각 그룹에 대한 합계, 평균, 카운트, 최대값, 최소값등을 계산할 때 유용하다.

예시

  • 직원들 중 성별이 'M'인 사람들의 수를 계산하고 성별별로 그룹화 하시오
SELECT gender, COUNT(gender) FROM employees GROUP BY gender HAVING gender = 'm' ;

 

  • 130000명이 이상인 그룹을 선택하고 그 수를 계산하시오.
SELECT gender, COUNT(gender) FROM employees GROUP BY gender HAVING COUNT(gender) > 130000;

 

 

DISTINCT 구문

  • 테이블에서 중복된 레코드를 제거하고 고유한 레코드만을 섡택하는 데 사용된다.
  • 특정 칼럼에 어떤 다양한 값들이 존재하는지 파악할 때 유용하다. 

예시

  • emolyees테이블에서 어떤 부서들이 있는지 나열하되 중복되지 않게 하시오.
SELECT DISTINCT department FROM employees;

 

 

 

CHECK 구문

  • 테이블의 특정 칼럼이나 칼럼들에 대해 특정 조건을 충족하도록 하는 제약조건이다.
  • 데이터 베이스에 데이터가 입력되거나 수정될 때 해당 데이터가 조건을 만족하는지 확인한다.
  • 조건을 만족하지 않으면 그 작업을 거부하고 오류 메시지를 반환한다. 

예시

  • 학년의 정보를 받는데 1,2,3학년 학생의 정보만 받으시오.
stu_grade CHAR(1) CHECK(stu_grade IN('1','2','3')),

 

  • 성별의 정보를 받는데 'M' 또는 'F'로 표기한 정보만 받으시오.
stu_gender CHAR(1) CHECK(stu_gender IN('M','F')),

 

 

WHILE 구문 

  • while ( a ){ b } 의 구조에서 해석은, while 구문안의 a의 값이 참인 동안 지속하여 b를 실행한다.

예시

#include <stdio.h>

int main() {
    int n = 0;
    
    while ( n < 10){
        printf("Hello\n");
        n = n + 1;
    }    
    
        return 0;  
    }

 

 

FOR 구문 

  • for ( a ; b ; c ) { d } 의 for 구문 구조에서 프로세스의 순서는 a로 인자를 초기화 하여 b의 조건이 거짓이 되는 순간 d를 실행하게 되고 참인동안은 c를 출력하게 된다.

예시

#include <stdio.h>

int main() {
    int n;
    
    for ( n = 0 ; n < 10 ; n = n + 1 ) {
    printf("hello\n");
    }
    
        return 0;  
}

 

 


수업내용

 

 

세부검색 미션

 

1.학생테이블에서 학과명을 조회하시오. (단, 중복된 자료는 제외합니다.)

SELECT DISTINCT stu_dept FROM students;

 

2. 학생테이블에서 '컴퓨터 정보' 학과 2학년 학생의 이름, 학과, 학년, 반 정보를 조회하시오.

SELECT stu_name, stu_dept, stu_grade, stu_class FROM students WHERE stu_dept = '컴퓨터정보';

 

3. 학생테이블에서 체중이 60KG이상이고 70KG 이하인 학생들의 모든 정보를 조회하시오. 

SELECT * FROM students WHERE stu_weight BETWEEN 60 AND 70 ;

 

4. 학생 테이블에서 학번, 이름을 조회할 때 조회결과 열의 제목이 ID, NAME으로 표시되도록 하시오

SELECT stu_no AS 'ID', stu_name AS 'NAME' FROM students ;

 

5. 2014학번 학생의 정보를 검색하시오

SELECT * FROM students WHERE stu_no LIKE '2014%';

 

6. 성이 김씨인 학생들의 정보를 검색하시오.

SELECT * FROM students WHERE stu_name LIKE '김_%';

 

7. 학생 중 이름의 두번쨰 문자가 '수'인 학생의 이름을 검색하시오. 

SELECT * FROM students WHERE stu_name LIKE '_수%';

 

8. 학과가 '컴퓨터 정보' 이거나 '기계과' 인 학생의 학번과 이름을 검색하시오.  in절 사용으로.

SELECT stu_no, stu_name FROM students WHERE stu_dept IN ('컴퓨터정보','기계') ;

 

9. 학생의 키 정보가 null인 학생의 학번, 이름, 키 정보를 조회하시오. 

SELECT stu_no, stu_name, stu_height FROM students WHERE stu_height IS NULL ;

 

10. 학생의 키 정보가 null이 아닌 학생의 학번, 이름, 키 정보를 조회하시오. 

SELECT stu_no, stu_name, stu_height FROM students WHERE stu_height IS NOT NULL;

 

 

 

 

MariaDB 샘플 데이터 다운

1. 구글에 mariadb 샘플 데이터 검색

 

2.  'GitHub에 있는 test_db...' 을 클릭한다.

 

3. 'Code' 클릭

 

4. ZIP 파일을 다운로드한다.

 

 

게임 만들기 '베스킨 라빈스 31'

고객님이 주어준 설정
  • 컴퓨터가 숫자를 가지고 있는데 그걸 내가 맞추는 거고 5번의 기회가 주어진다.
  • 컴퓨터가 10라는 숫자를 가지고 있는데 내가 12라고 말했다.
  • 컴퓨터의 숫자가 내가 제시한 것보다 크다면 '숫자를 높여주세요'
  • 내가 제시한 숫자가 너무 크다면 '숫자를 낮혀주세요'
  • 5번 동안 못맞추면 아쉽습니다. 다음기회에
  • 맞추면 축하드립니다.
  • 최대값 31 

 


구현코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
    srand(time(0));
    int target = rand() % 30 + 1;
    int guess;
    int attempts = 0;
    int maxAttempts =5;
    
    printf("환영합니다. 베스킨 라빈스 31입니다. 숫자를 맞춰주세요!!\n");
    
    while (attempts < maxAttempts){
        printf("숫자를 말씀해주세요\n");
        scanf("%d", &guess);
        
        
        if (guess == target) {
            printf("축하합니다. 정답입니다. 집에가세요!\n");
            return 0;
        }
        else if (guess < target) {
            printf("조금 더 높은 수를 말씀해주세요!\n");
        }
        else {
            printf("조금 더 낮은 수를 말씀해주세요!\n");
        }
        attempts ++;
    }
    printf("아쉽게도 5번의 기회를 모두 소진하셨습니다. 정답은 %d이었습니다", target);
    
    return 0;
    
}