SQL과 테이블 구조
표 < 데이터베이스 < 데이터베이스 서버
SQL(Structured Query Language)
쿼리 - 데이터베이스에 요청(질의)하는 것
관계형 데이터베이스, 데이터베이스를 제어할 때 사용하는 표준화된 언어
table, 표
row, record, 행 - 데이터 하나하나, 자체
column, 열 - 데이터의 타입, 구조
조회(select)
SELECT * FROM student;
: student 테이블의 모든 컬럼에 들어있는 각각의 행들을 조회
SELECT name, birthday FROM student;
: student 테이블의 name, birthday 컬럼을 조회
SELECT * FROM student WHERE id=3;
: student 테이블의 id값이 3인 행에 대해서 모든 컬럼을 조회
SELECT * FROM student WHERE sex='남자' AND address='서울';
: student 테이블의 sex가 남자이고 address가 서울인 행에 대해서 모든 컬럼을 조회
: 숫자는 ' ' 안해도 무
SELECT * FROM student WHERE sex='여자' OR address='서울';
: student 테이블의 sex가 여자이거나 address가 서울인 행에 대해서 모든 컬럼을 조회
SELECT * FROM student LIMIT 1;
: LMIT - 조회한 결과를 몇 개(행) 가져올지 지정
: select문 사용시 where나 LIMIT 사용해야됨. 안그러면 모든 행 가져오기 때문.
SELECT * FROM student LIMIT 1, 1;
: LIMIT에 들어오는 첫 번째 값 - offset (0부터 시작)
: offset이 1이고, row count가 1이다.
: 두 번째 데이터 부터 한 개의 행을 가져온다.
SELECT * FROM student WHERE sex='남자' LIMIT 2;
: student 테이블의 sex가 남자인 두 개의 행에 대해서 모든 컬럼을 조회
조회(select) - 그룹핑(group by)
SELECT * FROM 테이블명 GROUP BY 그룹핑 할 기준 칼럼명
select sex from student group by sex;
: 이렇게 활용하면 데이터는 남자와 여자로 구성되어 있음을 알 수 있다.
select sex,sum(distance), avg(distance) from student group by sex;
: 그 데이터가 어떻게 구성되어있는지
: 그룹핑된 컬럼을 기준으로 특정한 다른 컬럼의 평균이나 합계 등 다른 작업을 할 수 있음
조회(select) - 정렬(order by)
SELECT * FROM 테이블명 ORDER BY 정렬의 기준으로 사용할 열 [DESC | ASC]
select * from student order by distance desc;
: desc - 내림차순, 최신 데이터, 데이터의 크기가 큰 거
: asc - 오름차순, 오래된 데이터, 1이 먼저 10이 나중
select * from student order by distance desc, address asc;
: 동일한 값이 있을 때 뒤에 있는 걸 기준으로 정렬
조회(select) - join
데이터베이스는 여러개의 테이블을 사용함.
정보를 하나의 테이블에 몰아 넣으면 비효율 발생.
테이블 분할 하고 관계성을 부여.
address에 제주 두 번 등장.
제주도의 distance를 변경하고 싶다면?
김경진 만 변경하고 김정인은 변경 안할수도 있음.
정보가 중복되어서 저장되면서 비효율이 발생.
데이터가 많지 않은 경우에는 적은 비효율이지만, 데이터가 많아지면 심각한 비효율
address 와 distance 컬럼을 묶어서 별도의 테이블을 만들고,
식별자를 이 테이블에 컬럼으로 추가해서 그 테이블과 현재 student테이블 간에 관계성을 부여.
join
: 테이블간의 관계성에 따라서 복수의 테이블을 결합, 하나의 테이블인 것처럼 결과를 출력
OUTTER JOIN
- 매칭되는 행이 없어도 결과를 가져오고 매칭되는 행이 없는 경우 NULL로 표시
- LEFT JOIN 과 RIGHT JOIN
INNER JOIN
- 조인하는 두 개의 테이블 모두에 데이터가 존재하는 행에 대해서만 결과를 가져옴
LEFT JOIN : 가장 많이 사용되는 조인의 형태
SELECT s.name, s.location_id, l.name AS address, l.distance FROM student AS s LEFT JOIN location AS l ON s.location_id = l.id;
student AS s : student에 s라는 별명을 붙인 것.(쿼리를 간결하게 만들기 위해)
s.name
: student.name
l.name
: location.name
l.name AS address
: location테이블의 name이라는 컬럼을 가져올 때 그 컬럼에 address라는 별명을 부여
student AS s LEFT JOIN location AS l ON s.location_id = l.id
: student테이블에 location테이블을 조인
: student의 location_id 컬럼의 값에 해당하는 location의 id컬럼의 행들을 결과에 붙여서 출력.
DELETE FROM location WHERE name='제주'
: location에서 name이 제주인 행 삭제
OUTER JOIN(LEFT JOIN, RIGHT JOIN)
: 테이블 간 결합을 했을 때, 한 쪽 테이블에 데이터가 없다고 하더라도 가져와서 Null로 표시
INNER JOIN
: 한 쪽 테이블에 데이터가 없으면 그 행 자체를 결과에서 빼버림
'SQL > 공부' 카테고리의 다른 글
select 문 총정리 (0) | 2023.07.09 |
---|---|
개념적 데이터 모델링, ERD (0) | 2023.02.07 |
Codecademy - Multiple Tables (0) | 2023.02.05 |
Codecademy - Aggregate Functions (0) | 2023.02.05 |
Codecademy - Queries (0) | 2023.02.05 |