!수정중
SQL?
SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다. 위키백과
-> 대량의 정보를 컴퓨터가 효율적으로 접근할 수 있도록 가공 및 저장하는 것. DBMS를 사용함으로써 여러 사람이 데이터를 공유할 수 있고, 대량의 데이터를 다룰 수 있다.
relational database?
관계형 데이터베이스는 테이블로 이루어져 있으며, key와 value로 관계를 나타낸다.
테이블 간의 관계는 3개로 나뉜다.
1. 일대일 관계
2. 일대다 관계
3. 다대다 관계
1. 1:1 관계
테이블의 레코드 하나당 다른 테이블의 한 레코드와 연결되어 있는 경우
2. 1:n 관계
테이블의 레코드 하나당 여러개의 레코드와 연결되어 있는 경우
3. n:n 관계
여러 개의 레코드가 여러 개의 레코드를 가지는 관계
4. 자기 참조 관계
하나의 테이블 내에서의 관계
SQL 쿼리 문
- SELECT : 데이터 셋에 포함될 특성
- FROM : 결과를 도출할 데이터베이스 테이블 명시
# movies 테이블에서 Title 특성을 조회한다.
SELECT Title FROM movies
# movies 테이블에서 Title, Director 특성을 조회한다.
SELECT Title, Director FROM movies
# movies 테이블의 모든 특성을 조회한다.
SELECT * FROM movies
- WHERE : 조건문
# id가 6인 영화 조회
SELECT * FROM movies
WHERE id = 6
# 2000~2010에 개봉한 영화 조회
SELECT * FROM movies
WHERE year BETWEEN 2000 AND 2010;
# John Lasseter 감독의 모든 영화 조회
SELECT * FROM movies
WHERE Director = "John Lasseter"
# WALL로 시작하는 영화 조회
SELECT * FROM movies
WHERE Title LIKE "WALL%";
- ORDER BY : 정렬
- DISTINCT : 중복 제거
# 감독의 이름을 순서대로 중복없이 조회
SELECT DISTINCT director FROM movies
ORDER BY director ASC;
# 최근 개봉한 영화 순으로 4개의 영화 조회
SELECT * FROM movies
ORDER BY Year DESC
LIMIT 4;
# 최근 개봉한 영화 4개를 제외한 그 이후에 개봉한 4개 영화 조회하기
SELECT * FROM movies
ORDER BY Year DESC
LIMIT 4 OFFSET 4;
- JOIN : 동일한 키를 가진 두개의 테이블을 결합
# 각 영화의 domestic, international sales 조회
SELECT Title, Domestic_sales, International_sales FROM movies
JOIN Boxoffice
ON Movies.Id = Boxoffice.Movie_id;
# 국내보다 해외에서 인기가 많았던 영화 조회
SELECT * FROM movies
JOIN Boxoffice
ON movies.ID = Boxoffice.Movie_id
WHERE International_sales > Domestic_sales;
# 영화 등급 내림차순으로 정렬하여 조회
SELECT * FROM movies
JOIN Boxoffice
ON Movies.Id = Boxoffice.Movie_id
ORDER BY Boxoffice.rating DESC;
# 모든 건물과 각 건물의 고유한 직원 역할 조회(빈 건물 포함)
SELECT DISTINCT Building_name, Role FROM buildings
LEFT JOIN Employees
ON buildings.building_name = Employees.Building;
- NULL : NULL값 조회
#건물에 배정되지 않은 직원 찾기
SELECT * FROM employees
WHERE Building IS NULL;
#직원이 없는 건물 찾기
SELECT * FROM buildings
LEFT JOIN Employees
ON buildings.building_name = Employees.building
WHERE Employees.Building IS NULL;
- SQL 연산
# 모든 영화와 총 판매량을 백만 달러로 조회
SELECT Title, (domestic_sales + international_sales) / 1000000 FROM movies
JOIN Boxoffice
ON movies.Id = boxoffice.movie_id;
# 모든 영화와 등급을 백분율로 조회
SELECT Title, (rating) * 10 AS raing_2
FROM movies
JOIN Boxoffice
ON movies.Id = boxoffice.movie_id;
# 짝수 연도에 개봉한 영화 조회
SELECT Title, year
FROM movies
JOIN Boxoffice
ON movies.Id = boxoffice.movie_id
WHERE (Year) % 2 = 0;
- MIN, MAX, SUM, COUNT
# 가장 오래 근무한 직원 찾기
SELECT MAX(Years_employed), Name FROM employees;
# 직무별 평균 근무 연수 조회
SELECT Role, AVG(Years_employed) FROM employees
GROUP BY Role
# 건물별 직원 총 근무 연수 조회
SELECT *, SUM(Years_employed) FROM employees
GROUP BY Building;
- Having : group by 한 후 조회된 결과에 대한 필터
# 각 역할 별 직원 수 조회
SELECT Role, Count(Role) FROM employees
GROUP BY Role;
# Artist 직원 수 조회
SELECT role, COUNT(*) as Number_of_artists
FROM employees
WHERE role = 'Artist';
# Engineer 총 근무 연수 조회
SELECT *, SUM(Years_employed) FROM employees
GROUP BY role
HAVING role = 'Engineer';
reference
www.tcpschool.com/mysql/mysql_intro_relationalDB
nachwon.github.io/sql-1-intro/
'AI > Data Engineer' 카테고리의 다른 글
Web crawling (0) | 2021.03.21 |
---|---|
docker (0) | 2021.03.14 |