조건 절 WHERE를 활용한 데이터 검색

  • 원하는 결과를 얻기위해 조건을 제한함.
  • WHERE절은 FROM절 다음에 위치한다.
  • 문자열, 날짜는 'Single Quotation'안에 표기해야 함.
    • 명령어는 대소문자 구분을 하지 않지만,
      테이블 내에 저장된 데이터 값은 대소문자를 구분함.
  • 수행될 조건 절에는 비교 연산자, SQL 연산자, 논리 연산자, 열 이름, 표현식, 숫자, 문자 등 사용 가능.
  SELECT  열 이름    <-- 출력 하려는 열
  FROM    테이블 이름 <-- 참조 하려는 테이블
  WHERE   원하는 조건 <-- 조건 식
  • 데이터가 조회되는 논리 순서
    1. FROM : 참조하려는 테이블로부터
    2. WHERE : 해당하는 조건이 맞는
    3. SELECT: 열을 선택해서 조회

WHERE절에 사용하는 연산자의 종류

연산자 설명 예시
비교 조건을 비교 =, <, > 등
SQL 비교 조건 확장 BETWEEN, IN 등
논리 논리 조건 연결 AND, OR

연산자의 우선 순위

괄호 > 부정 연산 > 비교 연산 > SQL 연산
NOT > AND > OR 순
연산자의 순서는 데이터 조회 속도에 영향을 미침 -> 고급 SQL 영역임.

비교 연산자 : 비교 조회 조건 주기

SELECT *
FROM  employees
WHERE employee_id = 100;
SELECT *
FROM  employees
WHERE first_name = 'David';
SELECT
  *
FROM employees
WHERE employee_id >= 105;

SQL 연산자 : 조회 조건 확장하기

BETWEEN

SELECT
  *
FROM employees
WHERE
  salary BETWEEN 10000 AND 20000;

IN

SELECT
  *
FROM employees
WHERE
  salary IN (10000, 17000, 24000);

LIKE와 '%'

SELECT
  *
FROM employees
WHERE
  job_id LIKE 'AD%';

'_'

SELECT
  *
FROM employees
WHERE
  job_id LIKE 'AD___';

IS NULL

SELECT
  *
FROM employees
WHERE
  manager_id IS NULL;

논리 연산자 : 조건 논리를 계속 연결하기

AND

SELECT
  *
FROM employees
WHERE
  salary > 4000
AND
  job_id = 'IT_PROG'

OR

SELECT
  *
FROM employees
WHERE
  salary > 4000
AND
  job_id = 'IT_PROG'
OR
  job_id = 'FL_ACCOUNT'

!=와 <>

SELECT
  *
FROM employees
WHERE
  employee_id != 105
SELECT
  *
FROM employees
WHERE
  employee_id <> 105

IS NOT NULL

SELECT
  *
FROM employees
WHERE
  manager_id IS NOT NULL
728x90
반응형

'Database' 카테고리의 다른 글

[SQL] GROUP  (0) 2019.12.26
[SQL] 데이터를 가공하기 위한 DB 함수들  (0) 2019.12.26
[SQL] 데이터 조회 SELECT  (0) 2019.12.23
DB(Database)란  (0) 2019.12.23
DB 설치 없이 SQL 실습하기  (0) 2019.12.21

데이터 조회

  • sql명령어는 여러개의 절이 모여 하나의 문장을 구성,  `;` 으로 마쳐야 함.
  • 대소문자 구분하지 않음.

SELECT 기본 문법

기본적으로 SELECT절과 FROM절로 구성.

  • SELECT : 출력하고자 하는 칼럼의 이름들을 기술.
  • FROM : 조회하고자 하는 테이블의 이름을 기술.
    ex)
    SELECT    열 이름
    FROM      테이블 이름

전체 데이터 조회하기

테이블내 모든 컬럼을 출력하고자 한다면 컬름 이름 대신 *로 조회.

SELECT  *
FROM    employees;

원하는 열만 조회하고 정렬하기

SELECT employee_id, first_name, last_name
FROM   employees
ORDER BY  employee_id DESC;

중복된 출력값 제거하기

DISTINCT 뒤에 열 이름이 계속 나열된다면 원하는 값이 나오지 않을 수 있으니 ()를 신경 써야 함.

SELECT DISTINCT job_id, employee_id
FROM   employees;
SELECT DISTINCT( job_id ), employee_id
FROM   employees;

효율적인 SQL을 위한 별칭(alias)

AS를 붙일 수도 있고, 떼도 됨.
가독성을 위해서는 붙이는 걸 권장함.

SELECT
  employee_id AS 사원번호
  ,   first_name 이름
  ,   last_name   성
FROM
  employees;

데이터 값 연결하기

연결 연산자 ||
[ 열 이름 ] || [ 열 이름 ] or [ 열 이름 ] '[문자]'

SELECT
  employee_id,
  first_name || ' ' || last_name,
  email || '@' || 'company.com'
FROM   employees;

산술 처리: 데이터 값 계산

데이터 값을 계산할 때 사용.
산술 표현식에는 열 이름, 숫자, 날짜, 산술 연산자 등을 포함 할 수 있음.
산술 연산자는 가감승제( +, -, *, / )가 있음.
연산은 (), *, /, +, -순으로 함.

employees 테이블에서 employee_id, salary, salary에 500을 더한 값, 100을 뺀값. 10%를 추가해서 2로 나눈값을 출력하시오.

SELECT
  employee_id,
  salary,
  salary + 500,
  salary - 100,
  (salary * 1.1) / 2
FROM
  employees;
SELECT
  employee_id AS 사번,
  salary AS 급여,
  salary + 500 AS 추가급여,
  salary - 100 AS 인하급여,
  (salary * 1.1) / 2 AS 조정급여
FROM
  employees;
728x90
반응형

'Database' 카테고리의 다른 글

[SQL] 데이터를 가공하기 위한 DB 함수들  (0) 2019.12.26
[SQL] 조건절 WHERE  (0) 2019.12.24
DB(Database)란  (0) 2019.12.23
DB 설치 없이 SQL 실습하기  (0) 2019.12.21
nodejs mysql 연동 에러  (0) 2019.12.11

DB : Database

데이터의 집합, 검색 수정 삭제 추가등 관리.

파일 시스템의 문제점 해결

  • 데이터의 종속
  • 데이터의 중복
    • 일관성 - 동일성을 유지하기 위해 데이터 중복을 피하기 위해
    • 보안성 - 동일한 수준에서 보안 유지
    • 경제성 - 저장되는 공간에 대한 비용 절감
    • 무결성 - 데이터의 정확성을 유지

DB의 정의

  • 통합된 데이터 (Integrated Data)
    • 원칙적으로 데이터 중복되어 있지 않게함
  • 저장된 데이터 (Stored Data)
    • 기억장치에 저장된 데이터
  • 운영 데이터 (Operational Data)
    • 존재 목적이 명확하고 유용성을 지니고 있음
  • 공용 데이터 (Shared Data)
    • 여러 사용자들이 서로 다른 목적으로 공유가 가능한.

DB의 특징

실시간 접근성, 지속적인 변화, 동시 공유, 내용에 대한 참조

데이터베이스 관리시스템 (DBMS : DataBase Management System)

효율적으로 관리하고 검색할 수 있는 환경을 제공, 체계적인 활용을 가능케함.
응용프로그램과 데이터베이스의 중계

관계형 데이터베이스 관리 시스템

일반적인 DB, 작성과 이용이 편함, 응용프로그램을 변경하지 않아도 참삭이 편함.
정보들을 Table형태로 저장함.
테이블은 2차원 형태의 표처럼 row(행), column(열)로 구성.

Table ; 표

Row \ Table Column Column Column
Number 1 2 3
Eng Char A B C
Kor Char

참고

SQL? (Structured Query Language)

사용자와 관계형 데이터베이스를 연결시켜주는 표준 검색언어.
쉽게 얘기해서 데이터베이스를 다루기위해 디자인된 언어임.
프로그래밍 언어는 아니지만 Java 등 다른 프로그래밍 언어보다 더 많이 사용될 수밖에 없음.

728x90
반응형

'Database' 카테고리의 다른 글

[SQL] 데이터를 가공하기 위한 DB 함수들  (0) 2019.12.26
[SQL] 조건절 WHERE  (0) 2019.12.24
[SQL] 데이터 조회 SELECT  (0) 2019.12.23
DB 설치 없이 SQL 실습하기  (0) 2019.12.21
nodejs mysql 연동 에러  (0) 2019.12.11

DB 설치 없이 Oracle DB 실습하기.

SQL에서 부족한 점이 느껴져서 공부 하려고 했는데 Oracle DB를 어디에 설치할지 고민이였음,
BUT!! Oracle에서 설치 없이 SQL을 돌릴 수 있는 웹 기반 서비스가 있었음..
당연히 오라클 계정이 있어야 함.
https://livesql.oracle.com/

세션, 쿠키, JS 기반으로 테이블과 데이터들을 정의하고, 일정 시간이 지나면 데이터가 삭제 되는 듯?

Oracle 테스트 데이터인 HR을 사용하고 싶다면,
https://livesql.oracle.com/apex/livesql/file/content_GV8MU6SITA2V3VYI179FAJUCY.html로 접속,
RUN SCRIPT 버튼을 눌러주면 내 계정에서 사용이 가능함.

https://livesql.oracle.com/apex/f?p=590:49:::NO:::로 접속 하면 그 외 샘플 데이터와 학습 자료들이 있음.
단점이라면 영어라는것..?

728x90
반응형

'Database' 카테고리의 다른 글

[SQL] 데이터를 가공하기 위한 DB 함수들  (0) 2019.12.26
[SQL] 조건절 WHERE  (0) 2019.12.24
[SQL] 데이터 조회 SELECT  (0) 2019.12.23
DB(Database)란  (0) 2019.12.23
nodejs mysql 연동 에러  (0) 2019.12.11

pom.xml

pom.xml에 다음과 같은 Dependency를 추가 해 준다.
버전에 따라 지원이 되지 않을 수 있다.

<!-- JSON을 위한 Dependency -->
<dependency>
  <groupId>net.sf.json-lib</groupId>
  <artifactId>json-lib</artifactId>
  <version>2.4</version>
  <classifier>jdk15</classifier>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.5</version>
</dependency>
<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-mapper-asl</artifactId>
  <version>1.9.13</version>
</dependency>
<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-mapper-asl</artifactId>
  <version>1.9.13</version>
</dependency>
<!-- JSON을 위한 Dependency -->

servlet.xml

servlet.xml 혹은 dispatcher-servlet.xml

<mvc:annotation-driven>
  <mvc:message-converters>
  
  <!-- 
    이 부분은 Controller에서 일반적인 HTML을 리턴하기 위한 설정이다.
    JSON을 리턴하지 않을 경우는 Default 값으로 지정 되어 있기 때문에 설정 할 필요 없지만,
    JSON 리턴과 HTML 리턴을 모두 하려면은 명시적으로 설정 해 줘야 한다.
   -->
    <bean class="org.springframework.http.converter.StringHttpMessageConverter">
      <property name="supportedMediaTypes">
        <list>
          <value>text/html; charset=UTF-8</value>
        </list>
      </property>
    </bean>
    
    <!--
      Controller에서 JSON 리턴시 객체를 변환 해주기 위해서 MessageConverter가 필요하다. 
    -->
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
      <property name="supportedMediaTypes">
        <list>
          <value>application/json; charset=UTF-8</value>
        </list>
      </property>
    </bean>
    
  </mvc:message-converters>
</mvc:annotation-driven>

Controller

Controller는
필수적으로 @ResponceBody
권장 사항으로 produces = "application/json; charset=UTF-8" 를 명시 해 준다.
produces 속성은 Response의 Content-Type을 제어한다.

@RequestMapping(
    value = "/reqWaterDepth.do",
    method = RequestMethod.POST,
    produces = "application/json; charset=UTF-8")
@ResponseBody
public Map<String, List<WaterDepthDTO>> reqWaterDepth (
    HttpServletRequest req,
    HttpServletResponse res,
    @RequestParam Map<String, String> area
      ) throws Exception {
  logger.info("\n\tREQ Water Depth . do \n" + area.get("area") + "\n");
  return service.getWaterDepthInRange(area.get("area"));
}

Ajax Request

Request 부분에서는 딱히 설정할 것이 없다.

function getData(area) {
  return new Promise(function(resolve, reject) {
    console.group('drawSurvArea getData');
    area = {
      'area' : area
    };
    //  console.log( area );
    $.ajax({
      type : "POST",
      url : "/reqWaterDepth.do",
      data : area,
      dataType : 'json',
      beforeSend : function(xhr, opts) {
        console.log("before send");
        // when validation is false
        if (false) {
          xhr.abort();
        }
      },
      success : function(res) {
        console.log("SUCCESS");
        console.log(res);
        if (Object.keys(res).length === 0
            && JSON.stringify(res) === JSON.stringify({})) {
          alert('해당 영역에 수심데이터가 없습니다.');
          return;
        } else {
          resolve(res);
        }
      },
      error : function(err) {
        console.log("ERR");
        console.error(err.statusText);
        alert('데이터를 처리 하던중 에러가 발생했습니다.\n' + err.statusText + ' : ' + err.status);
        reject(err);
      }
    });
    console.groupEnd('drawSurvArea getData');
  })
}
getData(area).then(function(data) {
  console.log('THEN')
  console.log(data);
});
728x90
반응형

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

mysql CMD 접속

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '사용할패스워드'

이거 한줄이면 해결 됨.

728x90
반응형

'Database' 카테고리의 다른 글

[SQL] 데이터를 가공하기 위한 DB 함수들  (0) 2019.12.26
[SQL] 조건절 WHERE  (0) 2019.12.24
[SQL] 데이터 조회 SELECT  (0) 2019.12.23
DB(Database)란  (0) 2019.12.23
DB 설치 없이 SQL 실습하기  (0) 2019.12.21

좌표계 (Coordinate System)

좌표계는 공간상의 한 점의 위치를 표시라는 숫자들의 순서 쌍인 좌표를 정하기 위한 체계로,
원점과 기준 길이, 기준 축이나 기준선들의 집합을 통틀허 이르는 말임.
서로 수직인 직선을 기준 축으로 갖는 Rectangular Coordinate System이(직교 좌표계, 평면 좌표계 또는 데카르트 좌표계라고도 함) 가장 널리 쓰이고 그 밖에 곡선 좌표계들이 있음.
데카르트는 천장에 붙은 파리의 위치를 표현하기 위해 고안 했다고 함.

좌표계의 종류

  • 극 좌표계 (Polar Coordinate System)
  • 원기둥 좌표계 (Cylindical Coordinate)
  • 구면 좌표계 (Spherical Coordinate)
  • 동차 좌표계 (Homogeneous Coordinate)
  • 세계 지구 좌표 시스템 (World Geodetic System : WGS )

EPSG:3857

  • [14541934.699146198, 4291217.769314549]와 같은 형식
  • Google Map, Open Street Map에서 사용
  • 미터 단위를 사용함
  • Open Street Map과 OpenLayers가 밀접한 관계에 있기 때문에, OpenLayers의 기본 좌표임.

EPSG:4326 -> WGS84(라고도 함)

  • [130.63242200911046, 35.93162949347317]와 같은 형식
    • [±180 , ±90]
  • Google Earth에서 사용, 거의 모든 GPS에서 사용.
  • 소수점 단위를 사용함 (decimal degrees)

경도와 위도

좌표는 경도(Longtitude)와 위도(Latitude) 로 이루어 져 있음.

  • 경도 : X축 이라고 보면 됨.(동경, 서경)
    • 지구를 세로선으로 나눈것.
    • 영국의 그리니치 천문대를 기준으로 동경 180도, 서경 180도로 나눔.
    • 동경 180도와 서경 180도가 만나는 세로선이 날짜 변경선이 됨.
  • 위도 : Y축 이라고 보면 됨.(북위, 남위)
    • 적도를 0도로 기준잡고 지구를 남과 북으로 나누어서 북위, 남위 각각 0 ~ 90도로 구분함.

순서가 헷깔릴 땐 경위도, lola 로 기억하면 됨.

출처

  • 위키 백과
  • 네이버 물리학 백과
  • BizGIS
728x90
반응형

'ETC > GIS' 카테고리의 다른 글

[OpenLayers] 마우스 커서 위치에 대한 지도 좌표 보기  (0) 2019.11.15
OpenLayers로 지도 띄우기.  (1) 2019.11.08

커서가 위치한 곳의 좌표를 표출하기.

OpenLayers에서 지도상 특정 위치에 대한 좌표를 가져오는 방법 중, 가장 기본적인 마우스 위치에 대한 지도 좌표 보는 방법.
OpenLayers에서 기본적으로 제공하는 MousePosition이라는 컨트롤 모듈을 사용하면 됨.

예제를 진행하기전에,
OpenLayers 공식 사이트에서는 import를 사용하는 문법을 추천함.
But, 복습 겸 간단하게 코드를 남기는 중이니 CDN 방식으로 하겠음.

ES6의 import 문은 다음과 같은 방법으로 대체시키면 됨.

// import Map from 'ol/Map';
const Map = ol.Map;

// import View from 'ol/View';
const View = ol.View;

// import {defaults as defaultControls} from 'ol/control';
const defaultControls = ol.control.defaults;

1. 좌표값을 표출하는 div 선언

<div id="mouse-position"></div>

2. 마우스 좌표를 가져오는 OpenLayers의 모듈 선언.

let mousePositionCtrl = new ol.control.MousePosition({
  coordinateFormat: ol.coordinate.createStringXY(4),
  projection: 'EPSG:4326',
  className: 'custom-mouse-position',
  target: document.getElementById('mouse-position'),
  undefinedHTML: '&nbsp;'
});

이전 예제에서 두 단계만 추가해주면 div 안에 마우스 위치의 좌표를 가져올 수 있음.

그런데 마우스의 좌표가 쌩 숫자임...
좌표계라는 개념이 있고, 좌표계의 종류는 우리나라에서 사용하는 좌표계만 30개 정도 되는 듯?
좌표계에 대한 정리는 여기에 있음.

3. 결과 화면

 
 


전체 코드 보기

728x90
반응형

'ETC > GIS' 카테고리의 다른 글

좌표계 간략 정리  (0) 2019.11.22
OpenLayers로 지도 띄우기.  (1) 2019.11.08

# HTML에 GitHub Contribution Calendar 삽입하는 방법.

<!-- Prepare a container for your calendar. -->
<script src="https://cdn.rawgit.com/IonicaBizau/github-calendar/gh-pages/dist/github-calendar.min.js"></script>

<!-- Optionally, include the theme (if you don't want to struggle to write the CSS) -->
<link rel="stylesheet" href="https://cdn.rawgit.com/IonicaBizau/github-calendar/gh-pages/dist/github-calendar.css"/>

<!-- Prepare a container for your calendar. -->
<div class="calendar">
    <!-- Loading stuff -->
    Loading the data just for you.
</div>

<script>
    new GitHubCalendar(".calendar", "your-username");
</script>

이 소스코드에서 `"your-usernamne"`부분에 github 이름을 넣어준다.

결과는 내 블로그 하단에...

728x90
반응형

OpenLayers를 사용해서 HTML상에 지도를 띄우는 방법.

1. OpenLayers JS 파일과 CSS파일을 Include 한다.

<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.1.1/build/ol.js"></script>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.1.1/css/ol.css" type="text/css">

선택 사항으로, 만약 지도가 IE나 안드로이드 v4 환경에서 보여지길 원한다면, OpenLayers script를 Include 하기전에 다음 파일을 Include해 준다.

<!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>

2. 지도가 들어갈 div를 만들어 준다. 

<div id="map" class="map"></div>

3. 화면에 보여질 지도의 크기를 CSS로 지정해 준다.

  <style>
    .map {
      height: 400px;
      width: 100%;
    }
  </style>

4. javascript로 지도를 띄워준다.

  let map = new ol.Map({
    target: 'map',
    layers: [
      new ol.layer.Tile({
        source: new ol.source.OSM({
          url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png'
        })
      })
    ],
    view: new ol.View({
      center: ol.proj.fromLonLat([128.4, 35.7]),
      zoom: 7
    })
  });

5. 결과 화면.

 

 

 

 

 

 

6. JS 코드 분석.

 - OpenLayers Map 객체를 불러 온다.

let map = new ol.Map({ ... });

 - 지도 객체를 <div>에 연결 하기 위한 설정이다. target의 인자로 <div>의 id값을 지정해 준다.

    target: 'map'

 - layers : [ ... ] 배열은 지도에 사용하는 레이어의 목록을 정의하는 리스트다. 
기본적으로 Tile 레이어를 사용한다.

    layers: [
      new ol.layer.Tile({
        source: new ol.source.OSM()
      })
    ]

OpenLayers에서 레이어는 소스를 포함하는 유형(벡터, 이미지, 타일)으로 정의된다.

 - View는 지도가 보여줄 중심좌표, 축척, 회전을 지정할 수 있다. 
(기본적인 지도는 축척과 중심좌표만 설정한다)

    view: new ol.View({
      center: ol.proj.fromLonLat([128.4, 35.7]),
      zoom: 7
    })

 

전체 코드 보기 :

https://github.com/JeahaOh/OpenLayersStudy/tree/master/05%20Revision%20OL/01%20Map

 

JeahaOh/OpenLayersStudy

Open Layers JS 5.3 버전을 학습해 보자. Contribute to JeahaOh/OpenLayersStudy development by creating an account on GitHub.

github.com

원본 :

https://openlayers.org/en/latest/doc/quickstart.html

728x90
반응형

'ETC > GIS' 카테고리의 다른 글

좌표계 간략 정리  (0) 2019.11.22
[OpenLayers] 마우스 커서 위치에 대한 지도 좌표 보기  (0) 2019.11.15

+ Recent posts