본문 바로가기

Domain/데이터베이스

[데이터베이스] 3. MySQL - 조회

SELECT *
FROM course_taken
WHERE sid<'950000'
GROUP BY sid, year_taken;

데이터 조회

테이블에 존재하는 특정 데이터를 찾고 싶을 때 사용한다.

SELECT 컬럼영1, 컬럼명2, ... (혹은 *)

FROM 테이블명1, 테이블명2, ...

(WHERE 조건);

 

- SELECT 절

반환된 결과를 나타낸다. 반환 결과로 수식을 사용하거나 AS 명령어를 통해 헤더를 변경할 수 있다.

SELECT token,
    (6371*acos(cos(radians(:latitude))*cos(radians(latitude))*cos(radians(longitude)
    -radians(:longitude))+sin(radians(:latitude))*sin(radians(latitude))))
    AS distance

    FROM locationInfo;
    #WHERE token <> :token
    #HAVING distance < 1
    #ORDER BY distance;

위는 locationInfo 테이블에서 상수값인 (:latitude, :longitude)와 테이블의 각 행의 latitude, longitude간의 연산을 통해 distance라는 이름으로 결과를 반환하는 질의이다. (token도 반환됨)

 

- WHERE 절

특정 조건을 만족하는 행들만 반환하게 된다. 아래는 그 예시이다.

SELECT * FROM students
WHERE gpa>=3.0; #산술비교

SELECT * FROM students
WHERE name='이동주'; #문자열비교

SELECT * FROM students
WHERE birthdate>='01/01/1985'; #날짜비교


SELECT * FROM students
WHERE (gpa>=3.5 AND major='cs') OR (gpa<=2.0 AND major='ss'); #논리 연산을 통한 복합 조건


SELECT * FROM students
WHERE id LIKE '2___'; # 단문자 맨 앞이 2이며 뒤에 3글자는 어느 것이든 가능

SELECT * FROM students
WHERE address LIKE '%한남동%'; #한남동을 포함하는 문자열

SELECT * FROM students
WHERE major IS NULL; #컬럼값이 NULL인지 확인(IS NOT NULL도 존재)

 

- FROM 절

#질의에 사용될 전체 테이블 리스트의 지정

SELECT * FROM instructor, department; # instuctor X department

 

#JOIN 연산의 표현

SELECT * FROM instructor, department

WHERE dept=id; #instuctor 테이블의 dept 값에 해당하는 department 테이블의 id 값과 연결

 


- ORDER BY 연산

조회된 값을 오름차순(ASC)/내림차순(DESC)으로 보여줌

SELECT name
FROM student
WHERE birthdate>='1997-06-01'
ORDER BY name ASC;

 

- GROUP BY 연산

조회된 결과 데이터를 그룹화하기 위해 사용하는 연산.

#95학번 이전 학생에 대하여, 전공별 학생 수
SELECT major 전공 ,COUNT(*) 사원수
FROM students
WHERE sid<'950000'
GROUP BY major;

 

- HAVING 연산

#95학번 이전 학생에 대하여, 전공별 학생 수 (단, 5명이 넘는 경우만 조회, 전공명을 오름차순으로 정렬)
SELECT major 전공 ,COUNT(*) 사원수
FROM students
WHERE sid<'950000'
GROUP BY major
HAVING COUNT(*) > 5
ORDER BY major ASC;