데이터베이스에서는 데이터를 조작하는 일보다 가져오는 작업들이 더 많습니다. 이번 글에서는 데이터베이스를 통해 데이터를 조회하는 방법을 설명하도록 하겠습니다.
SELECT 명령
데이터베이스를 통해서 데이터를 가져오는 방법이며,
조건에 맞는 데이터를 검색하는 명령어이고 단일 테이블에 대해서 검색을 합니다.
SELECT 컬럼1, 컬럼2,...,컬럼N 또는 "*"
FROM <테이블명>
where 조건식
여기서 select문을 적용할 때 관계대수에서는 중복된 속성이 있는 투플이 출력되지 않는 반면에, sql에서는 중복된 속성이 출력 가능합니다.
💡테이블과 릴레이션의 차이
릴레이션은 중복된 속성이 없지만, 테이블은 있을 수 있습니다.
즉, 테이블은 행에 대해서 칼럼이 다 같은 투플이 나올 수 있습니다.
where 조건식
where절을 통해서 조건을 만들어 사용자가 원하는 데이터들만 효율적으로 가져올 수 있습니다.
where 컬럼명 operator(연산자) 값
⬇️ where 조건식에 사용되는 논리연산자
연산자 | 의미 |
= | 같다. |
!= , ^= , <> | 같지 않다. |
> , < , >= , <= | 크다, 작다, 크거나 같다, 작거나 같다 |
is null | 널값인 경우 True이다. |
is not null | 널값이 아닌 경우 True이다. |
🧐 where절의 사용 예
Q. ‘산공’과 4학년 학생들의 이름을 찾아라.
select sname from student where dept='산공' and YEAR=4;
Q. 기말고사 또는 중간고사의 성적이 90점 이상인 학생들의 학번을 찾아라.
select sno from enrol where midterm>=90 or finterm>=90;
distinct 명령
위에서 말했다싶이, 테이블은 행에 대해서 컬럼이 같은 투플이 나올 수 있습니다.
따라서 distinct를 통해서 중복된 레코드는 한번만 출력하게 합니다.
select distinct 컬럼1, 컬럼2, 컬럼3,.., 컬럼N 또는 '*'
from <테이블명>
where 조건식
order by 구문
select 결과를 정렬해서 출력하게 합니다.
- asc : 오름차순으로 정렬합니다. sql은 오름차순이 디폴트입니다.
- desc : 내림차순으로 정렬합니다.
select * from <테이블명> order by <컬럼> asc/desc;
like 연산자
문자열 패턴을 검색합니다.
- % : 임의의 길이 및 임의의 문자를 의미합니다. 정해지지 않은 갯수가 와도 괜찮습니다.
- _ : 단일한 임의의 문자를 의미합니다. 한 개의 문자가 와야합니다.
Q. 과목 이름에 ‘구조’라는 문자열이 포함된 모든 과목을 검색해라.
select * from course where cname like "%구조";
in 연산자
주어진 값들에 포함되는 것만을 검색합니다.
select * from student where year in (1,2);
→ 1이거나 2이거나 둘 중 하나만 만족하면 출력합니다. (하나라도 맞는게 있으면 출력)
OR 연산자의 결과와 동일합니다.
between 연산자
값의 범위에 따라서 검색합니다. 비교값 포함 여부는 DBMS마다 달라질 수 있습니다.
select * from student where year between 1 and 3;
alias 연산자
테이블 또는 컬럼의 이름을 주어진 이름으로 지정합니다.
select sno as 학번,sname as name from student;
집계함수
함수명 | 기능 |
avg() | 평균 |
count() | 갯수 |
first() | 첫번째 값 |
last() | 마지막 값 |
max() | 최대값 |
min() | 최소값 |
sum() | 합계 |
group by 절
컬럼 값이 같은 것들을 묶어서 집계함수를 적용합니다.
group by에 사용된 컬럼은 반드시 select 컬럼으로 사용되어야 합니다.(안해도 상관 X)
Q. 학과별로 소속 학생의 수를 출력하라
select DEPT as 학과, count(*) as 학생수 from STUDENT group by DEPT;
-> 여기서 count(*) 은 행의 갯수를 뜻합니다.
having 절
group에 대해서 조건식을 적용합니다.
group by 절이 없는 경우에는 전체 테이블이 대상이고, grouping을 하고 난 다음에 조건식을 쓰고 싶으면 사용합니다.
Q. 3명 이상 수강하는 과목의 기말평균을 계산해라.
select avg(finterm) as 평균 from ENROL group by cno having count(*)>=3;
'Computer Science > DB' 카테고리의 다른 글
[데이터베이스] 5. SQL - DML, DCL이란? (4) | 2024.08.23 |
---|---|
[데이터베이스] 3. SQL은 무엇일까? (0) | 2024.07.29 |
[데이터베이스] 2. 데이터베이스 관리 시스템(DBMS) 이란? (0) | 2024.07.16 |
[데이터베이스] 1. 데이터베이스의 개념 및 구조 (1) | 2024.05.11 |