제 5절. WHERE절

1. WHERE 조건절 개요

WHERE 절에는 2개 이상의 테이블에 대한 JOIN 조건을 기술하거나, 결과를 제한하기 위한 조건을 기술한다.

SELECT 칼럼명
FROM 테이블명
WHERE 조건식;

2. 연산자의 종류

  • 비교연산자 : = (같다) <>, ^=, != (같지 않다), >, >=, <, <=

  • SQL 연산자 : BETWEEN A AND B, IN(list), IS NULL, LIKE '비교문자열'

  • 논리 연산자 : AND, OR, NOT

  • 부정 비교 연산자 : NOT 칼럼명 = (와 같지 않다), NOT 칼럼명 > (보다 크지 않다)

연산자의 우선순위

  1. 괄호 ()
  2. 부정 연산자 (not)
  3. 비교 연산자 ( <, >, BETWEEN, IN (list)
  4. 논리 연산자 AND OR

3. 비교 연산자

비교 연산자 오른쪽에 문자열을 사용할 경우, 따옴표로 묶어서 처리해야 한다.

SELECT PLAYER_NAME 선수이름
FROM PLAYER
WHERE TEAM_ID = 'K02'

WHERE TEAM_ID = K02 와 같이 쓰면 에러가 난다.
CHAR, VARCHAR 데이터유형일 때 주의해야 한다.

문자 유형마다 '비교'연산이 다르다.

기본적으로 서로 다른 문자가 나올 때 까지 비교한다.

  • CHAR 끼리 비교 : 길이가 다르면 짧은 쪽에 공백을 추가하여 길이를 같게 한 후 비교.
  • 한 쪽이 VARCAHR 인 경우 비교 : 길이가 다르다면, 길이가 긴 쪽을 크다고 판단. 길이가 같고 다른 것이 없다면 같다고 판단.
  • 문자를 상수와 비교 : 상수 쪽을 변수 쪽의 타입으로 바꾸고 비교

4. SQL 연산자

예약어로 된 연산자로서 모든 데이터 타입에 대한 연산이 가능하다.

  • BETWEEN a AND b : a와 b 를 포함하는 범위인지 비교
  • IN (list) : (list) 에 하나라도 속해 있다면 참이다.
  • LIKE '비교문자열' : %와 _을 사용한 와일드카드로 비교문자열을 만든다
  • IS NULL : NULL 값인지 비교한다. NULL 값과 비교하면 FALSE를 리턴한다.
NULL 값의 비교
  • NULL 값은 비교 할 수 없으므로 비교 연산자를 쓰면 FALSE를 리턴한다.
  • 수치 연산자와 연산해도 NULL 값을 리턴한다.
  • NULL 값의 비교연산은 반드시 IS NULL, IS NOT NULL 문구로 연산한다.
와일드 카드의 종류
  • % : 0개 이상의 어떤 문자
  • _ : 1개인 단일 문자
728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 6 : GROUP BY, HAVING  (0) 2020.05.27
SQL 기본 5 : 함수  (0) 2020.05.27
SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27
SQL 기본 1 : RDB 개요, DDL  (0) 2020.05.27

node.js 에서 MySQL을 연결하여 DML을 실행해보자. 

 

SELECT 컬럼명 FROM 테이블명 

INSERT INTO 테이블명 (컬럼명) VALUES(값)

DELETE FROM 테이블명 WHERE문

UPDATE 테이블명 SET 컬럼명=값, 컬럼명=값, ... WHERE문

참고) INSERT INTO 할 때, 컬럼명을 생략할 수 있긴 하다.

하지만, 테이블 구조가 변경되었을 경우를 대비하여 컬럼명을 생략하지 말고 명시를 꼭 하는게 좋다. 

 

DELETE와 UPDATE 할 때는 반드시 WHERE 조건문을 써야 함을 기억하자!


SELECT 

 

쿼리는 select*  from topic 이지만, 두개의 컬럼만 출력한다. 

 

var mysql      = require('mysql');

var conn = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '111111',
  database : 'o2'
});

conn.connect();

var sql = 'select * from topic';

conn.query(sql, function(err, rows, fields){
  if(err){
    console.log(err);
  }else{
    for(var i=0; i<rows.length; i++){
      console.log(rows[i].author +": "+ rows[i].title)
    }

  }
});

conn.end();

for문을 이용하여 출력한다. 

 

 

 

INSERT 

 

행 하나를 추가해보자. 

쿼리에서 개행할 때는 \ (역슬래시) 해주면 에러가 안난다. 

var mysql      = require('mysql');

var conn = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '111111',
  database : 'o2'
});

conn.connect();

var sql = 'INSERT INTO topic (title, description, author) \
VALUES("Node.js_02", "Server Side javascript", "coco")';

conn.query(sql, function(err, rows, fields){
  if(err){
    console.log(err);
  }else{
    console.log(rows);
  }
})

conn.end();

 

id와 title 만 조회하여 방금 INSERT 한 결과를 확인한다. 

 

console.log() 에 rows.insertId 를 출력해보자. 

 

var mysql      = require('mysql');

var conn = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '111111',
  database : 'o2'
});

conn.connect();

var sql = 'INSERT INTO topic (title, description, author) \
VALUES("Node.js_03", "Server Side js", "lululala")';

conn.query(sql, function(err, rows, fields){
  if(err){
    console.log(err);
  }else{
    console.log(rows.insertId);
  }
})

conn.end();

 node database.js 명령으로 실행 하면,

삽입한 행의 id가 출력된다. (insertId : 추가한 데이터의 고유한 식별자를 알아낸다.)

 

데이터베이스 select 해보면, id 값이 확인된다. 

  

 


사용자가 입력한 파라미터로 쿼리를 만들자. 

 

쿼리에 넣을 값을 ? 퀘스쳔 마크로 변경한다. 

params 라는 배열에 실제 값들을 넣는다. 

conn.query()함수의 두 번째 인자값으로 준다. 

node.js가 params를 sql에 주입해준다. (-> SQL injection 을 방지하는 효과가 있다.)

var mysql      = require('mysql');

var conn = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '111111',
  database : 'o2'
});

conn.connect();

var sql = 'INSERT INTO topic (title, description, author) \
VALUES(?, ?, ?)';

var params = ['Supervisor', 'watcher', 'graphittie'];

conn.query(sql, params, function(err, rows, fields){
  if(err){
    console.log(err);
  }else{
    console.log(rows.insertId);
  }
})

conn.end();

node database.js 실행하면  insertId가 출력되고, 

select 해보면 정상적으로 insert  된 결과를 확인할 수 있다. 


UPDATE

 

3이라는 id의 행을 대상으로, 타이틀과 저자를 수정한다. 

sql과 params를 변경한다.

var mysql      = require('mysql');

var conn = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '111111',
  database : 'o2'
});

conn.connect();


var sql = 'UPDATE topic SET title=?, author=? WHERE id=?';

var params = ['npm', 'itzy', 3];

conn.query(sql, params, function(err, rows, fields){
  if(err){
    console.log(err);
  }else{
    console.log(rows.insertId);
  }
})

conn.end();

3번 id 의 행이 변경된 것을 확인할 수  있다. 

 

 

delete 

 

3번 행을 지워본다. 

var mysql      = require('mysql');

var conn = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '111111',
  database : 'o2'
});

conn.connect();


var sql = 'DELETE FROM topic WHERE id=?';

var params = [3];

conn.query(sql, params, function(err, rows, fields){
  if(err){
    console.log(err);
  }else{
    console.log(rows);
  }
})

conn.end();

 

정상 처리가 되면 console.log(rows)에 OkPacket이 온다. 

SELECT 해보면 정상적으로 삭제된 것을 확인할 수 있다. 

 


SQL에 대한 내용이 더 필요하다면 w3school 에서 참고하자. 

https://www.w3schools.com/sql/sql_select.asp

 

SQL SELECT Statement

SQL SELECT Statement The SQL SELECT Statement The SELECT statement is used to select data from a database. The data returned is stored in a result table, called the result-set. SELECT Syntax SELECT column1, column2, ... FROM table_name; Here, column1, colu

www.w3schools.com

 

728x90

'프로그래밍 > Node.js' 카테고리의 다른 글

MySQL 명명 규칙  (0) 2020.03.23
MySQL 웹앱 - 글목록  (0) 2020.03.21
MySQL 사용  (0) 2020.03.18
MySQL 설치  (0) 2020.03.16
코드 개선  (0) 2020.03.16

설치 

 

SQLD 취득에는 실습이 중요하다는 교재의 조언을 따라보려고 오라클XE를 설치했다. 

 

SQL 개발자(Developer)이론서+문제집(2019)

본 도서는 한국데이터진흥원에서 시행하는 ‘SQL 개발자...

www.kyobobook.co.kr

교재는 oracle 11g xe 이지만, 18c xe 를 설치한다. 

 

오라클XE 설치 링크

 

Oracle Database Express Edition (XE) Downloads

Support Oracle Database Express Edition (XE) is a community supported edition of the Oracle Database family. Please go to the Oracle Database XE Community Support Forum for help, feedback, and enhancement requests. Note: Oracle Support Services only provid

www.oracle.com

 

(오라클은 회원가입하고 로그인해야 다운받을 수 있다는 것이 조금 귀찮다.)

 

다운받아서 압축풀고 setup파일 찾아서 설치한다.

 

기본으로 주어지는 system 계정의 비밀번호는 oracle로 해 두고.

 

Oracle 기본 위치는 C:\app\brocolia\product\18.0.0\ 디폴트 그대로 뒀다. 끝.

 

 

 

 

윈도우 서비스 확인 

 

윈도우 키 누르고 '서비스' 쳐보면 서비스가 바로 뜨는데 

알파벳 o 쳐서 OracleServiceXE를 찾아서 '상태'쪽이 '실행' 임을 확인한다. 

 

 

tnsping 실행 

 

cmd 켜서 tnsping 127.0.0.1 입력해본다 

 

 

 

Oralce 사용

 

최근에 추가한 앱에 가보면 SQL Plus가 있다.

 

SQL Plus 시작화면에 고정해두자
system oracle 치고 로그인!

system oracle 차례로 치고 접속된 것을 확인했다. 

 

 

 

사용자 생성 

 

oracle 12c 부터는 PDB 개념 때문에 사용자 생성할 때 c##을 붙여준다고 한다. 구글링 하니까 나옴.

 

사용자 생성할 때 c## 붙이기

 

권한 부여할 때도 c## 붙인다

 

 

다음 포스팅은 Toad 프로그램 설치다.

728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27
SQL 기본 1 : RDB 개요, DDL  (0) 2020.05.27
Toad TNS file 검증 에러  (0) 2020.02.21
실습 환경 만들기 - Toad 설치  (0) 2020.02.21

+ Recent posts