SQL 첫걸음 6-7강 정리
21 Oct 2019책을 보면서 공부한 내용 복습 및 정리
6강
기본설정
- Mysql 서버 켜기
- Mysql 실행하기
- sample database 사용 설정하기
$ mysql.server start
$ sudo mysql
mysql> use sample;
저번에는 모든 컬럼을 가져왔는데 select에서 보고 싶은 컬럼만 지정하여 볼 수 있다.
mysql> SELECT no, name FROM sample21;
또는 where에서 조건을 설정할 수 있다. 조건식은 참/거짓을 반환하는 식을 비교 연산자를 사용해서 표현한다.
mysql> SELECT * FROM sample21 WHERE no = 2;
비교 연산자는 ‘=’ 외에도 다양하다. ‘=’의 반대로 ‘no’가 2가 아닌 값들을 가져오고 싶을 때는 ‘<>’를 사용한다. ‘!=’를 사용해도 결과는 같다. 조건식에 일치하는 행이 없을 경우에는 아무것도 반환하지 않는다.
mysql> SELECT * FROM sample21 WHERE no <> 2;
위의 예제는 열 값이 수치형이었는데 문자열형을 비교할 때는 single quote(‘ ‘)로 둘러싸서 표현한다. 날짜 시간형의 경우도 동일하다. 연, 월, 일을 구분할 때는 hypen(-)을 시, 분, 초는 colon(:)을 사용한다.
mysql> SELECT * FROM sample21 WHERE name = '박준용';
NULL값을 검색할 때는 ‘=’ 연산자가 아닌 IS NULL
을 사용해야 한다. NULL이 아닌 값을 찾을 때는 IS NOT NULL
을 사용한다.
mysql> SELECT * FROM sample21 WHERE birthday IS NULL;
mysql> SELECT * FROM sample21 WHERE birthdya IS NOT NULL:
비교연산자 정리
- = 연산자: 좌변과 우변이 값이 같을 경우 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;
OR 연산자는 하나만 참이면 참이 된다. 아래 예제에서는 a가 0이 아닌 행들과 b가 0이 아닌 행 모두를 반환하게 된다.
mysql> SELECT * FROM sample24 WHERE a <> 0 OR b <> 0;
AND, OR 연산자를 사용할 때 주의할 점
- 상수는 논리연산에서 항상 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가 항상 참이 되므로 모든 행을 반환하게 된다.
- 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로 연결하여 계산하게 된다.
의도한대로 결과를 얻기 위해서는 OR 조건식을 괄호로 묶어주어야 한다.
NOT 연산자는 조건식의 반대값을 반환한다. 아래 예제에서는 a열이 0 이 아니거나 b가 0이 아닌 행을 제외한 모든 행을 반환한다.
mysql> SELECT * FROM sample24 WHERE NOT(a<>0 OR b<>0);