SQL study [21.08.17]
본문 바로가기
Data Base/Daily_study

SQL study [21.08.17]

by 조훈이 2021. 8. 18.

SQL study [21.08.17]


분산 데이터베이스

   - 여러 곳으로 분산되어있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스

   - 논리적으로 동일한 시스템에 속하지만, 컴퓨터 네트워크를 통해 물리적으로 분산되어 있는 데이터들의 모임

   - 데이터베이스를 연결하는 빠른 네트워크 환경을 이용하여 데이터베이스를 여러 지역 여러 노드로 위치시켜 사용성/성능 등을 극대화 시킨 데이터베이스

 

   * 장점

      1. 지역 자치성, 점증적 시스템 용량 확장

      2. 신뢰성 / 가용성 

      3. 효용성 / 융통성

      4. 빠른 응답 속도 / 통신 비용 절감

      5. 데이터의 가용성과 신뢰성 증가

      6. 시스템 규모의 적절한 조절

      7. 각 지역 사용자의 요구 수용 증대

 

   * 단점

      1. 소프트웨어 개발 비용

      2. 오류의 잠재성 증대

      3. 처리 비용의 증대

      4. 설계, 관리의 복잡성과 비용

      5. 불규칙한 응답 속도

      6. 통제의 어려움

      7. 데이터 무결성에 대한 위협

 

Note

   - 엔터티 간에 논리적 관계가 있을 경우 즉, 엔터티 간에 관계(Relationship)을 정의하여 관련 엔터티 상호간 업무적인 연관성이 있음을 표현한 경우에는, 이 데이터들이 업무적으로 밀접하게 연결되어 상호간에 조인이 자주 발생한다는 것을 의미하는 것이기 때문에, 데이터베이스 상에서 DBMS가 제공하는 FK Constraints를 생성했는지 여부와 상관없이 조인 성능을 향상시키기 위한 인덱스를 생성해주는 것이 좋다.

 

SQL Workbench 연습

SHOW databases;
SHOW table status;
USE world;
DESCRIBE city; #city 열에 대한 정보를 볼 수 있다, DESC 로 줄일 수 있다.

SELECT * FROM city
WHERE Population <= 200000;

SELECT * FROM city
WHERE 100000 <= Population AND Population <= 300000; #OR, AND, NOT 관계연산자 존재

SELECT * FROM city
WHERE Population BETWEEN 100000 AND 300000; # 위와 같은 의미

SELECT * FROM city
WHERE CountryCode = 'KOR' OR Name = 'Seoul';

SELECT * FROM city
WHERE CountryCode IN('KOR', 'JOR'); #이 안에 있는 데이터를 가진 정보들을 체크

SELECT * FROM city
WHERE CountryCode LIKE '_OR'; 	#_OR 의 countryCode 를 가지는 데이터들 나열
								# ex) KOR, JOR 등 나온다.
                                # 이렇게 시작하는 이름이 있었는데.. 할 때 사용 가능
                                
SELECT * FROM city
WHERE CountryCode = ( 	SELECT CountryCode
						FROM city
						WHERE Name = 'Seoul'); #SubQuery
						# 쿼리문 안에 쿼리문이 또 있는 것
                        # Seoul 이라는 도시 이름을 가진 city 의 CountryCode를 가진
                        # city들의 data들을 출력.
                        # SubQuery 결과가 둘 이상이 되면 에러 발생
                        
SELECT * FROM city
WHERE Population > ANY ( 	SELECT Population
							FROM city
							WHERE District = 'New York')
                            ORDER BY ID DESC;
					# 서브쿼리의 결과는 여러개가 나온다.
                    # ANY 는 서브쿼리의 여러개 결과중 한 가지만 만족해도 가능하다.
                    # 이 경우는 그럼 서브쿼리 결과중 가장 작은 값보다 큰
                    # Population 이 된다.
                    # = ANY 구문은 IN 과 동일한 의미이다.
                            
SELECT * FROM city
WHERE Population > ALL ( 	SELECT Population
							FROM city
							WHERE District = 'New York')
                            ORDER BY ID DESC;
					# 서브쿼리 결과의 모든 값들보다 큰 Population 가지는
                    # 데이터들이 나와야 한다. 즉, 위 상황은
                    # 서브쿼리 결과들 중 가장 큰 값 보다 큰 Population 가지는
                    # data들이 해당이 된다.
					# ORDER BY 의 default 는 ASC(오름차순)
                    
SELECT * FROM city
WHERE Population > 400000
ORDER BY CountryCode ASC, Population DESC;
		# CountryCode 는 오름차순으로 정렬하면서
        # CounterCode 가 같은 데이터들은 Population 으로 내림차순 정렬
        
SELECT DISTINCT CountryCode
FROM city; # DISTINCT : 중복이 된 CountryCode 들을 제거해서 보여준다.

SELECT *
FROM city
ORDER BY Population DESC
LIMIT 10; 	# 인구수 내림차순 상위 10개

SELECT CountryCode, MAX(Population) AS 'Average' # 데이터 출력할때 열의 이름을 'Average'로 출력해줘
FROM city
GROUP BY CountryCode;
		# GROUP BY : 그룹으로 묶어주는 역할. 집계함수 사용
        # 위는 CountryCode로 묶으면서 그 CountryCode그룹에서
        # Population 가장 큰 애의 Population 출력
        # AVG : 그 그룹에서 Population 의 평균값 출력
        # COUNT : 행의 개수
        # COUNT(DISTINCT) : 중복 제외된 행의 개수
        # STDEV : 표준편차
        # VARIANCE : 분산

 


오늘의 한 마디 : SQL은 재밌는게 느껴지는 하루이다.

728x90

'Data Base > Daily_study' 카테고리의 다른 글

SQL study [21.08.19]  (0) 2021.08.19
SQL study [21.08.18]  (0) 2021.08.19
SQL study [21.08.16]  (0) 2021.08.17
SQL study [21.08.15]  (0) 2021.08.15
SQL study [21.08.14]  (0) 2021.08.15

댓글