❗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 |
+
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 |
+
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 |
+