[MySQL] 데이터 조회하기 [SELECT]

심진주·2024년 10월 6일
0

MySQL

목록 보기
3/10
post-thumbnail

❗SQL문 작성할 때 주의할 점

  • SQL은 대문자 소문자 구분을 하지 않는다.
  • 하지만 SQL 예약어는 대문자로 쓰고 컬럼명이나 테이블명은 구분하기 쉽게 소문자로 쓰는 것이 좋다.
  • 윈도우 CMD에서 Enter가 복사다. 붙여 넣기 하고 싶을 때는 CMD에서는 오른쪽 마우스를 클릭한다.
SQL의미
대문자SQL 예약어
소문자컬럼명이나 테이블명 등
Enter복사
오른쪽 클릭붙여넣기
위쪽 화살표이전 사용한 명령어 재호출
아래쪽 화살표이후 사용한 명령어 재호출
  • 참고 : CMD - 편집옵션 - Crtl 바로가기 키 사용 이 있지만 일부 응용프로그램을 방해할 수 있음으로 권장하진 않는다.

📘 전체 데이터 조회하기 (1)

SELECT * FROM <테이블 이름>;
  • * : all 의미.
  • 조회속도가 상대적으로 느리다.

예제 1

  • department 테이블의 모든 데이터 조회하기
SELECT * FROM department;
+--------+----------------+-------+
| deptno | dname          | loc   |
+--------+----------------+-------+
|    101 | 컴퓨터공학과   | 1호관 |
|    102 | 멀티미디어학과 | 2호관 |
|    201 | 전자공학과     | 3호관 |
|    202 | 기계공학과     | 4호관 |
+--------+----------------+-------+
  • 조회속도가 상대적으로 느리기 때문에 실무에서는 거의 사용하지 않는다.

📘 전체 데이터 조회하기 (2)

SELECT 컬럼1, 컬럼2, ..., 컬럼n FROM <테이블 이름>;

예제 1

  • 모든 컬럼명을 명시하여 테이블의 모든 데이터를 조회한다.
SELECT deptno, dname, loc FROM department;
+--------+----------------+-------+
| deptno | dname          | loc   |
+--------+----------------+-------+
|    101 | 컴퓨터공학과   | 1호관 |
|    102 | 멀티미디어학과 | 2호관 |
|    201 | 전자공학과     | 3호관 |
|    202 | 기계공학과     | 4호관 |
+--------+----------------+-------+
  • *을 사용하는 것 보다 조회 속도가 상대적으로 빠르므로 실무에서는 이 방법을 주로 사용한다.

📘 원하는 데이터만 조회하기

  • 원하는 데이터의 컬럼명을 명시해서 테이블의 원하는 데이터를 조회한다.
  • 컬럼 나열 순서를 필요에 따라 변경할 수 있다.
SELECT 컬럼1, 컬럼2 FROM <테이블 이름>;

예제 1

  • 학과 테이블(department)에서 위치(loc)와 학과이름(dname)을 조회하기
SELECT loc, dname FROM department;
+-------+----------------+
| loc   | dname          |
+-------+----------------+
| 1호관 | 컴퓨터공학과   |
| 2호관 | 멀티미디어학과 |
| 3호관 | 전자공학과     |
| 4호관 | 기계공학과     |
+-------+----------------+

📘 검색 결과의 중복 행 제거

SELECT DISTINCT * | 컬럼1, 컬럼2, ..., 컬럼n FROM <테이블 이름>;

예제 1 - 단일 컬럼

  • 학생 테이블의 학과 번호 조회하기
  • 단일 컬럼을 조회하는 SELECT 구문에서 DISTINCT 키워드 사용
SELECT deptno FROM student;
+--------+
| deptno |
+--------+
|    101 |
|    101 |
|    101 |
|    101 |
|    101 |
|    101 |
|    101 |
|    101 |
|    102 |
|    102 |
|    102 |
|    102 |
|    201 |
|    201 |
|    201 |
|    201 |
+--------+
  • DISTINCT 키워드 사용 전
SELECT DISTINCT deptno FROM student;
+--------+
| deptno |
+--------+
|    101 |
|    102 |
|    201 |
+--------+
  • DISTINCT 키워드를 사용할 경우 중복 행이 제거된다.
  • 학생들이 소속되어 있는 종류를 알고 싶을 때 사용

예제 2 - 복수 컬럼

SELECT deptno, grade FROM student;
+--------+-------+
| deptno | grade |
+--------+-------+
|    101 |     4 |
|    101 |     1 |
|    101 |     3 |
|    101 |     2 |
|    101 |     2 |
|    101 |     1 |
|    101 |     4 |
|    101 |     2 |
|    102 |     2 |
|    102 |     4 |
|    102 |     1 |
|    102 |     3 |
|    201 |     1 |
|    201 |     1 |
|    201 |     2 |
|    201 |     1 |
+--------+-------+
  • DISTINCT 키워드 사용 전
SELECT DISTINCT deptno, grade FROM student;
+--------+-------+
| deptno | grade |
+--------+-------+
|    101 |     4 |
|    101 |     1 |
|    101 |     3 |
|    101 |     2 |
|    102 |     2 |
|    102 |     4 |
|    102 |     1 |
|    102 |     3 |
|    201 |     1 |
|    201 |     2 |
+--------+-------+
  • 검색결과의 중복 행이 제거되어 출력된다.

📘 컬럼에 대한 별칭 부여

예제 1 - 공백으로 구분

SELECT 컬럼1 `별칭1`, 컬럼2 `별칭2`, ..., 컬럼n `별칭n` FROM 테이블명;
  • 학과 테이블(department) 에서 dname 컬럼의 별명은 '학과이름', deptno 컬럼의 별명은 '학과번호'로 부여하여 출력
SELECT dname `학과이름`, deptno `학과번호` From department;
+----------------+----------+
| 학과이름       | 학과번호 |
+----------------+----------+
| 컴퓨터공학과   |      101 |
| 멀티미디어학과 |      102 |
| 전자공학과     |      201 |
| 기계공학과     |      202 |
+----------------+----------+

예제 2 - AS 키워드로 구분

  • 학과 테이블(department)에서 dname 컬럼의 별명은 Department_Name, deptno의 별명은 Department_Number 부여하여 출력
SELECT dname AS `Department_Name`, deptno AS `Department_Number` From department;
+-----------------+-------------------+
| Department_Name | Department_Number |
+-----------------+-------------------+
| 컴퓨터공학과    |               101 |
| 멀티미디어학과  |               102 |
| 전자공학과      |               201 |
| 기계공학과      |               202 |
+-----------------+-------------------+

📘 SELECT 절에서의 산술 연산자의 사용

  • 컬럼이름에 산술 연산을 적용하면 조회 결과에 적용되어 출력
  • 원본 데이터는 변하지 않으며, 값을 가공하여 출력할 수 있다.

예제 1

  • 교수 테이블(professor)에서 교수이름(name), 급여(sal), 보너스를 포함한 연봉을 출력
  • 단, 보너스를 포함한 연봉은 급여x12를 한 결과에 보너스 100을 더한 값으로 계산
SELECT name, sal, sal*12+100 From professor;
+--------+-----+------------+
| name   | sal | sal*12+100 |
+--------+-----+------------+
| 김도훈 | 500 |       6100 |
| 이재우 | 320 |       3940 |
| 성연희 | 360 |       4420 |
| 염일웅 | 240 |       2980 |
| 권혁일 | 450 |       5500 |
| 이만식 | 420 |       5140 |
| 전은지 | 210 |       2620 |
| 남은혁 | 400 |       4900 |
+--------+-----+------------+

📘 WHERE 절을 사용한 검색 조건 지정

SELECT [DISTINCT] {* | 컬럼 [AS `별칭`] ... } FROM 테이블 [WHERE 조건식];
  • 검색조건에는 비교 연산자과 논리 연산자를 사용할 수 있다.

비교 연산자의 종류

연산자설명
=같다
>크다(초과)
<작다(미만)
!=다르다
>=크거나 같다(이상)
<=작거나 같다(이하)

논리 연산자의 종류

연산자설명
AND모든 조건이 참일 때 참을 반환
OR모든 조건이 거짓일 때 거짓을 반환
NOT조건과 반대되는 결과를 반환

예제 1 - 비교연산자

  • 학생테이블에서 1학년만 검색하여 학번, 이름, 학과 번호를 출력
SELECT studno, name, deptno FROM student WHERE grade = 1;
+--------+--------+--------+
| studno | name   | deptno |
+--------+--------+--------+
|  10102 | 박미경 |    101 |
|  10106 | 서재진 |    101 |
|  10203 | 하나리 |    102 |
|  20101 | 이동훈 |    201 |
|  20102 | 박동진 |    201 |
|  20104 | 조명훈 |    201 |
+--------+--------+--------+

예제 2 - 비교연산자

  • 학생 테이블에서 몸무게가 70kg이하인 학생만 검색하여 학번, 이름, 학년, 학과번호, 몸무게를 출력
SELECT studno, name, grade, deptno, weight FROM student WHERE weight <= 70;
+--------+--------+-------+--------+--------+
| studno | name   | grade | deptno | weight |
+--------+--------+-------+--------+--------+
|  10102 | 박미경 |     1 |    101 |     52 |
|  10104 | 지은경 |     2 |    101 |     42 |
|  10105 | 임유진 |     2 |    101 |     54 |
|  10201 | 김진영 |     2 |    102 |     48 |
|  10203 | 하나리 |     1 |    102 |     68 |
|  10204 | 윤진욱 |     3 |    102 |     70 |
|  20101 | 이동훈 |     1 |    201 |     64 |
|  20102 | 박동진 |     1 |    201 |     70 |
|  20103 | 김진경 |     2 |    201 |     51 |
|  20104 | 조명훈 |     1 |    201 |     62 |
+--------+--------+-------+--------+--------+

예제 3 - 논리연산자

  • 학생 테이블에서 1학년이면서 몸무게가 70kg 이상인 학생만 검색하여 이름, 학번, 학년, 몸무게, 학과 번호 출력
SELECT studno, name, grade, deptno, weight FROM student WHERE grade = 1 AND weight >= 70;
+--------+--------+-------+--------+--------+
| studno | name   | grade | deptno | weight |
+--------+--------+-------+--------+--------+
|  10106 | 서재진 |     1 |    101 |     72 |
|  20102 | 박동진 |     1 |    201 |     70 |
+--------+--------+-------+--------+--------+

✏️ 연습문제

연습문제 1

  • 학생 테이블에서 학생 이름과 학생 번호를 조회하시오.
SELECT name AS `이름`, studno AS `학과 번호` FROM student;
+--------+-----------+
| 이름   | 학과 번호 |
+--------+-----------+
| 전인하 |     10101 |
| 박미경 |     10102 |
| 김영균 |     10103 |
| 지은경 |     10104 |
| 임유진 |     10105 |
| 서재진 |     10106 |
| 이광훈 |     10107 |
| 류민정 |     10108 |
| 김진영 |     10201 |
| 오유석 |     10202 |
| 하나리 |     10203 |
| 윤진욱 |     10204 |
| 이동훈 |     20101 |
| 박동진 |     20102 |
| 김진경 |     20103 |
| 조명훈 |     20104 |
+--------+-----------+

연습문제 2

  • 교수(professor) 테이블에서 직급(position)의 종류를 조회하시오.
SELECT DISTINCT position AS `직급` FROM professor;
+----------+
| 직급     |
+----------+
| 교수     |
| 조교수   |
| 전임강사 |
| 부교수   |
+----------+

연습문제 3

  • department 테이블을 사용하여 deptno를 부서, dname을 부서명, loc를 위치로 별명을 설정하여 출력하세요
SELECT deptno AS `부서`, dname AS `부서명`, loc `위치` From department;
+------+----------------+-------+
| 부서 | 부서명         | 위치  |
+------+----------------+-------+
|  101 | 컴퓨터공학과   | 1호관 |
|  102 | 멀티미디어학과 | 2호관 |
|  201 | 전자공학과     | 3호관 |
|  202 | 기계공학과     | 4호관 |
+------+----------------+-------+

연습문제 4

  • 학생 테이블(student)에서 학생이름(name)과 각 학생에 대한 표준 체중을 조회하시오
  • 표준 체중은 (키(height)-110)*0.9로 구하시오.
SELECT name, height, weight, (height-110)*0.9 AS `표준체중` From student;
+--------+--------+--------+----------+
| name   | height | weight | 표준체중 |
+--------+--------+--------+----------+
| 전인하 |    176 |     72 |     59.4 |
| 박미경 |    168 |     52 |     52.2 |
| 김영균 |    170 |     88 |     54.0 |
| 지은경 |    161 |     42 |     45.9 |
| 임유진 |    171 |     54 |     54.9 |
| 서재진 |    186 |     72 |     68.4 |
| 이광훈 |    175 |     92 |     58.5 |
| 류민정 |    162 |     72 |     46.8 |
| 김진영 |    164 |     48 |     48.6 |
| 오유석 |    177 |     92 |     60.3 |
| 하나리 |    160 |     68 |     45.0 |
| 윤진욱 |    171 |     70 |     54.9 |
| 이동훈 |    172 |     64 |     55.8 |
| 박동진 |    182 |     70 |     64.8 |
| 김진경 |    166 |     51 |     50.4 |
| 조명훈 |    184 |     62 |     66.6 |
+--------+--------+--------+----------+

연습문제 5

  • 학생 테이블에서 학과번호 101번인 학생들의 학번, 이름, 학년을 출력
SELECT studno AS `학번`, name AS `이름`, grade AS `학년` FROM student WHERE deptno = 101;
+-------+--------+------+
| 학번  | 이름   | 학년 |
+-------+--------+------+
| 10101 | 전인하 |    4 |
| 10102 | 박미경 |    1 |
| 10103 | 김영균 |    3 |
| 10104 | 지은경 |    2 |
| 10105 | 임유진 |    2 |
| 10106 | 서재진 |    1 |
| 10107 | 이광훈 |    4 |
| 10108 | 류민정 |    2 |
+-------+--------+------+

연습문제 6

  • 교수 테이블에서 교수번호 101번인 교수들의 교수번호, 이름, 급여를 출력
SELECT profno, name, sal FROM professor WHERE deptno = 101;
+----------+--------+------+
| 교수번호 | 이름   | 급여 |
+----------+--------+------+
|     9901 | 김도훈 |  500 |
|     9903 | 성연희 |  360 |
|     9906 | 이만식 |  420 |
|     9907 | 전은지 |  210 |
+----------+--------+------+

연습문제 7

  • 학생 테이블에서 키가 170 이상인 학생의 학번, 이름, 학년, 학과번호, 키를 출력하시오
SELECT studno AS `학번`, name AS `이름`, grade AS `학년`, deptno AS `학과번호`, height AS `` FROM student WHERE height >= 170;
+-------+--------+------+----------+-----+
| 학번  | 이름   | 학년 | 학과번호 ||
+-------+--------+------+----------+-----+
| 10101 | 전인하 |    4 |      101 | 176 |
| 10103 | 김영균 |    3 |      101 | 170 |
| 10105 | 임유진 |    2 |      101 | 171 |
| 10106 | 서재진 |    1 |      101 | 186 |
| 10107 | 이광훈 |    4 |      101 | 175 |
| 10202 | 오유석 |    4 |      102 | 177 |
| 10204 | 윤진욱 |    3 |      102 | 171 |
| 20101 | 이동훈 |    1 |      201 | 172 |
| 20102 | 박동진 |    1 |      201 | 182 |
| 20104 | 조명훈 |    1 |      201 | 184 |
+-------+--------+------+----------+-----+

연습문제 8

  • 학생 테이블에서 1학년이거나 몸무게가 70kg 이상인 학생만 검색하여 이름, 학번, 학년, 몸무게, 학과 번호를 출력하시오.
SELECT name AS `이름`, studno AS `학번`, grade AS `학년`, weight AS `몸무게`, deptno AS `학과번호` FROM student WHERE grade = 1 OR weight >= 70;
+--------+-------+------+--------+----------+
| 이름   | 학번  | 학년 | 몸무게 | 학과번호 |
+--------+-------+------+--------+----------+
| 전인하 | 10101 |    4 |     72 |      101 |
| 박미경 | 10102 |    1 |     52 |      101 |
| 김영균 | 10103 |    3 |     88 |      101 |
| 서재진 | 10106 |    1 |     72 |      101 |
| 이광훈 | 10107 |    4 |     92 |      101 |
| 류민정 | 10108 |    2 |     72 |      101 |
| 오유석 | 10202 |    4 |     92 |      102 |
| 하나리 | 10203 |    1 |     68 |      102 |
| 윤진욱 | 10204 |    3 |     70 |      102 |
| 이동훈 | 20101 |    1 |     64 |      201 |
| 박동진 | 20102 |    1 |     70 |      201 |
| 조명훈 | 20104 |    1 |     62 |      201 |
+--------+-------+------+--------+----------+

0개의 댓글