SQL Query 사용법 정리 > 기술자료 | 해피정닷컴

SQL Query 사용법 정리 > 기술자료

본문 바로가기

사이트 내 전체검색

SQL Query 사용법 정리 > 기술자료

MSSQL SQL Query 사용법 정리

페이지 정보


본문

   <SQL 데이타 정의문>


    0.데이타 타입
        INTEGER        : 4바이트 정수
        SMALLINT        : 2바이트 정수
        FLOAT(n)        : 부동소수
        DECIMAL(i, j)    : 고정소수
        CHAR(n)        : 문자의 수가 최대 n인 스트링;
                    검색시 속도가 약간 빠름
        VARCHAR(n)    : 문자의 수가 최대 n인 스트링;
                    저장시 문자열의 크기만큼 처리;
                    검색시 속도가 약간 느림
        DATE        : 일자(YYYYMMDD)
        TIME        : 시간(HHMMSS)

    1.기본 테이블의 생성
        CREATE TABLE 기본테이블이름
            (열이름 데이타타입 [NOT NULL]    
            { , 열이름 데이타타입 [NOT NULL] } * );

    2.기본 테이블의 변경
        ALTER TABLE 테이블이름
            ADD 열이름 데이타타입;


    3. 인덱스의 생성
        CREAT [UNIZUE] INDEX 인덱스이름
            ON 기본테이블 (열이름 [ASC | DESC]
                { , 열이름 [ASC | DESC] } * )
            [CLUSTER];
        ! CLUSTER : 물리적으로 가까운 곳에 저장됨.
        ! 열의 이름 순서는 순서의 순위.


    4. 기본 테이블의 제거
        DROP TABLE 기본테이블이름 ;


    5. 인덱스의 제거
        DROP INDEX 인덱스이름 ;


    <SQL 데이타 조작문>


    1. 데이타 검색
        SELECT [ALL | DISTINCT] 열리스트
            FROM 테이블이름 [범위변수] [{, 테이블이름 [범위변수]}*]
            [WHERE 조건]
            [GROUP BY 열리스트
            [HAVING 조건]]
            [ORDER BY 열리스트 [ASC | DESC]] ;
        ! 열 전부를 검색 : *
        ! DISTINCT : 중복제거
        ! 조건식 사용 비교연산자 : = >, <, AND, OR, NOT
        ! 범위변수가 없으면 테이블 이름을 범위 변수로 사용
        ! GROUP BY : 열이름별로 분할 (각 그룹에 대해 SELECT문을 적용)
        ! HAVING : GROUP에 대한 조건 명세.

        예 )
        SELECT CNO, AVG(FINAL)
            FROM ENROL
            GROUP BY CNO
            HAVING COUNT(*)> 3;

    - 집단함수를 이용한 검색
        SELLCT COUNT | SUM | AVG | MAX | MIN ([DISTINCT] 열이름)
        FROM .....

    - SELFJOIN
        예)
        SELECT S1.SNO, S2.SNO
            FROM STUDENT S1, STUDENT S2
            WHERE S1.DEPT = S2.DEPT
                AND S1.SNO < S2.SNO;

    - SUBQUERY
        예)
        SELECT SNAME
            FROM STUDENT
            WHERE SNO IN
                (SELECT SNO
                    FROM ENROL
                    WHERE CNO='C413');
        =
        SELECT STUDENT.SNAME
            FROM STUDENT, ENROL
            WHERE STUDENT.SNO=ENROL.SNO
                AND ENROL.CNO='C413';
        ! IN 이외에 =, > 등의 조건식을 사용할 수 있다.

    - LIKE
        예)
        SELECT CNO, CNAME
            FROM COURSE
            WHERE CNO LIKE 'C%';
        ! C% : C로 시작하는 문자열
        ! %C__: 끝에서 3번째가 C인 문자열

    - NULL
        예)
        SELECT SNO, SNAME
            FROM STUDENT
            WHERE DEPT IS [NOT] NULL;
        ! 항상 IS 를 사용해서 검색

    - EXISTS
        예)
        SELECT SNAME
            FROM STUDENT
            WHERE [NOT] EXISTS
                (SELECT *
                    FROM ENROL
                    WHERE SNO=STUDENT.SNO
                        AND GRADE='A'
                        AND CNO='C413');

    - UNION ( https://www.happyjung.com/bbs/board.php?bo_table=lecture&wr_id=1452 참조 / update. 2013-05-13 )
        예)
        SELECT SNO
            FROM STUDENT
            WHERE YEAR = 3
                UNION
        SELECT SNO
            FROM ENROL
            WHERE CNO='C324';
        ! 중복된 투플은 제거됨


    2. 데이타의 갱신
        UPDATE 테이블이름
            SET 열이름 = 산술식 {, 열이름 = 산술식}*
            [WHERE 조건];


    3. 데이타의 삽입
        INSERT INTO 테이블 [(열이름 {[, 열이름]}*]
            VALUES (열값리스트) | SELECT문 ;


    4. 데이타의 삭제
        DELETE FROM 테이블이름
            [WHERE 조건문 ];



    <SQL VIEW>

    1. VIEW의 생성
        CREATE VIEW 뷰이름 [(열이름리스트)]
            AS SELECT문
            [WITH CHECK OPTION];
        ! WITH CHECK OPTION : 이 VIEW의 갱신이나 삽입연산은 VIEW정의 조건을 확인
        ! ALTER문의 사용할 수 없다.
        예)
        CREATE VIEW DEPTISIZE(DEPT, STNUM)
            AS SELECT DEPT, COUNT(*)
                FROM STUEDNT
                CROUP BY DEPT;


    2. VIEW의 제거
        DROP VIEW 뷰이름;
        ! VIEW가 유도된 기본 테이블이 제거되면 그 기본 테이블에 연관된
            모든 VIEW가 자동적으로 제거된다.
        ! VIEW가 제거되면 그 VIEW 위에 정의된 VIEW도 자동적으로 제거된다.


    3. VIEW의 조작 연산
        ! INSERT, DELETE, UPDATE문을 VIEW에 사용하기 위해서는
            TABLE의 행과 열의 부분집합으로만 정의되어야 한다.


        이것이 ASP 에서 DB 를 컨트롤 하기위한 SQL Query 기본 사용법이다.



    [1] 웹 페이지에서 DB를 컨트롤하기위한 기본 과정 정리

    1. DB 연결 문자열 만들기(4개 중에 하나만을 선택해야 함)

        1-1 ODBC 없이 SQL Server 에 연결문자열을 이용한 직접 연결
            YourServer    = "AosSQL"
            YourDB        = "aosSQLDB"
            YourUID        = "adminaos"
            YourPWD        = "aosadmin"

            strConnect = "Driver={SQL Server}; Server=" & YourServer & "; Database=" & YourDB & "; UID=" & YourUID & "; PWD=" & YourPWD & ""

        1-2 ODBC 의 DSN 을 이용한 SQL Server 연결

            YourDSN        = "ageofstone"
            YourUID        = "adminaos"
            YourPWD        = "aosadmin"

            strConnect = "DSN=" & YourDSN & ";Uid=" & YourUID & ";pwd=" & YourPWD & ";"

            혹은

            strConnect = "DSN=ageofstone;uid=adminaos;pwd=aosadmin;"


        1-3 ODBC 없이 Access MDB 에 연결문자열을 이용한 직접 연결

            YourDBpath = "d:AOS-Working-DB(mdb)ageofstone"
            YourDBname = "Ageofstone.mdb"
            YourDB = YourDBpath & YourDBname
            strConnect = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & YourDB



        1-4 ODBC 의 DSN 을 이용한 Access MDB 연결

            YourDSN = "ageofstone"
            strConnect = "DSN=" & YourDSN


    2. 위에서 지적한 연결로 DB 연결

    Set Dbcon = Server.CreateObject("ADODB.Connection")
    Dbcon.Open(strConnect)

    3. Table 이름 지정 및 SQL 스크립트 만들기

        strTable = "AGEOFSTONE_BBS"

        strSQL = _
            " SELECT " &_
                    " bbs_num, bbs_subj, bbs_name" &_
            " FROM " &_
                    strTable &_
            " WHERE " &_
                    " bbs_index = " & "'" & bbs_index & "'" &_    ' bbs_index 는 다중게시판을 위한 인덱스
            " ORDER BY " &_
                    " bbs_ref DESC, bbs_step, bbs_level"

    4. Table 열기

        Set rs = Server.CreateObject("ADODB.Recordset")
        rs.Open strSQL,Dbcon,adOpenKeyset


    5. 레코드의 존재유무 확인

        '레코드가 하나도 없다면
        if rs.EOF or rs.BOF then
            NoData = True            ' 이 부분엔 입력된 레코드가 하나도 없을 때의 처리를...
        Else    '레코드가 있다면
            NoData = False            ' 이 부분엔 입력된 레코드가 있을 때의 출력하는 코딩을...
            bbs_num  = rs("bbs_num")
            bbs_subj = rs("bbs_subj")
            bbs_name = rs("bbs_name")
        end if


    6. 레코드셋 종료와 DB 연결 끊기

        rs.Close
        DbCon.Close
        set rs = nothing
        set DbCon = nothing


    이것이 ASP 에서 DB 를 컨트롤 하기위한 기본과정이다.






    [2] DB의 레코드 추가하기(데이터 입력)


    1. 입력할 데이터를 저장

        bbs_num        = request("bbs_num")
        bbs_name    = request("bbs_name")
        bbs_subj    = request("bbs_subj")
        bbs_index    = request("bbs_index")


    2. DB 연결

        strConnect    = "DB 연결 문자열"

        Set DbCon = Server.CreateObject("ADODB.Connection")
        DbCon.Open strConnect


    3. 새 글 번호 생성

        strTable    = "테이블 이름"

        ' 새 글의 번호 생성
        strSQL = _
            " SELECT " &_
                    " MAX(bbs_num) " &_
            " FROM " &_
                    strTable &_
            " WHERE " &_
                    " bbs_index = " & "'" & bbs_index & "'"

        ' 위에서 작성한 스크립트로 테이블을 연다.
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Rs.Open strSQL,DbCon,adOpenKeyset

        if IsNull(Rs(0)) then    ' 아무것도 없는 새 테이블이면
            MaxNo = 1
        else                    ' 기존 레코드가 있다면
            MaxNO = Rs(0) + 1
        End If
        ' 새 글의 번호 생성 끝

        Rs.close
        Set Rs = nothing

        strSQL = _
            " INSERT INTO " &_
                    strTable &_
                    " (bbs_num, bbs_subj, bbs_name, bbs_index)" &_
            " VALUES " &_
                    " (" &_
                                MaxNO            & ", " &_
                        "'" & bbs_subj    & "'"    & ", " &_
                        "'" & bbs_name    & "'"    & ", " &_
                        "'" & bbs_index    & "'"           &_
                    ")"

        DbCon.Execute(strSQL)    ' 위에서 작성한 레코드입력 스크립트를 실행한다.

    4. DB 연결 끊기

        DbCon.Close                ' 모든 작업이 끝나면
        Set DbCon = nothing        ' 객체를 환원한다.

    이것이 ASP 에서 DB 의 레코드를 추가하는(데이터를 입력하는) 기본이다.




    [3] DB의 레코드 수정하기(데이터 수정)

    1. 수정할 새로운 데이터의 정보를 저장

        bbs_num        = request("bbs_num")
        bbs_name    = request("bbs_name")
        bbs_subj    = request("bbs_subj")
        bbs_pwd        = request("bbs_pwd")
        bbs_index    = request("index")


    2. DB 연결

        strConnect    = "DB 연결 문자열"

        Set DbCon = Server.CreateObject("ADODB.Connection")
        DbCon.Open strConnect


    3. 수정할 데이터의 존재유무 확인(다른 사람(관리자)이 간발의 차이로 삭제했을 수도 있으니)

        strSQL = _
            " SELECT " &_
                    " bbs_num" &_
            " FROM " &_
                    strTable &_
            " WHERE " &_
                    " bbs_index = "        & "'"    & bbs_index & "'" &_
                    " and bbs_num = "            & bbs_num

        Set rs = Server.CreateObject("ADODB.Recordset")
        rs.Open strSQL,DbCon,adOpenKeyset

        If rs.BOF Then

            rs.Close
            DbCon.Close
            Set rs = nothing
            Set DbCon = nothing

            %>
            <SCRIPT LANGUAGE="JavaScript">
            <!--
                alert("수정하시려는 글은 이미 삭제되었습니다.");
                history.go(-2);
            //-->
            </SCRIPT>
            <%

        End if

        rs.Close


    4. 비밀번호 확인

        strSQL = _
            " SELECT " &_
                    " * " &_
            " FROM " &_
                    strTable &_
            " WHERE " &_
                    " bbs_index = "        & "'" & bbs_index & "'" &_
                    " and bbs_pwd = "    & bbs_pwd

        rs.Open strSQL,DbCon,adOpenKeyset

        If rs.BOF Then

            rs.Close
            DbCon.Close
            Set rs = nothing
            Set DbCon = nothing

            %>
            <SCRIPT LANGUAGE="JavaScript">
            <!--
                alert("입력하신 비밀번호가 맞지 않습니다.n확인하시고 다시 입력하시기 바랍니다.");
                history.go(-1);
            //-->
            </SCRIPT>
            <%

        End if


    5. 레코드 업데이트(실제 데이터 수정 부분)

        strSQL = _
            " UPDATE " &_
                    strTable &_
            " SET " &_
                " bbs_subj="                & "'"    & bbs_subj    & "'" & "," &_
                " bbs_name="                & "'"    & bbs_name    & "'"        &_
            " WHERE " &_
                " bbs_index = "                & "'"    & bbs_index    & "'"        &_
                " and bbs_num ="                    & bbs_num

        DbCon.Execute(strSQL)

    6. 객체 환원(끝내기)

        rs.Close
        DbCon.Close
        Set rs = nothing
        Set DbCon = nothing


    이것이 ASP 에서 DB 의 레코드를 업데이트하는(데이터를 수정하는) 기본이다.



    [4] DB의 레코드 삭제하기(데이터 삭제)

    1. 삭제한 데이터의 정보를 저장

        bbs_num        = request("bbs_num")
        bbs_pwd        = request("bbs_pwd")
        bbs_index    = request("index")


    2. DB 연결

        strConnect    = "DB 연결 문자열"

        Set DbCon = Server.CreateObject("ADODB.Connection")
        DbCon.Open strConnect


    3. 삭제할 데이터의 존재유무 확인(다른 사람(관리자)이 간발의 차이로 삭제했을 수도 있으니)

        strSQL = _
            " SELECT " &_
                    " bbs_num" &_
            " FROM " &_
                    strTable &_
            " WHERE " &_
                    " bbs_index = "        & "'"    & bbs_index        & "'" &_
                    " and bbs_num = "            & bbs_num

        Set rs = Server.CreateObject("ADODB.Recordset")
        rs.Open strSQL,DbCon,adOpenKeyset

        If rs.BOF Then

            rs.Close
            DbCon.Close
            Set rs = nothing
            Set DbCon = nothing

            %>
            <SCRIPT LANGUAGE="JavaScript">
            <!--
                alert("수정하시려는 글은 이미 삭제되었습니다.");
                history.go(-2);
            //-->
            </SCRIPT>
            <%

        End if

        rs.Close


    4. 비밀번호 확인

        strSQL = _
            " SELECT " &_
                    " * " &_
            " FROM " &_
                    strTable &_
            " WHERE " &_
                    " bbs_index = "        & "'"    & bbs_index        & "'" &_
                    " and bbs_pwd = "            & bbs_pwd

        rs.Open strSQL,DbCon,adOpenKeyset

        If rs.BOF Then

            rs.Close
            DbCon.Close
            Set rs = nothing
            Set DbCon = nothing

            %>
            <SCRIPT LANGUAGE="JavaScript">
            <!--
                alert("입력하신 비밀번호가 맞지 않습니다.n확인하시고 다시 입력하시기 바랍니다.");
                history.go(-1);
            //-->
            </SCRIPT>
            <%

        End if


    5. 레코드 삭제(실제 데이터 삭제 부분)

        strSQL = _
            " DELETE FROM " &_
                    strTable &_
            " WHERE " &_
                " bbs_index = "                & "'"    & bbs_index        & "'"        &_
                " and bbs_num ="                    & bbs_num

        DbCon.Execute(strSQL)


    6. 객체 환원(끝내기)

        rs.Close
        DbCon.Close
        Set rs = nothing
        Set DbCon = nothing


    이것이 ASP 에서 DB 의 레코드를 삭제하는(데이터를 삭제하는) 기본이다.


자료출처
http://ttongfly.net/zbxe/?mid=database&document_srl=45365 

댓글목록

등록된 댓글이 없습니다.


Total 74건 3 페이지
  • RSS
기술자료 목록
34
MSSQL   25780  2010-09-01 16:11 ~ 2020-03-11 09:55  
33
MSSQL   15153  2010-08-05 08:11  
32
MSSQL   18672  2010-08-05 04:21  
31
MSSQL   21906  2010-04-26 22:35  
30
MSSQL   15775  2010-04-07 14:01 ~ 2017-09-22 00:00  
29
MSSQL   17644  2010-04-03 17:25  
28
MSSQL   14245  2010-01-15 11:47  
27
MSSQL   15074  2009-11-11 19:46  
26
MSSQL   18738  2009-09-25 06:08  
25
MSSQL   35094  2009-09-24 22:49  
24
MSSQL   21033  2009-09-24 20:55 ~ 2017-02-15 00:00  
23
MSSQL   15310  2009-09-24 20:03  
22
MSSQL   42260  2009-07-27 07:33  
21
MSSQL   40915  2009-07-27 07:28  
20
MSSQL   17532  2009-07-22 18:52  
19
MSSQL   17758  2009-06-22 10:25  
18
MSSQL   21522  2009-06-16 03:24 ~ 2017-04-02 00:00  
17
MSSQL   16566  2009-05-08 09:43  
16
MSSQL   18337  2009-05-08 08:28  
열람
MSSQL   20974  2009-01-28 03:15  

검색

해피정닷컴 정보

회사소개 회사연혁 협력사 오시는길 서비스 이용약관 개인정보 처리방침

회사명: 해피정닷컴   대표: 정창용   전화: 070-7600-3500   팩스: 042-670-8272
주소: (34368) 대전시 대덕구 대화로 160 대전산업용재유통단지 1동 222호
개인정보보호책임자: 정창용   사업자번호: 119-05-36414
통신판매업신고: 제2024-대전대덕-0405호 [사업자등록확인]  
Copyright 2001~2024 해피정닷컴. All Rights Reserved.