'SQL 주요 질의문'에 해당되는 글 1건

  1. 2009.01.06 데이터베이스와 SQL이해
Computing2009. 1. 6. 19:20


데이터베이스라는 것은 여러 사람에 의해 공유되어 사용될 목적으로 특정화된 정보를 통합  관리하는 정보의 집합을 의미하며 여러 모델( 계층적 데이터베이스 , 네트워크 데이터베이스, 객체지향적 등 )들이 있지만 보통은 관계형 데이터 베이스 모델을 사용한다. AIR에서는 바로 이 관계형 베이터 베이스를 사용하는 SQLite 엔진을 이용한다.

관계형 데이터베이스  하나의 테이블에는  column(또는 field) 과 row로 구성되며 각각의 데이터 베이스에는 테이블이 하나 이상 들어갈 수 있고 테이블이에 있는 데이터 사이에는 관계가 설정될 수 있다.
데이터 사이에의 관계는 보통 키(key)를 기반으로 한다, 하나의 키는 하나의 레코드를 식별하는 기능을 하며 하나의 키를 고유 식별자로 사용하게 되면, 그 키를 기본키(primary key)라고 한다. 이 기본키는 테이블 사이의 데이터 간의 관계를 쉽게 설정하게 하도록 한다.

SQL 이란 이러한 관계형 데이터 베이스(RDB)의 조작과 관리에 사용되는 데이터 베이스 하부언어이며 데이터베이스의 모든 속성과 성질 값 등을 정의하거나 설계, 생성 , 삭제... 등 데이터 조작 처리언어이다. SQL과 데이터베이스 방법론과 이론 등 관련 계통은 워낙 방대하기 때문에 간략하게 핥아만 보았다.

앞으로 우리는 개념을 알던 모르던 SQL 문을 AIR에서 사용해야 하는 경우가 발생한다. 훌륭하게 DB를 설계하려면 많이 공부하거나 전문 DB디자이너의 도움을 받아 설계하면 되지만 개발시 몇 가지는 사용해야 하는 질의문이 있다.

[  SQL 주요 질의문 ]

1 테이블 생성/삭제
CREATE TABLE name( column data type , column data type ... )
만약 테이블의 존재여부를 체크하고 싶을 때는 조건문을 사용한다.
CREATE TABLE IF NOT EXISTS name( column data type , column data type ... )

테이블 삭제는 DROP TABLE을 사용한다
DROP TABLE name
만약 테이블의 존재여부를 체크하고 싶을 때는 조건문을 사용한다.
DROP TABLE IF EXISTS name

2 테이블에 DB추가
INSERT INTO name VALUES( "value" , "value"... )
INSERT INTO name( column , column ... ) VALUE( "value" , "value"... )


아래 예시는 PHP문에서 board테이블에  값을 추가하는 예이다
INSERT  INTO  board VALUES  ('', '$name', '$passwd', '$title', '$message')

3 테이블에 DB수정
UPDATE name SET column = value , column = value .. WHERE 수정대상

복합연산시에는 ANDOR 연산자를 이용한다.
UPDATE music SET artist = "김건모" WHERE artist = "kim gun mo" AND album = "김건모 앨범"
위 질의문은 artist 가 "kim gun mo" 인 레코드와 album 이 "김건모 앨범"인 레코드의 artist 의 값을 "김건모"로 수정하라는 것이다.

UPDATE music SET artist = "김건모" WHERE artist = "kim gun mo" OR artist = "깜상 건모"
이번 질의문은 러코드의 artist가 "kim gun mo" 이거나 "깜상 건모"인 레코드의 artist값을 "김건모" 로 바꾸라는 것이다.

4 테이블에 DB삭제
DELETE FROM name WHERE 수정대상

DELETE FROM books WHERE publisher = "트림"
위 질의문은 books테이블에서 출판사가 "트림"인 모른 레코드를 삭제하라는 명령이다.

복합연산시에는 AND와 OR 연산자를 이용한다.
DELETE FROM books WHERE publisher = "트림" OR publisher = "쫄딱"
위 질의문은 books테이블에서 출판사가 "트림" 또는 "쫄딱"인 모른 레코드를 삭제하라는 명령이다.

5 테이블에 DB조회
SELECT column , column ... FROM name

모든 column을 가져올 때는 * 와일드 카드를 사용한다.
SELECT * FROM name

데이터를 가져올 때 중복된 데이터 제거
SELECT DISTINCT  * FROM name

결과 데이터를 정렬하기 위해서는 ORDER BY를 사용한다.
SELECT * FROM name ORDER BY 기준이 되는 column

SELECT * FROM books ORDER BY year
위의 질의문은 books테이블의 데이터를 year의 오름차순으로 정렬하라는 것입니다.
반대로 내림차순(큰 값이 먼저 출력)으로 정렬하려면 끝에 DESC를 추가한다.
SELECT * FROM books ORDER BY year DESC

6 함수 실행하기
평균을 구하는 함수 avg()는 SQL에서 제공하는 함수이다 이와 같은 함수는 다음과 같이 사용한다.
SELECT avg(score) FROM game
game이라는 테이블의 score의 평균값을 avg(score)로 반환한다. 이를 AS 키워드를 사용하여 별칭 칼럼을 만들어 사용할 수 있다.
SELECT avg(score) AS averageScroe FROM game
위의 질의문은 averageScroe에 score평균값을 반영한 것이다.

각각의 column별로 평균 값을 구하고자 할때는 GROUP BY를 사용한다.
SELECT avg(score) AS averageScroe FROM game GROUP BY id
위의 질의문은 game테이블에서 각각의 id별로 점수 평균을 구하는 것이다.

필터링을 한번 더하여 검사하고자 한다면 HANING을 사용한다. 이는 조건문처럼 비교검사하여 해당되는 것만 출력하게 한다.
SELECT avg(score) AS averageScroe FROM game GROUP BY id HAVING averageScroe > 500
위의 질의문은 game테이블에서 각 id별로 평균점수를 구하고 평균점수가 500이상인 것들만 가져오라는 것이다.

참고) SQLite Expert라는 툴이 있는데 처음에 DB설계할 때 매우 편합니다. http://www.sqliteexpert.com/download.html

Posted by 버터백통