반응형

 

도서 '데이터베이스 첫걸음'을 보고 책 내용과 그 이외의 부족한 부분을 채워가며 공부한 내용입니다.

 


키워드 : MySQL, 쿼리, SELECT


1. MySQL 커넥션 만들기

커넥션

로그인해서 프롬프트가 표시되었다는 것은 로그인 전과 로그인 후로 사용자와 MySQL의 관계가 변했다는 것을 의미
이는 사용자와 MySQL이 접속(연결)되었다고 하는데 이 연결을 '커넥션'이라 함.
  • 커넥션이 유지되는 동안은 사용자는 데이터베이스와 무언가를 주고받을 수 있음

 

※ 프롬프트(Prompt)

명령을 입력하라 재촉하는 것

ex) mysql>

 

커넥션이 성립되었음을 나타내는 문장

Your MySQL connection id is 18
  • MySQL은 동시에 여러 개의 커넥션을 유지하는 것이 가능(동시에 복수의 사용자와 연결하는 것이 가능)
  • 커넥션의 시작과 종료 사이에 DBMS와 다양한 교환을 하는데 그 교환의 시작과 종료까지의 단위를 '세션(Session)'이라 함(커넥션 확립 후 세션이 만들어짐)

 

커넥션의 상태를 조사하는 명령

mysql> show status like 'Thread_connected';
  • 각 DBMS마다 명령어가 다름
  • MySQL의 경우 show status ~

커넥션의 로그오프

mysql> quit

 

SQL과 관리 명령의 차이

관리 명령 

관계형 데이터베이스의 데이터를 조작하는 도구로 'SQL'이라는 언어 존재
DBMS는 SQL이외에도 다양한 용도의 명령어를 준비(이 명령어가 관리 명령)
  • ex)
    • mysql> show status like 'Uptime'; (MySQL이 가동된 시점부터의 경과시간(초))
    • mysql> show status like 'Queries'; (MySQL이 실행한 SQL 문의 수)
  • 관리 명령은 DBMS가 정상적으로 동작하는지 감시 or 이상한 동작을 할 때 문제 해결을 위해 정보수집을 하는 용도

 

SQL과 관리명령 구분법(대부분의 Case)

  • SQL문은 반드시 'SELECT, INSERT, DELETE, UPDATE' 중 하나의 단어로 시작
  • 이외의 단어로 시작한다면 관리 명령

쿼리(Query)

쿼리(Query)란 쉽게 이야기해서 데이터베이스에 정보를 요청하는 것

쿼리(Query)는 웹 서버에 특정한 정보를 보여달라는 웹 클라이언트 요청(주로 문자열을 기반으로 한 요청)에 의한 처리

쿼리(Query)는 대개 데이터베이스로부터 특정한 주제어나 어귀를 찾기 위해 사용

주제어가 검색엔진의 검색필드 내에 입력된 다음, 그 내용이 웹 서버로 넘겨짐

  • 간단한 홈페이지를 개발할 경우 대부분의 홈페이지는 게시판 혹은 방명록 정도의 데이터를 보관할 수 있는 형태의 DB를 구축
  • 이러한 DB는 개발자의 의도에 따라 약간씩 다르기는 하지만 대부분 유사한 형태의 구조를 가지는 테이블을 포함하게 되는데, 여기서 사용자 혹은 관리자들은 이러한 테이블에서 특정 조건에 해당하는 자료를 조회하거나 출력하는 등의 작업
  • 이렇게 데이터가 입력된 DB에서 원하는 조건의 데이터를 가져오려면 특정한 구조의 프로그램언어(DB언어)를 사용하게 되는데 이러한 DB용 언어를 SQL
  • 이러한 SQL언어는 대부분의 DB가 95% 이상 되는 호환성을 가진 언어로 이루어져 있으며 이러한 언어로서 특정DB에서 원하는 조건의 데이터를 조작하는 언어의 집합(문장)을 쿼리(Query)
  • 이러한 쿼리(Query)는 DB를 조작하는 여러 가지 형태로 표현될 수 있으며 데이터를 다루는 프로그램에서는 필수적인 요소

쿼리(Query)를 바로 번역을 하면 '질의'라고 해석

  • DB서버가 구동이 되고 있는 환경에서(Oracle, Cubrid, MsServer, MySQL, Tibero, Altibase 등) DB에 대해 명령문을 작업하게 되는데 이 때의 명령문을 쿼리(Query)

■ DB(DataBase, 데이터베이스): 데이터를 정리하여 보관하고 있는 저장소

■ DB Server: 데이터를 정리하여 보관하고 있는 저장서버

★ 내부 과정 예시 ★

사용자 -> 질의 ( 쿼리문 ) -> DB서버

사용자 <- 결과 <- DB서버

  • 질의를 보내고 결과를 얻는 것
  • 도스를 생각해보면 커맨드 창에서 DIR을 치면 해당 위치의 폴더명들이 나열이 되는 것처럼, 특정프로그램(혹은 유틸리티) 창에서 쿼리(Query)를 치면 결과 값이 보여짐
  • 하지만, 세세히 따지고 들어가면 개념 자체가 명령문과는 사뭇 다르며 그렇기 때문에 질의문(쿼리, Query)라고 부름
  • 이 또한 쿼리(Query) 표준이 있기 때문에 DB종류에 따라서 조금씩은 다르더라도 큰 틀은 벗어나지 않게 구성

 

질의문 = QUERY = 쿼리 = SQL

 

 

 

 

2. 관계형 데이터베이스의 계층

데이터베이스를 사용한다 = DBMS에 저장된 테이블을 SQL을 사용해서 조작하는 것

데이터베이스 내부의 테이블 = 몇 개의 그룹(스키마, Schema)으로 나뉘어서 관리

 

스키마

스키마의 상위 계층 = 데이터베이스

데이터 베이스 상위 계층 = 인스턴스

 

인스턴스(Instance)

물리적 개념(메모리나 CPU를 사용하는 존재), DBMS가 동작할 때의 단위
OS 입장에서는 '프로세스'라고도 부름
DBMS에 따라 이것을 서버 or 서버 프로세스 라고 부름

관계형 데이터베이스 계층 구조
MySQL의 계층구조(데이터베이스 생략)

3계층 : Oracle, MySQL

4계층 : SQL Server, DB2, PostgreSQL

 

3. SELECT

등록된 데이터베이스 확인하기

show databases;

 

등록된 데이터베이스 확인하기


사용할 데이터베이스 테이블 선택하기

use world; //위의 표시된 데이터베이스 테이블 중 하나
show tables;

 

사용할 데이터베이스 테이블 선택하기


테이블을 지정해서 데이터 전부 출력(선택)하기

//위에서 city, country, countrylanguage 세 테이블이 있는것을 확인 -> city 테이블 데이터 전부를 Select

select*from city;

데이터 출력, 아래에도 계속 있음


테이블을 지정해서 조건에 맞는 데이터 출력(선택)하기

//한국 도시 이름만 추려서 출력

select*from city where countrycode = 'KOR';
  • Where 구문을 지정해 'Where' 조건 형태로 입력

조건에 맞는&nbsp;데이터&nbsp;출력(선택)하기


불필요한 열을 제거하고 표시

//Name과 Population

select Name, Population from city where district = 'chollanam';
  • select 뒤에 콤마(,)로 구분해 입력하면 지정한 열만 출력


다양한 조건 추가

//위의 조건에 인구수가 15만명 이상인 조건을 추가하기

select Name, Population from city where district = 'chollanam' and population>150000;
  • and 연산자를 이용해서  조건 추가

 

//중복 행 제외하고 표시하기

select distinct district from city where countrycode = 'KOR';


  • 한 개의 데이터베이스 = 복수의 테이블

 

MySQL 관리 명령 정리

  • show datatbases;
    • 데이터베이스를 살펴보기
  • use 데이터베이스명;
    • 디폴트(현재) 데이터베이스를 지정
  • show tables;
    • 데이터베이스 내의 테이블 리스트를 얻기

 

SELECT 문 정리

SELECT 열명 FROM 테이블명;
  • 열명에 * -> 지정한 테이블의 전체열 지정 가능
명령 설명
select*from city; 디폴트 데이터베이스의 city를 SELECT
select*from world.city; '데이터베이스명.테이블명' 형태로 명시적으로 world 데이터베이스의 city를 SELECT

 

WHERE 조건

SELECT 열명 FROM 테이블명 WHERE 조건;
  • SELECT문 끝에 WHERE 조건을 추가하는 형태로 조건 추가
  • 조건에는 비교연산자(=, >, <, <>(같지않다)), 'AND'와 'OR'가 자주사용

ex) select Name,Population from city where district = 'chollanam' AND population > 150000;

 

 

우선순위

  • 괄호를 사용하는 것을 추천

 

SQL의 기초적인 기술 규칙

  • SQL문의 마지막에 딜리미터(문장의 단락을 의미하는 기호 = 대부분 세미콜론(;))를 붙임
  • 키워드의 대문자와 소문자는 구별X
  • 정수는 기존 그대로, 문자열이나 날짜 시작은 작은 따옴표(' ')로 표기
    • ex) 수치로 값 지정 = 1000
    • ex) 문자열로 수치를 지정 = '1000'
  • 단어는 반각 스페이스나 개행으로 구별(전각 스페이스는 사용x)

 

중복 배제

select distinct district from city where countrycode = 'KOR';
  • distinct 를 사용해 중복 배제

 

 

검색 결과 정렬

select*from city where countrycode = 'KOR' order by population;
  • order by 를 사용해 검색결과 정렬 가능
  • select의 결과는 보통 열(컬럼)과 행(레코드)로 구성된 2차원 표로 표시
  • 아무 언급이 없는 경우 표를 작성할때 순서대로 출력
  • order by ~ (asc)= 오름차순 (asc는 기본값 = 생략가능)
  • order by ~ desc = 내림차순

 

테이블 집약

select count(*) from city where countrycode = 'KOR';
  • 실제로 행 수를 카운트 받기 = count(*)
  • 최소 = min()
  • 최대 = max()
  • 총수 = sum()
  • 평균 = avg()
  • count는 NULL을 포함해서 계산하고 min() max() sum() avg() 는 NULL을 제외하고 집계
  • min()과 max()는 수치 데이터 외에도 사용 가능
    • ex) min(city) = Andong(A부터 시작하는 도시 중 가작 빠른 도시)
    • ex) max(city) = Yosu(Z부터 시작하는 도시 중 가장 마지막 도시)

ex) select min(population), max(population), sum(population), avg(population) form city where countrycode = 'KOR';

 

 

그룹 집약

select group_concat(name) from city where countrycode = 'KOR' and district = 'Chollabuk';
  • 한국의 CHhollabuk 지역의 name을 한 줄(한 문자열)에 집약시켜라
  • group_concat(원하는 데이터)
  • 문자열의 경우 문자열의 결합('나는' + `~다' = '나는~다'), 수치의 경우 수치에 대한 집계
  • 중복 배제는 안되기 때문에 중복 배제를 하려면 distinct도 사용해야함

 

 

그룹으로 구분하기

select district, count(*) from city where countrycode = 'KOR' group by district;
  • group by 데이터명
  • 데이터명 별로 그룹을 나눠서 표기
  • city 테이블의 countrycode가 'KOR'인 것 중 district(행정구역)별로 행 수를 count 한 것으로 확인하기

 

조건을 추가해 그룹 구분하기

select district, count(*) from city where countrycode = 'KOR' group by district having count(*) = 6;
  • select count(*) -> 행 수를 count
  • district -> district만 표시
  • having count(*) = 6 -> 행 수가 6개인 것만 뽑기(조건)
    • count와 같은 집양함수를 작성할 수 있는 경우
      • select
      • order by
      • having

 

①SELECT ②FROM ③WHERE ④GROUP BY ⑤HAVING ⑥ORDER BY

 

 


참고 자료

1. 미크, 기무라메이지, 데이터베이스 첫걸음(출판지 : 한빛미디어, 2016)

반응형

'Spring' 카테고리의 다른 글

Spring Security 3  (0) 2022.05.25
JDBC - 데이터 UPDATE, INSERT, DELETE  (0) 2022.05.23
JDBC - DataSource를 이용한 데이터 연결  (0) 2022.05.20
JDBC - 기본 구조와 API  (0) 2022.05.20
Spring 데이터로 작업하기 3  (0) 2022.05.18

+ Recent posts