A

[SQL]SQL의 기초 (2)

· 17년 전 · 1737

4. SQL의 기초 (2)

이제 내장함수에 관해 알아볼까요? ORACLE사는 다양한 데이터 타입을 조작하고 변환하기 위해서 많은 내장함수를 제공합니다.

  • 문자함수
  • 숫자함수
  • 날짜함수
  • 변환함수
  • 그룹함수
  • 잡함수(Miscellaneous Function)

일단 여기서는 이런 종류가 있다는 것만 알고 넘어가죠.

SQL은 레코드를 검색하는데 이용할 수 있는 기준을 지정하는 WHERE 구를 제공합니다. 어떤 테이블이 많은 행을 가지고 있을 경우, 그 행들을 모두 검색하면 참 불편하겠죠? WHERE 구는 쿼리에 의해 검색되는 행을 위해서 만족되어야 하는 한 개 이상의 조건문으로 구성되어 있습니다.

만약 여러분이 서울에 사는 학생들의 List만 원한다면 아래와 같이 할 수 있겠죠.

SELECT name, eng_score, kor_score FROM student WHERE city='서울';

NAME ENG_SCORE KOR_SCORE
---------- --------- ----------
이원희 30 10
신관호 85 100

WHERE문을 사용할 때 AND 와 OR 키워드로 조건문을 조합할 수도 있습니다. 서울이나 수원에 살고 영어 성적이 80점 이상인 학생만 보는 예를 들어보죠.

SELECT * FROM student
WHERE city='서울' OR city='수원' AND eng_score>=80;

NAME AGE ENG_SCORE KOR_SCORE ... AVR_SCORE
---------- --- ---------- ---------- ... ----------
윤면용 28 100 100 ...100
최인희 27 90 90 ...94
신관호 28 85 100 ...96

그럼 데이터를 소트(Sort)시켜서 쿼리하는 법을 볼까요? 여러분은 ORDER BY 구를 이용해서 쿼리되는 데이터를 소트시킬 수 있습니다. ORDER BY 구는 쿼리가 복귀시키는 행의 순서를 매기는데 사용되어야 하는 열을 지정하는데 사용됩니다.

SELECT name, age FROM student
ORDER BY name;

NAME AGE
---------- ---
구교락28
박상욱 29
배효일 26
신관호 28
윤면용 28
이원희 50
...
최인희 27

순서를 정리할 때 오라클의 경우는 아무런 옵션이 없을 경우, 행을 오름차순(ASC)으로 순서를 정합니다.열의 순서를 내림차순으로 정리하려면 열의 이름 뒤에 DESC 키워드를 추가해야 합니다.

SELECT name, age FROM student
ORDER BY name DESC;

NAME AGE
---------- ---
최인희 27
이원희 50
윤면용 28
신관호 28
배효일 26
박상욱 29
...

구교락28

그런데 가끔은 내가 찾고자 하는 데이터나 행이 얼마나 되는지 알고 싶을 때가 있죠? 그때는 COUNT라는 함수를 사용합니다. COUNT 함수는 지정된 기준을 만족시키는 행의 수를 복귀시킵니다.

SELECT count(*) FROM student
WHERE eng_score>=80;

COUNT(*)
--------
4

그러면 서브쿼리는 어떻게 사용하는지 볼까요? 서브쿼리는 다른 DML(SELECT, UPDATE, DELETE, INSERT) 문으로 정의됩니다.만약에 영어성적에 대해서 전체 평균보다 점수가 낮은 학생을 조회하고 싶다면 다음과 같이 사용하면 됩니다. avg()는 ORALCE이 제공하는 평균을 내는 함수죠.

SELECT name, eng_score FROM student
WHERE eng_score
(SELECT avg(eng_score) FROM student);

서브쿼리를 사용할 경우, 다음의 내용을 주의하세요.

  • 서브쿼리는 괄호로 묶어야 한다.
  • 서브쿼리에 의해서 복귀된 행의 수는 함수 또는 연산자가 기대하는 값의 수와 일치해야 한다.
  • ORDER BY 구는 서브쿼리 문에서 사용할 수 없다.

또 SELECT 문으로 새로운 테이블을 만들 수도 있어요. 다음과 같이 CREAT TABLE 문과 SELECT 문을 함께 사용하면 됩니다. WHERE 문을 주어서 원하는 조건만으로 테이블을 만들 수도 있겠죠.

CREATE TABLE new_table_name
AS
select_statement;

CREATE TABLE eng_score_table
AS
SELECT name, age, eng_score
FROM student;

여러분은 선택 리스트 내에서 복잡한 표현 문을 지정할 때 그것에게 앨이어스를 할당함으로써 결과 값의 문서를 보기 좋게 할 수 있습니다. 다음 두 가지 예를 볼까요?

SELECT name, eng_score, kor_score, (eng_score+kor_score)/2 FROM student;

NAME ENG_SCORE KOR_SCORE (ENG_SCORE+KOR_SCORE)/2
---------- --------- ---------- -----------------------
박상욱 90 85 87.5
배효일 70 90 80
이원희 30 10 20
윤면용 100 100 100
최인희 90 90 90
신관호 85 100 87.5
... ... ... ...
구교락0 10 5

SELECT name, eng_score, kor_score, (eng_score+kor_score)/2 AVERAGE FROM student;

NAME ENG_SCORE KOR_SCORE AVERAGE
---------- --------- ---------- --------
박상욱 90 85 87.5
배효일 70 90 80
이원희 30 10 20
윤면용 100 100 100
최인희 90 90 90
신관호 85 100 87.5
... ... ... ...
구교락0 10 5

첫 번째 예와 두 번째 예를 비교해보면 두 번째 예가 훨씬 깔끔하죠? 이것을 표현식 (eng_score+kor_score)/2에 앨이어스 AVERAGE를 할당한다고 하며, 여기서 두 가지 이익을 얻을 수 있습니다.

  • 표현식을 정확히 기술하는 이름을 갖는다.
  • ORDER BY 구 내에서 앨리어스를 참조할 수 있다.

내용이 HTML하고 비교해서 좀 어렵나요?

[이 게시물은 관리자님에 의해 2011-10-31 17:27:00 MySQL에서 이동 됨]
|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
17년 전 조회 3,168
17년 전 조회 4,259
17년 전 조회 1,995
17년 전 조회 3,674
17년 전 조회 1,570
17년 전 조회 1,400
17년 전 조회 2,338
17년 전 조회 1,328
17년 전 조회 1,647
17년 전 조회 1,478
17년 전 조회 2,546
17년 전 조회 1,515
17년 전 조회 1,105
17년 전 조회 1,236
17년 전 조회 3,116
17년 전 조회 2,177
17년 전 조회 1,984
17년 전 조회 1,229
17년 전 조회 2,458
17년 전 조회 1,183
17년 전 조회 1,139
17년 전 조회 1,391
17년 전 조회 2,757
17년 전 조회 2,406
17년 전 조회 2,495
17년 전 조회 1,195
17년 전 조회 1,313
17년 전 조회 3,256
17년 전 조회 2,844
17년 전 조회 4,112
17년 전 조회 2,274
17년 전 조회 2,369
17년 전 조회 1,421
17년 전 조회 2,540
17년 전 조회 2,223
17년 전 조회 2,983
17년 전 조회 2,494
17년 전 조회 1,652
17년 전 조회 2,447
17년 전 조회 1,604
17년 전 조회 1,189
17년 전 조회 2,249
17년 전 조회 2,897
17년 전 조회 4,072
17년 전 조회 3,161
17년 전 조회 1,427
17년 전 조회 1,711
17년 전 조회 2,256
17년 전 조회 1,561
17년 전 조회 1,738
17년 전 조회 2,730
17년 전 조회 2,153
17년 전 조회 1,808
17년 전 조회 4,212
17년 전 조회 3,059
17년 전 조회 1,452
17년 전 조회 3,585
17년 전 조회 2,812
17년 전 조회 2,091
17년 전 조회 1,310
17년 전 조회 2,349
17년 전 조회 2,083
17년 전 조회 1,996
17년 전 조회 1,942
17년 전 조회 1,190
17년 전 조회 1,893
17년 전 조회 2,949
17년 전 조회 1,450
17년 전 조회 1,689
17년 전 조회 1,371
17년 전 조회 1,620
17년 전 조회 1,595
17년 전 조회 1,466
17년 전 조회 2,575
17년 전 조회 2,341
17년 전 조회 2,121
17년 전 조회 1,430
17년 전 조회 2,448
17년 전 조회 4,266
17년 전 조회 2,751
17년 전 조회 1,678
17년 전 조회 1,871
17년 전 조회 3,247
17년 전 조회 2,253
17년 전 조회 3,844
17년 전 조회 1,694
17년 전 조회 2,285
17년 전 조회 2,117
17년 전 조회 1,632
17년 전 조회 2,149
17년 전 조회 1,946
17년 전 조회 1,980
17년 전 조회 3,093
17년 전 조회 2,167
17년 전 조회 1,453
17년 전 조회 1,480
17년 전 조회 2,141
17년 전 조회 3,218
17년 전 조회 2,158
17년 전 조회 1,551