SQL 첫걸음 6-7강 정리

책을 보면서 공부한 내용 복습 및 정리

6강

기본설정

  1. Mysql 서버 켜기
  2. Mysql 실행하기
  3. sample database 사용 설정하기
$ mysql.server start
$ sudo mysql
mysql> use sample;

저번에는 모든 컬럼을 가져왔는데 select에서 보고 싶은 컬럼만 지정하여 볼 수 있다.

mysql> SELECT no, name FROM sample21;

select_ex

또는 where에서 조건을 설정할 수 있다. 조건식은 참/거짓을 반환하는 식을 비교 연산자를 사용해서 표현한다.

mysql> SELECT * FROM sample21 WHERE no = 2;

where_ex

비교 연산자는 ‘=’ 외에도 다양하다. ‘=’의 반대로 ‘no’가 2가 아닌 값들을 가져오고 싶을 때는 ‘<>’를 사용한다. ‘!=’를 사용해도 결과는 같다. 조건식에 일치하는 행이 없을 경우에는 아무것도 반환하지 않는다.

mysql> SELECT * FROM sample21 WHERE no <> 2;

where_ex2

위의 예제는 열 값이 수치형이었는데 문자열형을 비교할 때는 single quote(‘ ‘)로 둘러싸서 표현한다. 날짜 시간형의 경우도 동일하다. 연, 월, 일을 구분할 때는 hypen(-)을 시, 분, 초는 colon(:)을 사용한다.

mysql> SELECT * FROM sample21 WHERE name = '박준용';

where_ex3

NULL값을 검색할 때는 ‘=’ 연산자가 아닌 IS NULL 을 사용해야 한다. NULL이 아닌 값을 찾을 때는 IS NOT NULL 을 사용한다.

mysql> SELECT * FROM sample21 WHERE birthday IS NULL;
mysql> SELECT * FROM sample21 WHERE birthdya IS NOT NULL:

null_ex

비교연산자 정리
  • = 연산자: 좌변과 우변이 값이 같을 경우 True
  • <> 연산자: 좌변과 우변이 값이 같지 않을 경우 True
  • 〉 연산자: 좌변의 값이 우변의 값보다 클 경우 True
  • < 연산자 : 우변의 값이 좌변의 값보다 클 경우 True
  • 〉= 연산자: 좌변의 값이 우변의 값보다 크거나 같을 경우 True
  • <= 연산자 : 우변의 값이 좌변의 값보다 크거나 같을 경우 True

7강

6강에서 검색 조건을 지정하는 방법을 알아보았는데 AND, OR, NOT 논리 연산자를 이용하여 조건을 더 세밀하게 조합할 수 있다.

AND 연산자는 모든 조건을 만족할 때 참이 된다. 아래 예제에서는 a도 0이 아니고 b도 0이 아닌 때 참이 되는 행을 반환하게 된다.

mysql> SELECT * FROM sample24 WHERE a <> 0 AND b <> 0;

and_ex1

OR 연산자는 하나만 참이면 참이 된다. 아래 예제에서는 a가 0이 아닌 행들과 b가 0이 아닌 행 모두를 반환하게 된다.

mysql> SELECT * FROM sample24 WHERE a <> 0 OR b <> 0;

or_ex1

AND, OR 연산자를 사용할 때 주의할 점
  1. 상수는 논리연산에서 항상 True이다.
    mysql> SELECT * FROM sample24 WHERE no = 1 OR 2;
    mysql> SELECT * FROM sample24 WHERE no = 1 OR no = 2;
    

    첫번째 식을 보면 no가 1이거나 2인 행을 얻을 수 있을 것 같지만 그러기 위해서는 두번째 식을 사용해야 하며 첫번째 식에서는 OR 뒤의 2가 항상 참이 되므로 모든 행을 반환하게 된다.

or_ex2

  1. AND의 우선순위가 OR의 우선순위보다 높다.
    mysql> SELECT * FROM sample24 WHERE a <> 0 AND b <> 0;
    mysql> SELECT * FROM sample24 WHERE a=1 OR a=2 AND b=1 OR b=2;
    mysql> SELECT * FROM sample24 WHERE (a=1 OR a=2) AND (b=1 OR b=2);
    

    ‘a<>0 AND b<>0’이라는 식은 ‘a가 1 또는 2이고 b가 1 또는 2이다’와도 같은 뜻이 된다. 두번째 문장을 a=1 OR a=2 AND b=1 OR b=2 로 할 경우 결과는 다르게 나온다. 그 이유는 AND가 OR보다 우선순위가 높아 먼저 계산하게 되기 때문이다. a=2 AND b=1을 먼저 계산한 후, 그 결과를 OR로 a=1, b=2로 연결하여 계산하게 된다.

and_or_ex1

의도한대로 결과를 얻기 위해서는 OR 조건식을 괄호로 묶어주어야 한다.

and_or_ex2

NOT 연산자는 조건식의 반대값을 반환한다. 아래 예제에서는 a열이 0 이 아니거나 b가 0이 아닌 행을 제외한 모든 행을 반환한다.

mysql> SELECT * FROM sample24 WHERE NOT(a<>0 OR b<>0);

not_ex