SQL(Structured Query Language)는 관계형 데이터베이스 관리시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
SQL 문법의 세가지 종류
DDL (Data Definition Language) - 데이터 정의어
데이터베이스를 정의하는 언어를 말하며, 데이터를 생성하거나 수정, 삭제 등 데이터의 전체 골격을 결정하는 역할의 언어를 말한다
CREATE
데이터베이스, 테이블 등을 생성하는 역할을 한다.
ALTER
테이블을 수정하는 역할을 한다.
DROP
데이터베이스, 테이블 등을 삭제하는 역할을 한다.
TRUNCATE
테이블을 초기화 시키는 역할을 한다.
DML (Data Manipulation Language) - 데이터 조작어
테이블에 있는 행과 열을 조작하는 언어
정의된 데이터베이스에 입력된 레코드를 조회, 수정, 삭제하는 등의 역할을 하는 언어를 말한다. 데이터베이스 사용자가 질의어를 통하여 저장된 데이터를 실질적으로 처리하는 데 사용하는 언어이다.
SELECT
데이터를 조회하는 역할을 한다.
INSERT
데이터를 삽입(추가)하는 역할을 한다.
UPDATE
데이터를 수정하는 역할을 한다.
DELETE
데이터를 삭제하는 역할을 한다.
DCL (Data Control Language) - 데이터 제어어
데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어를 말한다.
데이터를 제어하는 언어이며, 데이터의 보안, 무결성, 회복 등을 정의하는 데 사용한다.
GRANT
특정 데이터베이스 사용자에게 특정 작업에 대한 수행권한 부여를 한다.
REVOKE
특정 데이터베이스 사용자에게 특정 작업에 대한 권한을 박탈, 회수한다.
COMMIT
트렌젝션 작업이 정상적으로 완료되었음을 관리자에게 알려준다.
ROLLBACK
트랜젝션 작업이 비정상적으로 종료되었을 때, 원래 상태로 복구한다.
DML(데이터 조작어) 중 테이블의 데이터를 읽는 데 사용하는 명령어입니다.
동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID 순으로 조회하는 SQL문을 작성해주세요.
SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID
동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.
SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC
동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
INTAKE_CONDITION LIKE "Sick"
# SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION="Sick" ORDER BY ANIMAL_ID ASC
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION LIKE "Sick" ORDER BY ANIMAL_ID ASC
=
를 사용해도 된다.동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.
INTAKE_CONDITION!="Aged"
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION!="Aged" ORDER BY ANIMAL_ID
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION NOT LIKE "Aged" ORDER BY ANIMAL_ID
NOT LIKE
!=
동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS ORDER BY ANIMAL_ID ASC
동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.
조회 컬럼 (SELECT): ANIMAL_ID, NAME, DATETIME
조회 테이블 (FROM): ANIMAL_INS
정렬 (ORDER BY): NAME, DATETIME DESC
이름 순으로 정렬하되, 이름이 같은 경우에는 보호 시작일의 역순으로 조회
SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME, DATETIME DESC
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1
가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
시간대 정렬 후 검색 개수 1로 설정하기
SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME DESC LIMIT 1
DATETIME 최대값 찾기
SELECT MAX(DATETIME) AS "시간" FROM ANIMAL_INS
AS
: 조회한 값을 표시할 컬럼의 이름을 별도로 지정할 수 있음동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
SELECT MIN(DATETIME) AS "시간" FROM ANIMAL_INS
동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.
SELECT COUNT(*) AS "count" FROM ANIMAL_INS
동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS WHERE NAME IS NOT NULL
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회 해주세요.
SELECT ANIMAL_TYPE, COUNT(ANIMAL_ID) AS "count"
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
조회 항목 (SELECT): NAME, 중복 이름의 개수 = COUNT
조회 테이블 (FROM): ANIMAL_INS
조회 그룹 단위 (GROUP BY): NAME
정렬 (ORDER BY): NAME
조건 (HAVING)
두 번 이상 쓰인 이름만 골라내는 걸 어떻게 하는 거지?
그룹함수를 적용해서 나온 결과값 중에서 원하는 조건에 부합하는 자료만 산출할 때 사용
SELECT NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME
동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID
동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID ASC
입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.
조회 컬럼: ANINAL_TYPE, NAME, SEX_UPON_INTAKE
조회 테이블: ANIMAL_INS
정렬: 아이디 순
이름이 없는 경우, No name으로 대체하는 방법은??
IFNULL(참조 컬럼, 대체 값)
SELECT ANIMAL_TYPE, IFNULL(NAME, "No name"), SEX_UPON_INTAKE FROM ANIMAL_INS
ORDER BY ANIMAL_ID