SQL 2020. 4. 14. 19:28

JOIN 의 개념

서로 다른 테이블을 공통 컬럼을 기준으로 합치는(결합하는) 테이블 단위 연산

조인의 결과 테이블은 이전 테이블의 컬럼 수의 합과 같다.

SELECT * FROM 테이블 1 JOIN 테이블 2 ON 테이블1.컬럼명 = 테이블2.컬럼명 ...

조인 시 서로 다른 테이블에 같은 컬럼명이 존재하면 구분을 위해 테이블명.컬럼명으로 사용해서 표시

 

예제

- city 테이블과 country 테이블을 조인하시오. (city.CountryCode = country.Code)

- 국가코드와 해당 나라의 GNP 를 표시하시오

 

결과 확인

- SELECT * FROM city JOIN country ON city.CountryCode = country.Code;

- SELECT city.CountryCode, country.GNP FROM city join country ON

city.CountryCode = country.Code;

 

 

 

 

 

 

JOIN 의 종류

조인 시 NULL 값을 허용하는 내부 조인(불가)과 외부조인(허용)으로 구분

INNER JOIN / LEFT JOIN / RIGHT JOIN / FULL JOIN

 

INNER JOIN

조인 시 NULL 값을 허용하지 않음

(NULL 값을 가진 레코드는 조인결과에 빠짐)

LEFT JOIN

조인 시 JOIN 의 왼쪽 테이블의 NULL 값을 포함해서 표시

RIGHT JOIN

조인 시 JOIN 의 오른쪽 테이블의 NULL 값을 포함해서 표시

FULL JOIN

MySQL 은 지원하지 않음

 

 

예제

- city 테이블에 국가코드가 없는 도시가 있는지 확인

- country 테이블에는 존재하지만 도시가 하나도 없는 나라가 있는지 확인

- 이 때 INNER JOIN / LEFT JOIN / RIGHT JOIN 의 차이점으로 확인

 

결과 확인

- SELECT COUNT(*) FROM city WHERE CountryCode is NULL;

- SELECT COUNT(*) FROM city LEFT JOIN country ON city.CountryCode = country.Code;

(country 값이 존재하지 않는 city 는 포함)

- SELECT COUNT(*) FROM city RIGHT JOIN country ON city.CountryCode = country.Code;

(country 중 도시 수가 하나도 없는 country 는 포함)

 

 

 

 

 

 

별명(ALIAS)

SQL 쿼리 결과 생성 시 컬럼명에 대한 별명을 사용해 표시하는 기능

SELECT 테이블명1.컬럼명1 AS 별명1, 테이블명2.컬럼명2 AS 별명2 FROM ....

조인할 때 많이 사용된다

 

예제

- city 테이블과 country 테이블을 조인해서 국가코드 'KOR' 인 나라의 축약표시명(Abbr) 과 정식명(Full Name)을 표시하시오

 

결과 확인

- SELECT city.CoutryCode AS Abbr, country.Name AS FullName FROM city JOIN country on city.CountryCode = country.Code WHERE city.CountryCode = 'KOR';

 

 

 

 

뷰 (VIEW)

SQL 쿼리의 결과값을 임시 테이블로 저장해서 사용할 수 있음

사용 용도가 끝나면 명시적으로 삭제해야 함 (DROP VIEW ....)

CREATE VIEW 뷰명 AS SELECT ...

 

예제

CREATE VIEW sampleView AS SELECT city.CountryCode AS Abbr, country.Name AS FullName FROM city JOIN country ON city.CountryCode = country.Code WHERE city.CountryCode = 'KOR';

SELECT * FROM sampleView;

posted by 핵커 커뮤니티
:
SQL 2020. 4. 14. 19:21

결과값 일부 조회 (ROWNUM, TOP)

SQL 쿼리 결과 중 상위 몇 개만 보여주는 쿼리

SELECT 컬럼명 1, 컬럼명 2, ... FROM 테이블명 WHERE 조건절 LIMIT 숫자

대표적인 비표준기능 (DBMS 종류마다 다름)

예제

- 국가코드가 'KOR' 인 도시들 중 인구수 많은 순서로 상위 10개만 표시하시오

결과 확인

- SELECT CountryCode FROM city WHERE CountryCode = 'KOR' ORDER BY Population DESC LIMIT 10;

집합함수 (Aggregation Function)

테이블의 전체 레코드를 대상으로 특정 컬럼을 적용해서 한 개의 값을 리턴하는 함수

COUNT(), AVG(), SUM(), MIN(), MAX(), FIRST(), LAST(), ....

     - COUNT()   ->  레코드의 개수를 리턴하는 함수

     - SUM() / AVG()   ->   컬럼값의 합/평균을 리턴

     - MIN() / MAX()   ->   컬럼값의 최소/최대값을 리턴

사용법 : SELECT aggregation_function(컬럼명) FROM 테이블명 WHERE 조건절

예제

- City 테이블에서 국가코드가 'KOR' 인 도시의 수를 표시하시오

- City 테이블에서 국가코드가 'KOR' 인 도시들의 인구수 총합 / 평균을 구하시오

- City 테이블에서 국가코드가 'KOR' 인 도시들의 인구수 중 최대값 / 최소값을 구하시오

결과 확인

- SELECT COUNT(*) FROM city WHERE CountryCode = 'KOR'

- SELECT SUM(Population) FROM city WHERE CountryCode = 'KOR'

- SELECT AVG(Population) FROM city WHERE CountryCode = 'KOR'

- SELECT MIN(Population) FROM city WHERE CountryCode = 'KOR'

- SELECT MAX(Population) FROM city WHERE CountryCode = 'KOR'

유용한 함수들

LENGTH() - 레코드의 문자열 컬럼의 글자수를 리턴한다.

MID() - 문자열의 중간부분을 리턴한다.

UPPER() / LOWER() - 문자열을 대문자/소문자로 리턴한다.

ROUND() - 레코드의 숫자 컬럼값을 반올림

posted by 핵커 커뮤니티
:
SQL 2020. 4. 14. 19:18

DISTINCT 연산자

SELECT 문의 결과 값에서 특정 컬럼만 출력할 경우 중복된 값들이 나오는 경우에 이를 제거해서 표시하는 기능

SELECT DISTINCT 컬럼명 1, 컬럼명 2, ... FROM 테이블명

 

예제

- 국가코드가 'KOR' 인 도시들의 국가코드를 표시하시오.

- 국가코드가 'KOR' 인 도시들의 국가코드를 중복제거해서 표시하시오.

 

결과 확인

- SELECT CountryCode FROM city WHERE CountryCode = 'KOR';

- SELECT DISTINCT CountryCode FROM city WHERE CountryCode = 'KOR';

 

 

 

 

논리연산자 (AND, OR, NOT)

SELECT 문의 조건절에 논리 조건 적용해서 적용할 수 있는 연산자

SELECT * FROM 테이블명 WHERE (NOT) 조건 1 AND/OR (NOT) 조건 2 ..... 

 

예제

- 국가코드가 'KOR' 이면서 인구가 100만 이상인 도시를 찾으시오

- 국가코드가 'KOR', 'CNN', 'JPN' 인 도시를 찾으시오

- 국가코드가 'KOR' 이 아니면서 인구가 100만 이상인 도시를 찾으시오.

 

 

 

결과 확인

- SELECT * FROM city WHERE CountryCode = 'KOR' AND Population > 1000000

- SELECT * FROM city WHERE CountryCode = 'KOR' OR CountryCode = 'CNN' OR CountryCode = 'JPN'

- (위와 같은 코드) SELECT * FROM city WHERE CountryCode in ('KOR', 'CNN', 'JPN')

 

- SELECT * FROM city WHERE CountryCOde != 'KOR' AND Population > 1000000

posted by 핵커 커뮤니티
:
SQL 2020. 4. 14. 19:17

SQL (Structured Query Language) :

     - 관계형 데이터베이스에서 사용하는 표준 질의언어를말한다.

     - 사용 방법이나 문법이 다른 언어(Java, C, C#, Java)보다 단순하다.

     - 모든 DBMS에서 사용 가능하다.

     - 인터프리터 언어

     - 대소문자 구별하지 않는다.

 

 

 

DML :

     - 데이터베이스의 테이블에 있는 내용을 직접 조작하는 기능

     - 테이블의 레코드를 CRUD (Create, Retrieve, Update, Delete)

 

SQL 문

내용

insert

데이터베이스 객체에데이터를 입력

delete

데이터베이스 객체에데이터를 삭제

update

데이터베이스 객체 안의데이터 수정

select

데이터베이스 객체 안의데이터 조회

 

 

DDL :

     - 데이터베이스의 스키마를 정의, 생성, 수정하는 기능

     - 테이블 생성, 컬럼 추가, 타입 변경, 각종 제약조건 지정,수정 등

 

SQL 문

내용

create 

데이터베이스 객체를생성

drop

데이터베이스 객체를삭제

alter

기존에 존재하는데이터베이스 객체를다시 정의

 

 

DCL :

     - 데이베이스의 테이블에 접근 권한이나 CRUD 권한을 정의하는기능

     - 특정 사용자에게 테이블의 조회권한 허가 / 금지 등

 

SQL문

내용

grant

데이터베이스 객체에권한을 부여

revoke

이미 부여된데이터베이스 객체권한을 취소

 

CRUD (Create, Retrieve, Update, Delete) :

이름

조작

SQL

create 

read (retrieve)

생성

읽기 (인출)

insert

select

update

갱신

update

delete (destroy)

삭제 

delete

 

     Create : 데이터베이스 객체 생성     

          - insert into

          - 새로운 레코드를 추가

 

     Update : 데이터베이스 객체 안의 데이터 수정

          - update     

          - 특정 조건의 레코드의 컬럼 값을 수정

 

Delete : 데이터베이스 객체의 데이터 삭제

     - delete     

     - 특정 조건의 레코드를 삭제

 

Retrieve : 데이터베이스 객체 안의 데이터 검색

     - select     

     - 조건을 만족하는 레코드를 찾아 특정 컬럼 값(모두표시 *)을 표시

 

 

 

 

select 명령문 :

select 컬럼명 from 테이블명 where 조건절;

 

- "world" DB에서의 쿼리 예제

국가 코드가 'KOR' 으로 되어 있는 도시들의 이름을구하시오

select Name from city where CountryCode='KOR';

 

인구가 500만 이상인 도시들의 이름을 구하시오

select Name from city where Population > 5000000;

 

 

insert into 명령문 : 

insert into 테이블명 (컬럼명) values (값);

 

- 예제

# 각각의 필드와 대응 시켜줘서 insert 를 시켜주어야한다.

insert into city (ID, Name, CountryCode, District, Population) values (10000, "Sample", "KOR", "Test", 1000000);

 

# 이 경우에는 모든 컬럼 값들이 일일히 필드와대응되면 생략 가능

insert into city values (20000, "SampleTest", "KOR", "Test", 2000000);

 

- 결과 확인

# ID 가 100000 인 레코드 출력

select * from city where ID = 20000;

 

# ID 가 200000 인 레코드 출력

select * from city where ID = 10000;

 

 

 

 

update 명령문 : 

update 테이블명 set 컬럼명=값, ..... where 조건절;

 

- 예제

# ID 가 10000 인 레코드의 name 을"SampleRevised" 로 변경

update city set name = "SampleRevised" where id = 10000;

 

- 결과 확인

# ID 가 100000 인 레코드 출력

select * from city where ID = 10000;

 

 

delete 명령문 :

delete from 테이블명 where 조건절;

 

- 예제 

# ID 가 20000 이며 Population 이 2000000 인레코드를 삭제

delete from city where (ID = 20000) AND (Population = 2000000);

 

# ID 가 10000 이며 Population 이 1000000 인레코드를 삭제

delete from city where (ID = 10000) AND (Population = 1000000);

 

- 결과 확인

# ID 가 100000 인 레코드 출력

select * from city where ID = 10000;

 

# ID 가 200000 인 레코드 출력

select * from city where ID = 20000;

'SQL' 카테고리의 다른 글

[SQL] JOIN VIEW,별명알아보자  (0) 2020.04.14
[SQL] 일부결과 및 집합함수  (0) 2020.04.14
[SQL] 연산 논리 (기초 배우기 )  (0) 2020.04.14
[SQL] 설치하기 / 다운로드  (0) 2020.04.11
posted by 핵커 커뮤니티
:
SQL 2020. 4. 11. 13:22

https://dev.mysql.com/downloads/mysql/

posted by 핵커 커뮤니티
: