SQL (Structured Query Language)
그럼 이제 블로깅을 시작해 보도록 하겠습니다.
SQL(Structured Query Language)은
'구조화된 질의 언어'의 약자이다.
SQL은 Structured Query Language약자로 구조적 질의 언어를 뜻한다. 데이터베이스에서 정보를 얻거나 갱신하기 위해 '질의'를 통해 결과를 얻어낼 수 있는 언어인 것이다.
가령 우리가 데이터베이스 내에 있는 정보 중에서 나이가 24살 이상이며 성별이 여자인 데이터만을 골라내고 싶다면 'SELECT ALL WHERE age > 24 AND sex = "F" '라고 치면 된다.
곧 SQL은 데이터베이스와 통신하는데 사용되며, ANSI(미 국립표준연구소)에서 제정한 관계형 데이터베이스(Relational DB)를 위한 표준 언어이다. SQL문장은 데이터베이스에 있는 데이터를 갱신하거나, 데이터베이스의 데이터를 조회하는 작업을 수행하는데 이용한다.
SQL을 사용하는 몇가지 범용 관계형 데이터베이스 시스템으로는 Oracle, Sybase, Microsoft SQL Server, Access 등이 있다. 대부분의 데이터베이스 시스템은 표준 SQL, 즉 ANSI SQL을 사용한다.
하지만 표준 SQL 외에 자신의 시스템만에서만 사용할 수 있는 고유한 특성의 확장된 SQL 기능을 가지고 있다. 이런 기능은 Oracle, SQL Server 등 각 데이터베이스 벤더들 마다 다르게 가지고 있으므로 각 데이터베이스의 매뉴얼을 참조해야 알 수 있다.
그러나 'Select', 'Insert', 'Update','Delete', 'Create',그리고 'Drop' 과 같은 표준 명령 만으로도 데이터베이스에서 원하는 거의 모든 작업을 할 수있다.
SQL의 종류
SQL은 크게 데이터와 그 구조를 정의하는 DDL과 데이터의 검색과 수정을 위한 DML 그리고 데이터 베이스 사용자의 권한을 정의하는 DCL의 세가지로 분류할 수 있다.
DDL - 데이터 정의 언어
CREATE | 데이터베이스 개체를 생성한다. |
DROP | 데이터베이스 개체를 삭제한다. |
ALTER | 기존에 존재하는 데이터베이스 개체를 새로 다시 정의한다. |
GRANT | 데이터베이스 개체에 권한을 부여한다. |
REVOKE | 이미 부여된 데이터베이스 개체의 권한을 귀소,철회 한다. |
DML - 데이터 처리 언어
INSERT | 데이터베이스 개체에 데이터를 입력한다. |
DELETE | 데이터베이스 개체에서 데이터를 삭제한다. |
UPDATE | 기존에 존재하는 데이터베이스 개체 안의 데이터를 고친다. |
SELECT | 데이터 베이스 개체로부터 데이터를 검색한다. |
COMMIT | 커밋(COMMIT)구문 전에 일어난 데이터베이스 액션들을 영구히 저장한다 |
ROLLBACK | 마지막으로 일어난 커밋 후의 데이터베이스 액션들을 원상으로 복구한다 |
SQL 구문에서는 대소문자를 구별하지 않는다. |
모든 SQL문은 세미콜론으로 끝난다. |
문법에 맞지 않거나 존재하지 않는 데이터를 검색할 때에는 다음과 같이 Error 코드를 나타낸다. |
CREATE TABLE 구문
데이터를 저장하고 검색하기 전에 선행되어야 할 일이 바로 데이터베이스 개체의 구축이다. 데이터베이스 개체의 구축은 CREATE TABLE 구문으로 할 수 있으며 일반적으로 데이터 베이스 개체의 구축을 테이블 생성이라고 한다.
CREATE TABLE 데이터 이름(컬럼 이름 컬럼의 데이터 타입,
컬럼 이름 컬럼의 데이터 타입 NULL or NOT NULL);
학번 | 이름 | 나이 |
04 | 홍길동 | 26 |
05 | 김유신 | 25 |
student 라는 테이블 명으로 테이블을 생성하였고 stu_Num = 학번 , stu_Name = 이름 , stu_Age = 나이로 3개의 컬럼을 정의 하였다.
- 테이블 이름을 지정한 후에 각 컬럼 들은 괄호"()"안에서 지정한다.
- 컬럼 이름 뒤에는 컬럼의 데이터 타입이 항상 정의되어야 한다.
- 컬럼이 항상 특정 값(NOT NULL)을 가져야 하는지를 지정한다.
- 각각의 컬럼들은 콤마","로 구분한다.
- 끝맺음은 항상 세미콜론 ";"으로 한다.
NUMBER(l,d) | 일반적인 수사 데이터를 저장한다. l는 저장할 수 있는 최대 자릿수이고, d는 소수점 이하 자리 수를 가리킨다. |
CHAR(size) | size에서 지정하는 만큼,2000byte까지 고정 길이 문자열 데이터를 저장한다. |
VARCHAR2(size) | size에서 지정하는 만큼, 4000byte까지 가변 문자열 데이터를 지정한다. |
DATE | BC 4712년 1월1일부터 AD 4712년 12월 31일까지의 날짜를 저장한다. |
LONG | 2GB의 문자까지 문자열 데이터를 저장할 수 있다. |
BLOB | 이진(Binary)LOB데이터 타입으로서 이진 데이터를 4GB까지 저장한다. |
CLOB | 문자 LOB 데이터 타입으로 4GB의 문자열을 저장한다. |
BFILE | Read_Only 이진(Binary)파일 타입으로, 데이터베이스 외부에 저장된다. |
INSERT 구문
생성한 테이블에 데이터를 넣어보자.
INSERT INTO 데이터 이름 VALUES (데이터, 데이터,' ' ,데이터 );
테이블에 데이터를 입력하기 전에 어떤 데이터들이 입력될 수 있는지를 알아 보기 위하여 DESCRIBE문을 이용한다.
DESC 테이블 이름;
테이블에 데이터 입력
- DESCRIBE문에서 보여주듯이 NOT NULL 값이 아닌 컬럼은 생략할 수 있으며 입력하려는 컬럼들만 표시 하여 실행할 수 있다.
SELECT 구문
SELECT문은 기존에 생성한 테이블의 데이터를 검색하는 SQL문이다.
SELECT문의 두 가지 필수 구분과 두 가지 선택 부분
필수 부분 | 선택 부분 | ||
SELECT | 무엇을 보고 싶은지를 (테이블의 컬럼이름) 명시한다. | WHERE | 검색할 데이터의 검색 조건을 지정한다. |
FROM | 보고 싶은 데이터를 어디로부터 얻을 것인지를(하나 또는 둘 이상의 테이블 이름) 명시한다. | ORDER BY | 검색결과 반환되는 행의 정렬을 위해 사용된다. |
필수 부분만 사용한 검색
검색할 컬럼을 명시한 SELECT문
WHERE절을 이용한 검색
검색하려 하는 특정 데이터의 조건을 명시하여 특정 열(Row)을 검색할 수 있게 해준다.
student 테이블의 04학번인 학생을 검색한 예제이다.
WHERE절과 AND/OR
두 가지 이상의 조건을 결합하여 검색한 결과값은 AND의 경우는 명시된 조건을 모두 만족하는 데이터가, OR의 경우는 명시된 조건중 한가지라도 만족하는 모든 데이터가 표시된다.
두 가지 조건이 만족되는 데이터가 없으므로 선택된 레코드가 없다는 메시지가 나온다.
ORDER BY절을 이용한 검색
검색 결과 반환될 행을 특정 컬럼 값에 ORDER BY절을 사용하여 정렬할 수 있다.
학번순으로 정렬 하여 주었다.
WHERE 절과 ORDER BY 절을 모두 사용한 검색
WHERE 조건이 맞는 데이터를 stu_Num 순으로 정렬하였다.
UPDATE 구문
테이블 안의 데이터를 수정하려면 UPDATE문을 사용한다.
UPDATE문은 고칠 데이터가 속한 테이블을 지정할 UPDATE, 어떤 컬럼을 어떻게 고칠지를 지정하는 SET 그리고 어떤 행을 고칠지를 지정하는 WHERE의 세 가지 Keyword로 구성된다.
홍길동을 임꺽정을 바꾸겠다.
DELETE 구문
DELETE문은 더 이상 사용하지 않는 데이터를 삭제 할때 쓰인다.
03학번의 학생을 지우도록 하겠다.
ALTER TABLE 구문
데이터베이스를 구축하다 보면 기존의 테이블의 정의와 구조를 수정해야 할 때 도있다. ALTER TABLE문이 이러한 일을 해준다.
- ALTER하려는 구조가 테이블 안의 기존의 데이터와 일치하지 않을 경우 ALTER TABLE문을 사용할 수 없다. 즉, 기존에 존재하는 데이터는 보호된다.
기존의 데이터가 수정하려는 구조에 어긋나지 않는다면 그 구조를 바꿀 수 있다는 말과 같다.
DROP TABLE 구문
기존에 사용하던 데이터베이스 테이블이 더 이상 불필요하게 되었거나 처음부터 다시 데이터베이스를 디자인하려 한다면, 기존에 테이블을 삭제할 필요가 있다.DROP TABLE이 이러한 일을 해준다.
한번 삭제한 테이블은 다시 복구할 수 없다.
아이고 어렵다.