반응형

 

- MySQL , postgreSQL, MariaDB

SELECT * FROM 테이블이름
	WHERE 컬럼명 LIKE CONCAT(‘%’, #{파라미터}, ‘%’)

 

- Oracle

SELECT * FROM 테이블명
	WHERE 컬럼명 LIKE '%'||#{파라미터}||'%'
반응형

'SQL' 카테고리의 다른 글

SQL 기본편 - INSERT / UPDATE / DELETE  (0) 2020.03.08
SQL 기본편 - SELECT  (0) 2020.03.06
반응형

sql.xml

<select id="Dao랑 매핑시킬 ID" parameterType="파라미터 type" resultType="반환할 결과 type">
	SELECT CONCAT(T1.컬림A, ' > ', T1.컬럼B) FROM 테이블 T1
</select>

 

위와 같이 xml 파일에 쿼리문을 작성 할 떄, 다음과 같은 오류가 발생하게 됩니다.

 

Multiple annotations found at this line:

- The content of elements must consist of well-formed character data or markup.

- Start tag of element <select>

 

해당 오류가 발생하는 이유는 XML 에서 부등호를 문자열이 아닌 <select> </select>와 같이 시작과 끝을 알리는 TAG로 인식하기 때문입니다.

 

해결 방법

 

<select id="Dao랑 매핑시킬 ID" parameterType="파라미터 type" resultType="반환할 결과 type">
	<![CDATA[
		SELECT CONCAT(T1.컬림A, ' > ', T1.컬럼B) FROM 테이블 T1
	]]>
</select>

 

부등호를 사용 할 쿼리문에 <![CDATA[ ]]> 를 사용해주면 오류가 발생하지 않습니다.

반응형
반응형

이번에는 게시판에 적힌 글을 조회하는 포스팅을 하도록 하겠습니다.

 

우선 reviewVo에 조회할 때 필요한 조회 종류를 추가해주도록 하겠습니다.

 

reviweVo.java

조회 기능까지 추가된 후의 reviewVo.java

package com.example.mall.domain;


public class reviewVo {

	/*
	 CREATE TABLE reviewTable (
	reNum INT AUTO_INCREMENT PRIMARY key,
	reTitle VARCHAR(20) NOT null,
	reContent text not null,
	reUser VARCHAR(20) NOT null,
	reregisterDate DATE DEFAULT NOW(),
	reCnt INT DEFAULT 0 # 조회수
	
	  
	 */
	
	private int reNum;
	private String reTitle;
	private String reContent;
	private String reUser;
	private String reregisterDate;
	private int reCnt;
	
	private String searchName, searchValue; // 이름별 검색, 제목별 검색
	public String getSearchName() {
		return searchName;
	}
	public void setSearchName(String searchName) {
		this.searchName = searchName;
	}
	public String getSearchValue() {
		return searchValue;
	}
	public void setSearchValue(String searchValue) {
		this.searchValue = searchValue;
	}
	public int getReNum() {
		return reNum;
	}
	public void setReNum(int reNum) {
		this.reNum = reNum;
	}
	public String getReTitle() {
		return reTitle;
	}
	public void setReTitle(String reTitle) {
		this.reTitle = reTitle;
	}
	
	public String getReContent() {
		return reContent;
	}
	public void setReContent(String reContent) {
		this.reContent = reContent;
	}
	public String getReUser() {
		return reUser;
	}
	public void setReUser(String reUser) {
		this.reUser = reUser;
	}
	public String getReregisterDate() {
		return reregisterDate;
	}
	public void setReregisterDate(String reregisterDate) {
		this.reregisterDate = reregisterDate;
	}
	public int getReCnt() {
		return reCnt;
	}
	public void setReCnt(int reCnt) {
		this.reCnt = reCnt;
	}
	
}

reviewMapper.xml

<!-- 게시글 검색하기 -->
	<select id="selectsearch" resultType="reviewVo">
		select * from reviewTable where ${searchName} like concat('%',#{searchValue},'%') <!-- #은 데이터값 -->
	</select>

 

reviewmapper.java

// 게시글 검색하기
	public List<reviewVo> selectsearch(reviewVo reviewvo) throws Exception;

 

reviewService.java

	// 게시글 제목 또는 작성자로 검색하기
	public List<reviewVo> selectsearch(reviewVo reviewvo) throws Exception {
		return reviewmapper.selectsearch(reviewvo);
	}

 

view에 검색할 수 있는 form 양식 작성

 

list.jsp 

기능 검색 추가된 list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
게시글 불러오기 
<br>
<table border="2">
<tr>
	<th>글번호</th><th>제목</th><th>내용</th><th>작성자</th><th>등록일</th><th>조회수</th>
</tr>
<c:forEach var="item" items="${relist}">
<tr>
<td>${item.reNum}</td>
<td><a href="detailreview?reNum=${item.reNum}">${item.reTitle}</a></td>
<td>${item.reContent}</td>
<td>${item.reUser}</td>
<td>${item.reregisterDate}</td>
<td>${item.reCnt}</td>
</c:forEach>
</table>
<a href="write">글쓰기</a>
<form action="search">
<table>
<tr>
<td><select name="searchName">
		<option value="reUser">작성자</option>
		<option value="reTitle">글제목</option>
		</select></td>
	<td colspan="2">
	<input type="text" name="searchValue">
	</td>
	<td>
	<input type="submit" value="검색">
	</td>
</tr>	
</table>
</form>
</body>
</html>

 

결과창

 

작성자 '롤'이 들어가는 글자로 검색해보겠습니다.

 

반응형
반응형

게시글을 클릭하면 조회수가 올라가도록 하는 글을 포스팅 하도록 하겠습니다.

 

reviewMapper.xml

	<!-- 조회수 올리기 -->
	<update id="updatereviewcnt">
		update reviewTable set reCnt = reCnt + 1 where reNum = #{reNum}
	</update>

update문으로 조회수(reCnt)를 1씩 증가시켜주도록 합니다.

 

reviewmapper.java

	// 문의글 조회수 올리기
	public int updatereviewcnt(String reNum);

reviewService.java

	// 조회수 올리기
	public int updatereviewcnt(String reNum) throws Exception {
		return reviewmapper.updatereviewcnt(reNum);
	}

 

reviewController.java

	// 게시글 자세히보기
	@RequestMapping(value="/detailreview")
	public ModelAndView detail(@RequestParam("reNum") String reNum) throws Exception {
		
		// 기존의 게시글 자세히 보기에서 추가된 부분
		reviewservice.updatereviewcnt(reNum);
		
		return new ModelAndView("detail","detail1",reviewservice.detail(reNum));
	}
    
    // 추가된 부분
    // reviewservice.updatereviewcnt(reNum);

 

글을 누르기 전

글을 누른 후

 

반응형
반응형

게시판 글쓰기 기능

 

글 등록하기

 

reviewController.java

// 게시판 글쓰기 기능
	@GetMapping("/write")
	public String writeform() throws Exception{
		return "/writeform";
	}
	@PostMapping("insert")
	public String insertreview(reviewVo reviewvo) throws Exception{
		boolean result = reviewservice.insertreview(reviewvo);
		if (result) {
			return "success";
		} else {
			return "error";
		}
	}

 

reviewMapper.xml

	<!-- 게시판 글쓰기 기능 -->
	<insert id="insertreview">
		insert into reviewTable(reTitle, reContent, reUser)  values(#{reTitle}, #{reContent}, #{reUser})
	</insert>

reviewmapper.java

	// 문의 글 쓰기
	public boolean insertreview(reviewVo reviewvo) throws Exception;

reviewService.java

	// 게시글 작성 
	public boolean insertreview(reviewVo reviewvo) throws Exception {
		return reviewmapper.insertreview(reviewvo);
	}

 

writeform.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
** 글쓰기 **
<form action="insert" method="post">
글제목: <input type="text" name="reTitle"><br>
작성자: <input type="text" name="reUser"><br>
글내용: <textarea rows="5" cols="30" name="reContent"></textarea>
<br><br>
<input type="submit" value="저장">
</form>
</body>
</html>

 

게시글 상세보기

글 제목을 누르면 해당하는 글 번호의 내용을 상세보기로 출력 시켜주도록 하는 방법입니다.

 

list.jsp의 내용을 변경

<td><a href="detailreview?reNum=${item.reNum}">${item.reTitle}</a></td>

 

reviewService.java 추가

	// 게시글 상세보기
	public reviewVo detail(Integer reNum) throws Exception {
		return reviewmapper.detail(reNum);
	}

 

reviewController.java 내용 추가

	// 게시글 자세히보기
	@RequestMapping(value="/detailreview")
	public ModelAndView detail(@RequestParam("reNum") int reNum) throws Exception {
		
		// 
		return new ModelAndView("detail","detail",reviewservice.detail(reNum));
	}

 

reviewmapper.java 내용 추가

	// 문의글 상세 보기
	public reviewVo detail(Integer reNum) throws Exception;

 

reviewMapper.xml 내용 추가

	<!-- 게시글 상세보기 -->
	<select id="detail" resultType="reviewVo">
		select * from reviewTable where reNum = #{reNum}
	</select>

 

detail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = function() {
	document.getElementById("btnList").onclick = function() {
		location.href="/";
	}
	document.getElementById("btnUpdate").onclick = function() {
		
		if(confirm("정말수정할까요")) {
	
			frm.action="/updatereview";
			frm.submit();
		}
	}
	document.getElementById("btnDelete").onclick = function() {
		if(confirm("정말 삭제할까요?")) {
			frm.action="deletereview";
			frm.submit();
		}
	}
}
</script>

</head>
<body>
** 상세보기 **
<br>
<form name="frm" method="get">
<table border="2">
	<tr>
		<td>번호</td>
		<td>${detail1.reNum}</td>
		<input type="hidden" value="${detail1.reNum}" name="reNum">
		
	</tr>
	<tr>
		<td>작성자</td>
		<td>${detail1.reUser}</td>	
	</tr>
		<tr>
		<td>제목</td>
		<td>${detail1.reTitle}</td>
	</tr>
		<tr>
		<td>글내용</td>
		<td>${detail1.reUser}</td>
	</tr>
	</tr>
	<tr>
		<td>작성일</td>
		<td>${detail1.reregisterDate}</td>
	</tr>
	<tr>
		<td>조회수</td>
		<td>${detail1.reCnt}</td>
	</tr>
		<tr colspan="3">
		<td>
		<input type="button" value="목록" id="btnList">
		<input type="button" value="수정" id="btnUpdate">
		<input type="button" value="삭제" id="btnDelete">
		</td>
	</tr>
</table>
</form>
</body>
</html>

 

글을 눌렀을때 나오는 결과 페이지

 

 

글 수정하기

우선 상세보기에 사용하였던 메소드를 수정할 jsp 폼에 불러옵니다.

 

reviewController.java

	@GetMapping("/updatereview")
	// 여기서 RequestParam("num")은 detail.jsp에서 input 값의 reNum
	public ModelAndView update(@RequestParam("reNum") String reNum) throws Exception {
		
		return new ModelAndView("upform","up",reviewservice.detail(reNum));
	}

upform.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = function() {

	document.getElementById("btnUpdate").onclick = function() {
		
		if(confirm("정말수정할까요")) {
	
			frm.action="updatereviewcommit";
			frm.submit();
		}
	}
}
</script>

</head>
<body>
** 수정하기 **
<br>
<form name="frm" method="post">
<table border="2">
	<tr>
		<td>번호</td>
		<td>${up.reNum}</td>
		<input type="hidden" value="${up.reNum}" name="reNum">
		
	</tr>
	<tr>
		<td>작성자</td>
		<td>${up.reUser}</td>	
	</tr>
		<tr>
		<td>제목</td>
		<td><input type="text" value="${up.reTitle}" name="reTitle"></td>
	</tr>
		<tr>
		<td>글내용</td>
		<td><textarea rows="5" cols="50" name="reContent">${up.reContent}</textarea></td>
	</tr>
	</tr>
	<tr>
		<td>작성일</td>
		<td>${up.reregisterDate}</td>
	</tr>
	<tr>
		<td>조회수</td>
		<td>${up.reCnt}</td>
	</tr>
		<tr colspan="3">
		<td colspan="3">
		<input type="button" value="수정" id="btnUpdate" style="margin: auto; width: 100%;">
		</td>
	</tr>
</table>
</form>
</body>
</html>

 

 

여기서 제목과 내용을 수정 후 수정하기 버튼을 클릭 하면

 

reviewMapper.xml

	// 문의글 수정하기
	int updatereview(reviewVo vo) throws Exception;

 

reviewmapper.java

	// 문의글 수정하기
	int updatereview(reviewVo vo) throws Exception;

 

reviewService.java

	// 게시글 수정하기
	public int updatereview(reviewVo vo) throws Exception {
		return reviewmapper.updatereview(vo);
	}

reviewController.java

	@PostMapping("/updatereviewcommit")
	public String updatesubmit(reviewVo vo) throws Exception {
		int result = reviewservice.updatereview(vo);
		System.out.println("result " + result);
		if ( result > 0 )
			return "redirect:/";
		else
			return "error";
	}

 

현재 10번 글을 수정해보겠습니다.

 

 

 

 

글 삭제하기

 

reviewMapper.xml

	<!-- 글 삭제하기 -->
	<delete id="deletereview">
		delete from reviewTable where reNum = #{reNum}
	</delete>

 

reviewmapper.java

	// 게시글 삭제하기
	public int deletereview(String num) throws Exception;

 

reviewService.java

	// 게시글 삭제하기
	public int deletereview(String num) throws Exception {
		// TODO Auto-generated method stub
		return reviewmapper.deletereview(num);
	}

 

reviewController.java

	
	// 게시글 삭제하기
	@GetMapping("/deletereview")
	public String del(@RequestParam("reNum") String num) throws Exception {
		int delresult = reviewservice.deletereview(num);
		if(delresult > 0 )
			return "redirect:/";
		else
			return "error";
	}
	

 

현재 글이 10번까지 있는 것을 확인 할 수 있습니다.

 

10번 글을 지우도록 하겠습니다.

삭제가 정상적으로 된 것을 볼 수 있습니다.

 

반응형
반응형

* 윈도우에서 python용 MySql(MariaDB) 드라이버 설치 방법

버전별 드라이버 다운로드 http://www.lfd.uci.edu/~gohlke/pythonlibs/

사이트에서 mysqlclient 로 검색하여 원하는 파일( mysqlclient-1..-cp3*-cp3*m-win_amd64.whl )을 다운로드하면 된다.

확장자를 zip으로 변경하고 압축을 풀어준다. 

풀린 파일과 폴더들을 복사한 후 C:\Python3*\Lib\site-packages 에 붙여넣기 하면 된다.

또는 pip install ... 해주면 된다.

이클립스에서 MariaDB를 연결하는 방법은 다음과 같습니다.

 

방법 1.

conn = MySQLdb.connect(host = '127.0.0.1', user = '사용자이름', password='비밀번호', database='DB명')

ex)
conn = MySQLdb.connect(host = '127.0.0.1', user = 'root', password='123', database='test')

또는 다음과 같이 작성해주시면됩니다.

 

config = {

    'host':'127.0.0.1',
    'user':'사용자이름',
    'password':'비밀번호',
    'database':'DB명',
    'port':3306,
    'charset':'utf8',
    'use_unicode':True
}

ex)

config = {

    'host':'127.0.0.1',
    'user':'root',
    'password':'123',
    'database':'test',
    'port':3306,
    'charset':'utf8',
    'use_unicode':True

}

 

이번에는 제가 만든 테이블에 데이터를 삽입하고 결과를 출력해보겠습니다.

 

table prac

CREATE TABLE prac(num INT(255) NOT NULL PRIMARY KEY,
NAME VARCHAR(20),
HOUR INT(11),
pay INT(11))
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

 

 

위 DB연결 코드 밑에 데이터 삽입 SQL문을 넣고 결과를 보겠습니다

 

try:
    conn = MySQLdb.connect(**config)
    print(conn) # DB가 잘 연결되었는지 확인
    cursor = conn.cursor() # SQL문 수행을 위한 커서 객체 생성
    
   
        
except Exception as e:
    print('err : ',  e) 
    
finally:
    cursor.close()
    conn.close()

# print(conn) 의 출력 결과
<_mysql.connection open to '127.0.0.1' at 0000025181F6F578>

try문 내의 코드는 다음과 같습니다.

 

- import MySQLdb 를 하여 MySQLdb 모듈을 불러옵니다.

 

- MySQLdb.connect(**config) 메소드를 통하여 MySQL에 연결해줍니다. 호스트명, 사용자명, 암호, 접속할 DB, 포트, 등을 기재합니다.

 

- DB 접속이 성공하면, Connection 객체로부터 cursor() 메서드를 호출하여 Cursor 객체를 가져옵니다.

 

- cursor 객체를 생성하였다면 이제 이 객체로 SQL의 DML 명령어들을 다 수행할 수 있습니다.

 

이제 자료를 추가하고 수정하고 삭제하는 DML 명령어들을 작성해보겠습니다. 

 

지금부터 작성되는 내용들은 try ~ except 안에 추가로 작성해주시면됩니다.

 

1. 자료 추가 ( insert ) , 자료 조회 ( select )

방법 1.

# 자료 추가
    sql = "insert into prac(num, NAME, HOUR, pay) values (1, '홍길동',3,8000)"
    cursor.execute(sql) # 결과가 1이면 commit한다 아니면 rollback execute에 사실 리턴값이 존재
    conn.commit()
    
#select 전체자료 읽기
    sql = 'select * from prac'
    cursor.execute(sql)
    
    # 출력1 튜플 타입으로 출력된다
    for data in cursor.fetchall():
        print(data)
        
        
# 출력결과

(1, '홍길동', 3, 8000)

 insert 문을 사용하여 각각의 컬럼에 맞게 값들을 입력해주었습니다.

 

이후 cursor객체에 execute를 사용해  실행할 sql문이 들어있는 변수를 입력해줍니다.

그 후 commit() 과정을 해주어야 합니다.

그 이유는 Autocommit 이 아니기때문입니다. 자동으로 commit 실행을 하고싶다면, connect() 메서드 호출시 autocommit=True 를 지정해줍니다.

 

insert문이 잘 실행되었는지 보기 위해 select 문도 작성하고, 반복문 for을 통해 데이터가 잘 삽입 되었는지 출력해보았습니다.

 

이번에는 다른 방법으로 insert 문과 select문을 사용해보겠습니다.

방법 2.

 sql = "insert into prac values(%s,%s,%s,%s)" # 자바는 values에 ?가 들어감
    sql_data = (2, 'insert2','5', 9000)
    cursor.execute(sql, sql_data)
    conn.commit()
    
    
    
     # 출력 2 
     # 반복문 for에 cursor 객체 값들을 r에 넣고 출력
     # list로 출력
    for r in cursor: 
    
     # 배열에 저장되는 값들은 다음과 같습니다.
        print([r[0], r[1], r[2], r[3]]) # r[0] = num값 r[1] name값 r[2] HOUr값 r[3] pay값 저장     
        
# 출력 결과

[1, '홍길동', 3, 8000]
[2, 'insert2', 5, 9000]


 

방법 3.

 

    sql = "insert into prac values(%s,%s,%s,%s)" # 자바는 values에 ?가 들어감
    sql_data = '3','insert3',5,6000
    cursor.execute(sql, sql_data)
    conn.commit()

# 출력 3
# 이번에는 매핑을 이용하여 서로 값이 일치하게 저장되도록 합니다.
    for (num, NAME, HOUR, pay) in cursor:
        print(num, NAME, HOUR, pay)
       	print()

# 출력4
    for (a, b, c, d) in cursor: # 매핑한거라 값은 같게 출력
        print(a, b, c, d)

# 출력 결과

1 홍길동 3 8000
2 insert2 5 9000
3 insert3 5 6000

1 홍길동 3 8000
2 insert2 5 9000
3 insert3 5 6000

 

update / delete 문 사용 후 출력 방식은 출력 1에서 사용한 방법으로 출력하도록 하겠습니다.

 

2. UPDATE

# 자료 수정

    sql = "update prac set NAME = %s, HOUR=%s, pay=%s where num=%s"
    sql_data = ('홍씨에서이씨', 5, 10000, 1)
    cursor.execute(sql, sql_data)
    conn.commit()


    #select 전체자료 읽기
    sql = 'select * from prac'
    cursor.execute(sql)
    
    # 출력1

    for data in cursor.fetchall():
        print(data)
        
        
# 출력 결과

(1, '홍씨에서이씨', 5, 10000)
(2, 'insert2', 5, 9000)
(3, 'insert3', 5, 6000)

 

3. DELETE

 

방법 1)

 

    # 자료 삭제 
    num = '1'
    sql = "delete from prac where num = " + num #권장x
    cursor.execute(sql)
    conn.commit()


	# 출력 결과
    
    (2, 'insert2', 5, 9000)
	(3, 'insert3', 5, 6000)

 

방법 2)

 

    num = '2'

    sql = "delete from prac where num='{0}'".format(num) 
    cursor.execute(sql)
    conn.commit()
    
    
    # 출력 결과
    
    (3, 'insert3', 5, 6000)

 

방법 3)

 

    num = '3'

    sql = "delete from prac where num=%s" #가장많이 쓰는 방법 밑에 cursor와 매핑 할땐 튜플형태로 줘라
    cursor.execute(sql, (num, ))
    conn.commit()
    
    
    # 출력 결과
    
    

 

참고사이트

 

https://cafe.daum.net/flowlife

 

반응형

'python' 카테고리의 다른 글

[python] Numpy 데이터타입, 메모리저장, 배열  (0) 2020.05.28
python - Thread ( 스레드 ) (1)  (0) 2020.05.14
python - 예외처리  (0) 2020.05.11
python - OS & pickle  (0) 2020.05.11
python - 상속 (2)  (0) 2020.05.10
반응형

SQL문은 크게 DML , DDL , DCL로 분류 가능합니다.

 

DML은 데이터를 조작하는데 사용되는 언어로

SELECT / INSERT / UPDATE / DELETE 가 이 구문에 해당된다.

 

DDL은 데이터베이스 / 테이블 / 뷰 / 인덱스 등의 데이터베이스 개체를 생성 / 삭제 / 변경하는 역할을 한다.

자주 사용하는 DDL은 CREATE , DROP ,ALTER가 있다.

 

DCL은 사용자에게 권한을 부여하거나 빼앗을 때 주로 사용한다.

GRANT / REVOKE / DENY 가 있다.

 

INSERT

데이터를 삽입하는 명령어

 

INSERT 형식

INSERT INTO 테이블 [ 컬럼의 부분을 추가할 경우 입력 ] VALUES (값들);

자동으로 증가시켜야할 경우 AUTO_INCREMENT를 사용해줍니다.

 

AUTO_INCREMENT 형식

CREATE TABLE 만들테이블명 (num int AUTO_INCREMENT PRIMARY KEY, ... 새로운 컬럼명2 조건2)

 

AUTO_INCREMENT로 지정할 때는 PRIMARY KEY 또는 UNIQUE 설정을 해주어야하고 데이터 형은 숫자 형식만 사용 가능합니다.

 

UPDATE

기존에 입력되어있는 데이터 값을 변경

 

UPDATE 형식

UPDATE 테이블명 SET 열1=값1 , 열2=값2 where 조건;

이전 글에서 작성했던 데이터베이스에서 'HongGildong'을 'ilGildong'으로 수정해보겠습니다.

 

1
UPDATE information SET irum='HongGildong' , irum='ilGildong' WHERE irum='HongGildong';

 

출력 결과

 

 

where 조건문을 사용하지 않는 경우 다음과 같이 전부 다 바뀌는 경우가 생기니 조심해주도록 합니다.

 

1
UPDATE information SET irum='HongGildong' , irum='ilGildong';

 

출력결과

 

DELETE

데이터를 삭제하는 명령어입니다.

 

DELETE 형식

DELETE FROM 테이블명 WHERE 조건;

 

조금전에 변경했떤 'ilGildong'을 삭제해보겠습니다.

1
DELETE FROM information WHERE irum='ilGildong';

 

출력결과

 

 

반응형

'SQL' 카테고리의 다른 글

[SQL] Mybatis XML 작성 시 SQL 별로 LIKE 동적 쿼리 사용 방법  (0) 2022.05.17
SQL 기본편 - SELECT  (0) 2020.03.06
반응형

SELECT문

 

- 데이터베이스 내의 테이블에서 원하는 정보를 추출하는 명령어

 

SELECT문 기본 형식

 

SELECT 열이름 FROM 테이블명 [where 조건] ;

[ ] 부분은 생략이 가능합니다. 

 

USE문

 

- SELECT문을 사용하기에 앞서 해당 테이블을 사용할 데이터베이스를 지정해서 접속하여야한다.

 

USE문 기본 형식

 

USE 데이터베이스명 ;

ex) 데이터베이스명이 user라면

USE user;

라고 입력해줍니다.

 

위와 같은 문장의 의미

user 데이터베이스를 사용하겠다.

지금부터 실행하는 쿼리문은 user DB에서 수행합니다.

 

간단한 예를 만들어보겠습니다.

 

서버에 존재하는 DB를 확인하는 명령어는 다음과 같습니다

 

SHOW DATABASES;

 

데이터베이스명과 테이블명은 제가 임의로 만들었습니다.

 

ex.sql

1
2
3
4
5
6
7
8
9
10
11
CREATE DATABASE USER;
 
 
CREATE TABLE information(num INT(4), irum CHAR(15), height INT(4));
 
INSERT INTO information VALUES (1'HongGildong'158);
INSERT INTO information VALUES (2'EGildong'180);
INSERT INTO information VALUES (3'SamGildong'177);
INSERT INTO information VALUES (4'SaGildong'169);
INSERT INTO information VALUES (5'OhGildong'188);
 
 

 

 

테이블을 만드는 명령어

 

CREATE TABLE 테이블명 (컬럼명1 데이터타입1, 컬럼명2 데이터타입2);

ex)

CREATE TABLE USER (num int(4), irum char(15));

 

 

데이터베이스명 : USER

테이블명 : information

 

1
2
3
USE USER;
 
SELECT * FROM information;

 

출력결과

 

 

* 해당 출력 결과는 제가 임의로 넣은 데이터입니다.

 

관계연산자 사용

 

- 번호가 3번 이후면서 키가 180 이상인 사람을 출력

해당과 같은 출력은 위에서 말씀드렸듯 SELECT문 뒤에 where 조건문을 추가해주어야합니다.

 

1
SELECT * FROM information WHERE num >= 3 AND height >= 180;

 

출력 결과

 

- 번호가 2번 이전이거나 키가 170 이상인 사람을 출력

이번 문제는 또는의 조건을 주었습니다.

1
SELECT * FROM information WHERE num <= 2 OR height >= 170;

 

출력결과

 

 

이번에는 그냥 AND가 아닌 BETWEEN AND와 IN, LIKE를 설명해보겠습니다.

- 키가 160 ~ 180 사이의 인원을 출력

 

위 문제처럼 다음과 같이 작성 가능하지만

1
SELECT * FROM information WHERE height >= 160 AND height <= 180;

이번에는 BETWEEN AND를 사용한다면

1
SELECT * FROM information WHERE height BETWEEN 160 AND 180;

다음과 같이 작성 가능합니다.

 

출력결과

 

이번에는 OR와 IN을 비교해보도록 하겠습니다.

- num이 1번 3번 5번을 출력

1
SELECT * FROM information WHERE num=1 OR num=3 OR num=5;

 

출력결과

 

OR을 연속적으로 사용하여 구분도 가능하지만

IN()을 사용할 수도 있습니다.

1
SELECT * FROM information WHERE num IN(1,3,5);

출력 결과는 위와 동일하게 나타납니다!

 

이번에는 LIKE연산자에 대해 설명해드리겠습니다.

 

예를들어 'Hong%' 인 경우 성이 'Hong' 이고 뒤에는 어떤 것이든 허용한다는의미이다. 이 말은 Hong이 맨 첫 글자에 있는 경우 다 출력한다.

 

다음으로 '_Gildong' 의 경우는 맨 첫 1칸은 아무 글자나 들어와도 상관없지만 뒤 나머지 글자가 Gildong으로 끝나는 경우를 출력해야 한다.

 

저의 경우 뒤에 글자가 다 Gildong이므로 'Hong_______'을 출력해보겠습니다. ( _ 를 7개 사용하였습니다.)

 
1
SELECT * FROM information WHERE irum LIKE 'Hong_______';

 

출력 결과

 

 

서브 쿼리

 

쿼리문 안에 또 다른 쿼리문이 존재하는 것을 뜻한다.

- 'SaGildong' 보다 키가 크거나 같은 사람을 출력

1
SELECT * FROM information WHERE height > (SELECT height FROM information WHERE irum = 'Sagildong');

 

출력결과

 

 

ORDER BY

조건이 주어지면 해당 조건에 따라서 순서대로 나열해준다.

 

키 순서대로 출력해보겠습니다.

1
SELECT * FROM information ORDER BY height;

 

출력결과

 

 

height 뒤에 DESC를 써주면 내림차순 정렬이지만 생략시에는 자동으로 ASC가 적용되어 오름차순으로 출력됩니다.

 

* 주의할 점 : ORDER BY절은 SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, 중에서 가장 뒤에 작성되어야한다.

 

LIMIT

출력 문장 개수에 제한을 주는 명령어입니다.

 

위 문장에서는 키 순서대로 5개의 데이터가 전부 출력되었지만 이번에는 LIMIT 조건을 3으로 주어보겠습니다.

1
SELECT * FROM information ORDER BY height LIMIT 3;

 

출력결과

 

 

추가 ! 테이블을 복사하는 방법 !

테이블 복사 형식

CREATE TABLE 새로운테이블명 (SELECT 복사할컬럼 FROM 복사할테이블)

 

information 테이블을 information2로 복사한 후 출력해보겠습니다.

 

1
2
3
CREATE TABLE information2 (SELECT * FROM information);
 
SELECT * FROM information2;

 

출력 결과

 

 

동일하게 출력되는 것을 알 수 있습니다.

복사할 컬럼 부분에 원하는 조건만 추가하여 복사도 가능합니다.

 

집계함수

 

집계함수 형식

SELECT 집계함수(집계할컬럼내용) FROM 테이블명;

 

SUM과 AVG

SUM은 말 그대로 합을 뜻하며, AVG는 평균값을 뜻합니다.

5명의 키를 다 더하여 평균을 계산해보겠습니다.

 

1
2
3
SELECT SUM(height) FROM information;
 
SELECT AVG(height) FROM information;

 

출력결과

 

 

또 다른 집계 함수를 정리해보았습니다.

 

함수명 설명
AVG() 평균값
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
COUNT(DISTINCT) 행의 개수를 센다.

 

 

반응형

+ Recent posts