DB는 쉽게 말해서 '데이터가 저장되어 있는 큰 폴더'이다.
DB라는 큰 폴더 안에 '테이블'이란 파일이 들어있다고 생각하면 쉽다.
그런 테이블 안에는 엑셀과 같이 열(컬럼)이 있는데 이것들이 모여서 테이블을 만든다.
테이블 조회하기 (select, from)
select : from을 통해 가져온 테이블에서 컬럼을 조회하는 방법
from : 데이터를 가져올 테이블을 특정해주는 문법
select *
from student
위 코드를 해석해보면 "student라는 테이블에서 *(모든) 컬럼을 가져와" 라는 뜻이다.
특정 컬럼 가져오고 컬럼명 (별칭)바꿔보기
select student_name as st_name , student_address as "주소" /* as(alias)는 취향차이 */
from student
"student 라는 테이블에서 student_name 이라는 컬럼명을 name으로 바꾸고 student_address 라는 컬럼명을 "주소" 로 바꿔줘" 라는 뜻의 코드이다.
참고) 영문과 언더바는 별칭을 줄 때 " " 을 주지 않아도 되지만 한글, 특수기호(- 포함)등은 " " 을 꼭! 붙여줘야한다.
조건에 맞게 데이터 가져오기 (where)
where 절은 개념을 설명하기 보다는 바로 실습 고고
select *
from student
where age >= 20
"student 라는 테이블에서 age가 20세 이상인 사람의 *(모든 컬럼)을 가져와줘" 라는 뜻이다.
참고) 연산자에서 부정은 != 가 아님. <> 임
조건문 심화 (between, in, like)
between : ~~ 사이 ex) age가 20세와 30세 사이의 데이터
in : 특정 조건 포함 ex) age가 20세, 25세, 30세 들의 데이터
like : 완전 똑같지 아니하고 비슷한 값 ex) 이름이 김으로 시작하는 사람들의 데이터
/* between 부터 */
select *
from student
where age 20 between 30
"student 테이블로부터 age가 20세부터 30세 사이의 사람들의 데이터를 *(모든 컬럼)을 가져와줘"
/* in */
select *
from student
where age in (20, 25, 30)
/*
where name in ('김개발', '박자바') 이름이 '김개발', '박자바'인 사람만
*/
"student 테이블로부터 age가 20세, 25세, 30세인 사람들의 데이터만 *(전부) 가져와줘"
/* like */
select *
from student
where name like '김%'
/*
where name like '%준' '준'으로 끝나는 이름.
where name like '%수%' '수'를 포함하는 이름.
*/
"student 테이블로부터 name이 김으로 시작하는 사람들의 데이터만 *(전부) 가져와줘"
논리 연산으로 여러 조건문 쓰기 (and, or, not)
이것도 바로 실습 레츠기릿
/* and */
select *
from student
where age >= 20 AND name like '김%'
"student 테이블로부터 age가 20세 이상인 사람들 중에서 이름이 김씨인 사람의 데이터를 *(전부) 불러와줘"
/* or */
select *
from student
where age in (20, 30) or addr = '서울'
"student 테이블로부터 나이가 20세와 30세 중 주소가 서울인 사람들의 데이터를 *(전부) 가져와줘"
종합
이름이 김씨이고 서울에 사는 학생들의 성별과 나이를 조회하라/*이름이 김씨이고 서울에 사는 학생들의 성별과 나이를 조회하라*/ select gender, age from student where name like '김%' AND address = '서울'
계산하기 (sum, average, min, max, count)
이것도 실전으로 바로 레츠고
/* sum, avg */
select sum(age) as sum_age,
avg(age) as avg_age
from student
/* min, max */
select min(age) as min_age,
max(age) as max_age
from student
sum, avg, min, max 는 딱히 설명이 필요없어 보인다..!
/* count */
select count(age) as count_of_age
count(*)
count(DISTINCT student_id) as distinct_count_of_age
from student
| id | age |
| 1 | 21 |
| 2 | null |
| 3 | 28 |
| 4 | 21 |
count는 헷갈릴 수 있으니 짚고 넘어가보자!
먼저, count(컬럼명)은 데이터의 null 값을 제외하고 user 컬럼의 개수를 세어준다. 그럼 표에서 개수는 3.
두 번째, count(*)은 null값을 포함하고 개수를 세준다. 그럼 표에서 개수는 4.
세 번째, count(DISTINCT 컬럼명)은 중복을 제외하고 개수를 센다. 그럼 표에서 개수는 2 (null제외하고, 21은 중복이니 합친다)
범주(Group By)
컬럼명으로 그룹화 하는건데.. 이렇게 말하면 어려우니 쉽게 설명하자면 학생들의 과목별 성적이 있는데 평균을 구해야 할 때
group by를 사용하면 같은 과목별 평균을 쉽게 구할 수 있다.
| student_id | subject | score |
| 1 | 수학 | 85 |
| 1 | 영어 | 90 |
| 1 | 과학 | 80 |
| 2 | 수학 | 78 |
| 2 | 영어 | 88 |
| 2 | 과학 | 82 |
| 3 | 수학 | 92 |
| 3 | 영어 | 85 |
| 3 | 과학 | 89 |
select 과목, AVG(점수) as avg_score
from student
group by 과목
이렇게 하면 과목별 평균 점수를 구할 수 있다! 설명 보다는 시각자료가 이해하기 쉽다.
| 과목 | avg_score |
| 수학 | 85 |
| 영어 | 87.7 |
| 과학 | 83.7 |
순서 정렬 (order by)
말 그대로 순서 정렬 해주는 절이다.
select * from student order by score /* ASC가 디폴트다 */ /* 만약 내림차순으로 하고 싶다면*/ order by score DESC /* 다중 정렬하고 싶다면 */ order by student_id DESC , socre /* 이러면 student_id 내림차순으로 먼저 정렬한 다음, score를 오름차순으로 정렬한다.
요까지! 복습을 열심히 합시다!!
'Back-End > DataBase' 카테고리의 다른 글
| Spring JdbcTemplate의 RowMapper() (1) | 2024.12.09 |
|---|---|
| 커넥션 풀과 데이터소스 (0) | 2024.12.06 |
| JDBC - CRUD (0) | 2024.12.06 |
| SQL 기초 3 (Join) (1) | 2024.11.08 |
| SQL 기초 2 (2) | 2024.11.07 |