공부/인프런 - Rookiss

Part 5-2-2. SQL 입문 : SELECT FROM WHERE

셩잇님 2024. 1. 23. 15:12
반응형

 

 

💅 SQL 입문

 

 지난 시간에는 SSMS 프로그램의 형태와 필수 명령어, 테이블 추가, 주석 등의 사용법을 간략하게 알아보았다. 오늘은  SSMS를 통해 실질적으로 데이터베이스에 질의를 남기고, 결과를 살펴보는 시간을 가져본다.

 


 

🤶 SQL 쿼리 (= SQL문)

 

* 쿼리를 작성한 후 실행 버튼을 누르면 된다. (F5)
* SQL문은 소문자로 써도 상관없다. 즉 대소문자 상관이 없다.
→ 그렇지만, 예약어를 대문자로 쓰고 나머지를 소문자로 쓰는게 가독성이 좋다!
* SQL 문장 하나가 끝나면 세미콜론을 붙여준다.
→ SQL문이 한 문장 밖에 없으면 세미콜론 생략해도 됨
* 전체 쿼리문의 일부분인 특정 SQL 문을 드래그 하고 실행하면 전체 쿼리문이 아닌, 드래그한 해당 쿼리문만 실행된다!

 


 

🐑 SELECT : 조건에 맞는 행렬 조회하기

 

SELECT는 데이터를 조회(READ)하는 역할을 한다. 조건에 맞는 데이터를 화면에 출력한다.

 

SELECT : 조회할 열 (쉼표로 추가적으로 나열이 가능하다)
FROM : 테이블 이름
SELECT는 항상 FROM 과 같이 기술하며 필수로 입력해야한다! (WHERE, ORDER BY 등등 이런 것들은 생략 가능)

 

👩‍💼 전체 데이터 조회하기

 

SELECT *
FROM players;

 

 *은 '전부 다'를 뜻한다. 즉 위의 질의는 “players 테이블에서 모든 열을 다 가져와라” 라는 의미이다. 한국말로는 가져올 테이블 FROM 부분을 앞에 쓰는 것이 더 자연스럽지만 (테이블에서 ~를 가져와라) SQL문은 영어에서 왔다는 것을 기억하자!

 

👩‍💼 원하는 열만 조회하기

 

SELECT nameFirst, nameLast, birthYear
FROM players;

 

 

 해당 질의는 “players 테이블에서 nameFirst, nameLast, birthYear 모든 열을 다 가져와라”라는 뜻과 동일하다.

 

👩‍💼 별명 붙여주기 : AS

 

SELECT 열 이름 AS 별칭

 

SELECT nameFirst AS 이름, nameLast, birthYear
FROM players;

 

 

원래 명명된 이름 외에 임의로 열 이름을 바꿔 출력하고자 할 때 AS를 사용한다. nameFirst 열이 이름으로 출력된 것을 확인할 수 있다. 원래의 이름이 영원히 이름으로 바뀐 것이 아니라 임시로 이름으로 출력만 된 것 뿐이다.

 


 

🐑 WHERE : 원하는 조건의 데이터만 조회하기

 

조건 식을 적고 해당 조건에 맞는 데이터만 조회할 수 있다.
순서로는 FROM 다음에 와야 하며, 생략 가능하다.

 

SELECT nameFirst, nameLast, birthYear
FROM players
WHERE birthYear = 1866; --원하는 조건

 

 

birthYear의 열 값이 1866인 행들만 조회한 것을 볼 수 있다.

 

👩‍💼 논리 연산자

 

C++, C#과 다르게 equal 연산자는 ==가 아니라 '='이다.
우선순위 👉 괄호 > AND > OR

 

SELECT nameFirst, nameLast, birthYear
FROM players
WHERE birthYear != 1866;

 

birthYear 열 값이 1866이 아닌 행들만 조회한 것을 확인할 수 있다.

 

SELECT nameFirst AS name, nameLast, birthYear, birthCountry
FROM players
WHERE birthYear = 1974 AND birthCountry = 'USA';

 

birthYear 열 값이 1974 이고 & birthCountry 열 값이 USA 인 행들만 조회한 것을 확인할 수 있다.

 

문자열 리터럴은 ' ' 작은 따옴표로 쓴다.

SELECT nameFirst AS name, nameLast, birthYear, birthCountry, weight
FROM players
WHERE (birthYear = 1974 OR birthCountry = 'USA') AND weight > 185;

 

 

AND가 OR 보다 우선순위가 더 높다. (먼저 실행됨)
C++, C#과 같이 우선순위 높이려면 괄호를 쓰면 된다.

👩‍💼 IS NULL, IS NOT NULL

 

A IS NULL : A 열 값이 NULL 이면 참
A IS NOT NULL : A 열 값이 NULL 이 아니면 참

 

SELECT *
FROM players
WHERE deathYear != NULL;

 

NULL 값인지를 알고싶다면 != NULL 하면 안된다. IS NULL을 사용하여야 한다!

 

SELECT *
FROM players
WHERE deathYear IS NULL;

 

 

deathYear 열 값이 NULL 인 행들만 조회한 것을 확인할 수 있다.

 

SELECT *
FROM players
WHERE deathYear IS NOT NULL;

 

 

deathYear 열 값이 NULL 이 아닌 행들만 조회한 것을 확인할 수 있다.

 

👩‍💼 LIKE

 

패턴으로 조회할 수 있다.

_ : 한 자리
→ A LIKE ‘a___’ : A 열의 값이 “a 로 시작하며 뒤에 3 자리 짜리 문자열”인 행을 조회
% : 자리에 상관 없는 모든 값
→ A LIKE ‘%a’ : A 열의 값이 “a 로 끝나는 모든 문자열”인 행을 조회

여담으로 회원이 탈퇴를 하면 회원 DB에서 그 회원 정보를 삭제할 것 같지만, 실제로는 그렇게 하지 않고 임시로 DELETED-닉네임 이런식으로 이름을 수정한다. 탈퇴한 회원이라도 해당 정보를 복구하고 조회해야할 일이 생길 수도 있기 때문에 삭제하지는 않는다. 이럴때 탈퇴한 회원의 정보만 조회하려면 DELETED-% 이런식으로 조회해 볼 수 있을 것이다!

 

SELECT *
FROM players
WHERE birthCity LIKE 'New%';

 

 

birthCity 값이 “NEW”로 시작하는 행을 조회

 

SELECT *
FROM players
WHERE birthCity LIKE 'New Yor_';

 

 

birthCity 값이 “NEW Yor”로 시작하며 그 뒤에 문자는 딱 한자리인 행을 조회

 

 

반응형