오늘 SELECT 심화편과 함께할 테이블입니다. 교양 과목을 듣는 학생들의 전공과 중간고사 점수입니다.
| name | major | score |
|---|---|---|
| 이지은 | 경영학과 | 90 |
| 천우희 | 행정학과 | 85 |
| 전여빈 | 컴퓨터공학과 | 95 |
| 김예진 | 기계공학과 | 80 |
| 박채연 | 경영학과 | 70 |
출력할때 기존 테이블의 컬럼명 대신 원하는 이름이 있을 수 있습니다. 그 때 사용하는 방식입니다.
SELECT name AS 이름, major AS 학과 FROM student_grade;
SELECT 기존컬럼명 AS 별칭, 기존컬럼명 AS 별칭 FROM 테이블명;
위의 명령어를 통해 출력할때 컬럼명을 원하는 별칭으로 바꿀 수 있습니다.
| 이름 | 학과 |
|---|---|
| 이지은 | 경영학과 |
| 천우희 | 행정학과 |
| 전여빈 | 컴퓨터공학과 |
| 김예진 | 기계공학과 |
| 박채연 | 경영학과 |
한 가지 알려드리자면 mysql에는 쿼리를 넣을 때 대소문자 구분을 하지 않습니다. 따라서 SELECT, select / AS, as 모두 무방합니다.
SELECT DISTINCT major FROM student_grade;
| major |
|---|
| 경영학과 |
| 행정학과 |
| 컴퓨터공학과 |
| 기계공학과 |
중복된 경영학과의 값이 한번만 출력된 것을 볼 수 있습니다.
SELECT concat(name,'의 교양 수업 점수는 ',score,' 점 입니다.')
FROM student_grade;
| concat(name,'의 교양 수업 점수는 ',score,' 점 입니다.') |
|---|
| 이지은의 교양 수업 점수는 90 점 입니다. |
| 천우희의 교양 수업 점수는 85 점 입니다. |
| 전여빈의 교양 수업 점수는 95 점 입니다. |
| 김예진의 교양 수업 점수는 80 점 입니다. |
| 박채연의 교양 수업 점수는 70 점 입니다. |
만약 천우희 학생만의 점수만을 출력하고 싶다면
WHERE name = '천우희'를 추가합니다.
SELECT concat(name,'의 교양 수업 점수는 ',score,' 점 입니다.')
FROM student_grade
WHERE name = '천우희';
산술 연산자란 우리가 알고 있는 +, -, *, / 를 의미합니다. SQL에서도 다른 프로그래밍 언어와 마찬가지로 산술 연산자를 사용해서 어떤 결과를 얻을 수 있습니다.
SELECT *
FROM student_grade
WHERE score >= 85;
| name | major | score |
|---|---|---|
| 이지은 | 경영학과 | 90 |
| 천우희 | 행정학과 | 85 |
| 전여빈 | 컴퓨터공학과 | 95 |
WHERE score >= 85을 추가하여 점수가 85점 이상인 학생들을 출력할 수 있습니다.
average와 total을 알아보기 위해 새로운 테이블 하나를 추가하겠습니다.
| name | major | Korean | Math | English |
|---|---|---|---|---|
| 이지은 | 경영학과 | 90 | 85 | 60 |
| 천우희 | 행정학과 | 85 | 75 | 90 |
| 전여빈 | 컴퓨터공학과 | 95 | 90 | 70 |
| 김예진 | 기계공학과 | 80 | 80 | 90 |
| 박채연 | 경영학과 | 70 | 80 | 100 |
학생들의 국어, 수학, 영어의 평균 점수를 출력하고 싶습니다.
SELECT name, major, Korean, Math, English,
(Korean + Math + English)/3 AS avg
FROM student_total;
| name | major | Korean | Math | English | avg |
|---|---|---|---|---|---|
| 이지은 | 경영학과 | 90 | 85 | 60 | 78.3 |
| 천우희 | 행정학과 | 85 | 75 | 90 | 83.3 |
| 전여빈 | 컴퓨터공학과 | 95 | 90 | 70 | 85 |
| 김예진 | 기계공학과 | 80 | 80 | 90 | 83.3 |
| 박채연 | 경영학과 | 70 | 80 | 100 | 83.3 |
평균이 83.3점인 학생들만 출력하고 싶습니다.
SELECT name, major, Korean, Math, English,
(Korean + Math + English)/3 AS avg
FROM student_total
WHERE avg = 83.3;
| name | major | Korean | Math | English | avg |
|---|---|---|---|---|---|
| 천우희 | 행정학과 | 85 | 75 | 90 | 83.3 |
| 김예진 | 기계공학과 | 80 | 80 | 90 | 83.3 |
| 박채연 | 경영학과 | 70 | 80 | 100 | 83.3 |
학생들의 점수의 총점을 출력하고 싶습니다.
SELECT name, major, Korean, Math, English,
Korean + Math + English AS total
FROM student_total
데이터의 양이 많을 때는 데이터를 어떤 기준으로 정렬하여 보는 것이 편할 때가 있습니다. 이럴 때 SQL에서는 order by 절을 사용 하게 됩니다.
기본적으로 order by를 사용하게 되면 오름차순으로 정렬이 되며, 내림차순으로 정렬을 하고 싶을 때는 desc라는 옵션을 사용하게 됩니다.
SELECT *
FROM student_total
ORDER BY Korean;
| name | major | Korean | Math | English |
|---|---|---|---|---|
| 박채연 | 경영학과 | 70 | 80 | 100 |
| 김예진 | 기계공학과 | 80 | 80 | 90 |
| 천우희 | 행정학과 | 85 | 75 | 90 |
| 이지은 | 경영학과 | 90 | 85 | 60 |
| 전여빈 | 컴퓨터공학과 | 95 | 90 | 70 |
다음은 내림차순을 해보겠습니다.
SELECT *
FROM student_total
ORDER BY Korean DESC;
| name | major | Korean | Math | English |
|---|---|---|---|---|
| 전여빈 | 컴퓨터공학과 | 95 | 90 | 70 |
| 이지은 | 경영학과 | 90 | 85 | 60 |
| 천우희 | 행정학과 | 85 | 75 | 90 |
| 김예진 | 기계공학과 | 80 | 80 | 90 |
| 박채연 | 경영학과 | 70 | 80 | 100 |