MySQL 주석

DB 2017. 12. 4. 10:48

MySQL 주석 



+첨언 : 아래 내용중 현재는 - 로 주석 사용이 가능하다 

단 -- 뒤에 공백이나캐리지 리턴 등이 들어가야 함

즉 -- 두번 뒤 스페이스바가 꼭 있어야만 주석으로서 동작한다.


출처: http://cafe.naver.com/comhouse/638

카페 컴하우스 2005.01.26. 11:09

MySQL 기본문법|PHP&MYSQL
전체공개2005.01.26. 11:09
퍼스나콘/아이디 영역
파파(kalo****)
새싹멤버1:1대화

제 2강  MySQL 기본문법

지난 강좌에서 MySQL을 설치하 는 과정및 방법을 보았다.
이번 강좌에서는 MySQL을 구동하는 과정 과 간단한 사용법을 보겠다.

(1) MySQL의 기초지식

1)문자
문자열은 작은 따옴표(')혹은 큰 따옴표(")로 둘러쌓여 구분된다.

'여기는 깨비도 가 이끌어가는 강좌이다.'
"물론 깨비도가 만들어가는 강좌는 ..."

역 슬래시(\)를 사용하면 특별 한 의미를 가지게 되는 문자도 있다.

  \0

  널문자(null)

  \n

  개행문자

  \t

  탭(tab)

  \r

  캐리지 리턴(carriage return)

  \b

  back space

  \'

  single quote(')

  \"

  double quote(")

  \\

  역슬래시(\) 문자

  \%

  퍼센트(%) 기호 검색시에 사용되 는 % 문자가 아닌 그냥 문자

  \_

  _문자 검색 시에 사용되는 _문자 가 아닌 그냥 문자

*위 에서 나오는 캐리지 리턴은 즉 커서가 위치한 라인의 첫문자열로 이동한다.
*위에서 나오는 \는 특수문자를 \바 로 뒤에 오는 문자열을 특수의미를 지닌 문자열로 파악하지 말고 단지 기호로서의 문 자열로 파악하라는 의미로 종종 사용된다
.


2)숫자

숫자는 일련의 숫 자로 나타내며 당연한 이야기이지만 '.'은 소수점을 나타낸다.
숫자 앞에 나오는 -는 음수를 나타낸다.


올바른 정수표현의 예는 아래와 같다.


    3423
   &n bsp;0
    -43
    - 3823
 

올바른 실수표현의 예는 아래와 같다.


    3423.34
    ; 0.9384
    - 43.23847
    -323.382e+3
 

3)데이타베이스, 테이블,컬럼,인덱스 등의 이름 붙이기

MySQL에서 사용 가능한 이름의 규칙

-이름은 반드시 영문자 또는 숫자 또는 '_'와 '$' 문자로 이루어져야 한다.물론 euc_kr 문자 셋을 사용해서 컴파일 했 다면 한글 이름을 줄 수도 있지만 권장할 만한 방법은 아니다.
-이름 은 최대 64자 까지 허용되며,별칭(alias name)은 최대 256자 까지 될 수 있다.
-이름은 첫 글자는 영문으로 시작되어야 하며 숫자로만 사용할 수는 없다.
-이름에 '.' 문자를 쓸 수 없다.

4)이름에서의 대 소문자의 구별

MySQL은 데이터베이스는 디렉토리로,테이블 은 파일로 저장하기 때문에 운영체제와 밀접한 관계가 있다.따라서 유닉 스나 리눅스와 같이 파일명에서 대소문자를 구분할 경우 당연히 데이터베이 스 이름,테이블 이름 등의 대소문자가 구분되고 윈도우 계열의 운영체제와 같 이 파일이름의 데소문자 구분이 없는 운영체제에서는 대소문자 구분이 없 다.

###################################################
비록 Win32 계열의 운영체제의 경우 대소문자 구분을 하지 않지만 하나의 SQL 문에서 대소문자를 섞어서 사용할 수는 없다.아래는 잘못 된 예이다.
   mysql> SELECT * FROM  table_name WHERE table_column=1;
 또한 별칭(Aliases)는 대소문자를 구분한다.아래 역시 어긋난 예이 다.
   mysql> SELECT table_column1 FROM table_name2 AS a WHERE table_column2=1 OR  table_column3=2;
####################################################

5)주석

MySQL에서 쓰이는 주석에는 아래와 같이 2가 지가 있다.
하나는 #이고 다른 하나는 /*   */ 이다.
한 라인에서 # 다음에 오는 글은 모두 주석이다.
반면에 /*  과 */ 사이에 오는 글도 모두 주석이다.

 mysql> select * from table_name ; #주석입니다.
 mysql> create table_name1 ; /* 이것도 주석입니다. */
 mysql> desc  /*
 여기서 부터도 계속 주 석입니다.
 물론 이것은 여러줄 계속해서 주석으로 할
  수도 있습니다.
 이줄 마지막 까지 주석입니다. */
 table_name;

참고
:위에서 본 대로 MySQL 서버는 주석들을 인식하기는 하지만  /*    */ 형식의 주 석을 사용하는 데는 몇가지 제약이 있다.


-작은따옴표(')와 큰 따옴표(")는 주석 내부에서도 문자열의 시작과 끝을 나 타내므로 주석 내부에서라도 따옴표를 닫아주어야 한다.
-세미콜론 (;)은 현재 SQL문의 마지막을 나타내므로 이후에 나타나는 모든 것은 다 음 줄의 시작부분으로 처리된다.
-이러한 제약 사항은 mysql 클라 이언트를 대화식(interactively)으로 사용할 때와 파일로 실행시킬 떄 (%mysql DB_NAME <my.sql> 모두 적용된다.
_마지막으로 MySQL 은 ANSI SQL의 '-'형태의 주석은 지원하지 않는 다.



'DB' 카테고리의 다른 글

다중 Primary key 설정  (0) 2016.04.14
OLTP(on-line transaction processing) 과 OLAP(online analytical processing)  (0) 2015.07.29
Posted by 파란개발자
,

다중 Primary key 설정

DB 2016. 4. 14. 17:07


다중 Primary key 설정

primary key가 여러개 필요한 경우가 있다.

create table test
(
 pkTest1 int primary key not null,
 pkTest2 int primary key not null
)

테이블 'test'에 여러 PRIMARY KEY제약 조건을 추가할 수 없습니다.

이런식으로 테이블을 만들면 에러가 날 것이다.

아래와 같은 방법으로 해결이 가능하다.
create table test
(
 pkTest1 int not null,
 pkTest2 int not null,
 primary key(pkTest1, pkTest2)
)

primary key를 다중으로 설정하게 되면 설정된 모든 키에 대한 중복데이터가 입력이 되지 않는다.

출처 - http://luckey.tistory.com/149

http://multifrontgarden.tistory.com/31

===================================================================================




'DB' 카테고리의 다른 글

MySQL 주석  (0) 2017.12.04
OLTP(on-line transaction processing) 과 OLAP(online analytical processing)  (0) 2015.07.29
Posted by 파란개발자
,
크리에이티브 커먼즈 라이선스
Creative Commons License

TABLE_A

===========

COLUMN_1

===========

1

2

3

TABLE_B

===========

COLUMN_1

===========

2

3

4


UNION

UNION ALL

SQL:

SELECT COLUMN_1

   FROM TABLE_A

UNION

SELECT COLUMN_1

   FROM TABLE_B

결과 :

COLUMN_1

1

2

3

4



SQL:

SELECT COLUMN_1

   FROM TABLE_A

UNION ALL

SELECT COLUMN_1

   FROM TABLE_B

결과 :

COLUMN_1

1

2

3

2

3

4

★UNION

-두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않는 값들을 반환한다.

-중복을 제거하기 위해 불가피하게 SORT 함

-자료가 많거나 INDEX가 되어있지 않는 칼럼을 대상으로 하면 쿼리시간이 길어질수 있음

★UNION ALL : 두 테이블의 중복되는 값까지 반환한다.



출처 : http://20140501.tistory.com/63


Posted by 파란개발자
,

toad로 개발툴을 바꾼뒤 기존 테이블을 건드리지 않고 결과를 도출해보기 위해 실행한 소스 



WITH PERSON AS (

                SELECT 'A1' AS ID, '삼각' AS NAME, '남' AS SEX FROM DUAL

                UNION ALL SELECT 'A2' AS ID, '사각' AS NAME, '여' AS SEX FROM DUAL

                UNION ALL SELECT 'A3' AS ID, '오각' AS NAME, '남' AS SEX FROM DUAL

                ),

     GRADE AS (

                 SELECT 'A1' AS ID, 'LANG' AS SUB_ID, '50' AS SUB_GRD FROM DUAL

                UNION ALL SELECT 'A2' AS ID, 'MUS' AS SUB_ID, '20' AS SUB_GRD FROM DUAL

                UNION ALL SELECT 'A1' AS ID, 'MATH' AS SUB_ID, '90' AS SUB_GRD FROM DUAL

                UNION ALL SELECT 'A3' AS ID, 'LIM' AS SUB_ID, '100' AS SUB_GRD FROM DUAL

                ),

     SUBJECT AS (

                 SELECT 'LANG' AS SUB_CD, '국어' AS SUB_NM FROM DUAL

                 UNION ALL SELECT 'MATH' AS SUB_CD, '수학' AS SUB_NM FROM DUAL

                 UNION ALL SELECT 'ENG' AS SUB_CD, '영어' AS SUB_NM FROM DUAL

                 UNION ALL SELECT 'MUS' AS SUB_CD, '음악' AS SUB_NM FROM DUAL

                 UNION ALL SELECT 'PHY' AS SUB_CD, '체육' AS SUB_NM FROM DUAL

                )

SELECT P.*, G.*

   FROM  PERSON P

INNER JOIN  GRADE G ON P.ID = G.ID

Posted by 파란개발자
,
컴퓨터인터넷IT용어대사전

OLTP

on-line transaction processing ]

on-line transaction processing의 약어. 호스트 컴퓨터와 온라인으로 접속된 여러 단말 간의 처리 형태의 하나. 여러 단말에서 보내온 메시지에 따라 호스트 컴퓨터가 데이터 베이스를 액세스하고, 바로 처리 결과를 돌려보내는 형태를 말한다. 데이터 베이스의 데이터를 수시로 갱신하는 프로세싱을 의미한다. 주문 입력 시스템재고 관리 시스템 등 현업의 거의 모든 업무는 이 같은 성격을 띠고 있다. 현재 시점의 데이터만을 DB가 관리한다는 개념이며, 이미 발생된 트랜잭션에 대해서는 데이터값이 과거의 데이터로 다른 디스크나 테이프 등에 보관될 수 있다.

참조어
변동 자료OLAP

[네이버 지식백과] OLTP [on-line transaction processing] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 일진사)


컴퓨터인터넷IT용어대사전

OLAP

online analytical processing ]

online analytical processing의 약어. 정보 위주의 분석 처리를 의미하며, 다양한 비즈니스 관점에서 쉽고 빠르게 다차원적인 데이터에 접근하여 의사 결정에 활용할 수 있는 정보를 얻을 수 있게 해주는 기술. OLTP에서 처리된 트랜잭션 데이터를 분석해 제품의 판매 추이, 구매 성향 파악, 재무 회계 분석 등을 프로세싱하는 것을 의미한다. OLTP가 데이터 갱신 위주라면, OLAP는 데이터 조회 위주라고 할 수 있다.

참조어
OLTP

[네이버 지식백과] OLAP [online analytical processing] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 일진사)



'DB' 카테고리의 다른 글

MySQL 주석  (0) 2017.12.04
다중 Primary key 설정  (0) 2016.04.14
Posted by 파란개발자
,

http://blog.daum.net/gunsu0j/17


[고난도 문제 연습]

-- 1. EMP 테이블에서 부서 인원이 4명보다 많은 부서의 부서번호인원수급여의 합을 출력하라.

select deptno, count(*), sum(sal)

from emp

group by deptno

having count(*)>4


-- 2. EMP 테이블에서 가장 많은 사원이 속해있는 부서번호와 사원수를 출력하라.

select deptno, count(*)

from emp

group by deptno

having count(deptno) =

(select max(count(*))

from emp

group by deptno)


-- 3. EMP 테이블에서 가장 많은 사원을 갖는 MGR 사원번호를 출력하라.

select mgr empno

from emp

group by mgr

having count(mgr) =

(select max(count(*))

from emp

group by mgr)


-- 4. EMP 테이블에서 부서번호가 10 사원수와 부서번호가 30 사원수를 각각 출력하라.

select

count(decode(deptno, 10, 1)) CNT10,

count(decode(deptno, 30, 1)) CNT20

from emp


-- 5. EMP 테이블에서 사원번호 7521 사원의 직업 같고 사원번호 7934인 사원의 급여(SAL)보다 많은 사원의 사원번호이름직업급여 출력하라.

select empno, ename, job, sal

from emp

where job =

(select job from emp

where empno = 7521)

and sal >

(select sal from emp

where empno = 7934)


-- 6. 직업(JOB)별로 최소 급여를 받는 사원의 정보를 사원번호이름업무부서명을 출력하라.

-- 조건1 : 직업별로 내림차순 정렬

select e.empno, e.ename, e.job, d.dname

from emp e, dept d

where e.deptno = d.deptno

and sal IN

(select min(sal)

from emp

group by job)

order by job desc


-- 7.  사원  시급을 계산하여 부서번호사원이름시급을 출력하라.

-- 조건1. 한달 근무일수는 20하루 근무시간은 8시간이다.

-- 조건2. 시급은 소수  번째 자리에서 반올림한다.

-- 조건3. 부서별로 오름차순 정렬

-조건4. 시급이 많은 순으로 출력

select deptno, ename, round((sal/20/8),1) 시급

from emp

order by deptno, round((sal/20/8),1) desc


-- 8.  사원  커미션 0 또는 NULL이고 부서위치가 ‘GO’ 끝나는 사원의 정보를 사원번호사원이름커미션부서번호부서명부서위치를 출력하라.

-- 조건1. 보너스가 NULL이면 0으로 출력

select

e.empno, e.ename, decode(e.comm,NULL, 'NULL',0) COMM,

e.deptno, d.dname, d.loc 

from emp e, dept d

where e.deptno = d.deptno

and

(e.comm = 0 OR e.comm IS NULL)

and d.loc like '%GO'


-- 9.  부서  평균 급여가 2000 이상이면 초과그렇지 않으면 미만을 출력하라.

select deptno, (case WHEN (avg(sal)>2000) THEN '초과' ELSE '미만' END) 평균급여

from emp

group by deptno

order by deptno


-- 10.  부서  입사일이 가장 오래된 사원을  명씩 선별해 사원번호사원명부서번호입사일을 출력하라.

select empno, ename, deptno, hiredate

from emp

where hiredate IN(

select min(hiredate)

from emp

group by deptno)


-- 11. 1980~1980 사이에 입사된  부서별 사원수를 부서번호부서명1980입사1981입사1982 출력하라.

select

d.deptno, d.dname,

count(decode(to_char(e.hiredate, 'YYYY'), '1980', 1)) 입사1980,

count(decode(to_char(e.hiredate, 'YYYY'), '1981', 1)) 입사1981,

count(decode(to_char(e.hiredate, 'YYYY'), '1982', 1)) 입사1982

from emp e, dept d

where e.deptno = d.deptno

group by d.deptno, d.dname


-- 12. 1981 5 31 이후 입사자  커미션 NULL이거나 0 사원의 커미션은 500으로 그렇지 않으면 기존 커미션 출력하라.

select ename, decode(comm, NULL, '500', 0, '500',to_char(comm)) as COMM

from emp

where hiredate>to_date('1981-5-31')


-- 13. 1981 6 1 ~ 1981 12 31 입사자  부서명 SALES 사원의 부서번호사원명직업입사일을 출력하라.

-- 조건1. 입사일 오름차순 정렬

select e.deptno, d.dname, e.ename, e.job, e.hiredate

from emp e, dept d

where

e.deptno = d.deptno

and e.hiredate>=to_date('1981-6-1')

and e.hiredate<=to_date('1981-12-31')

and d.dname = 'SALES'

order by hiredate asc


-- 14. 현재 시간과 현재 시간으로부터  시간 후의 시간을 출력하라.

-- 조건1. 현재시간 포맷은 ‘4자리년-2자일월-2자리일 24:2자리분:2자리초 출력

-- 조건1. 한시간후 포맷은 ‘4자리년-2자일월-2자리일 24:2자리분:2자리초 출력

select

to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') 현재시간,

to_char(sysdate+1/24, 'YYYY-MM-DD HH24:MI:SS') 한시간후

from dual


-- 15.  부서별 사원수를 출력하라.

-- 조건1. 부서별 사원 없더라도 부서번호부서명은 출력

-- 조건2. 부서별 사원수가 0 경우 없음 출력

-- 조건3. 부서번호 오름차순 정렬

select d.deptno, d.dname,

decode(count(ename), 0,'없음',count(ename)) 사원수

from emp e, dept d

where e.deptno(+) = d.deptno

group by d.deptno, d.dname

order by d.deptno


-- 16. 사원 테이블에서  사원의 사원번호사원명매니저번호매니저명을 출력하라.

-- 조건1.  사원의 급여(SAL) 매니저 급여보다 많거나 같다.

select

e.empno 사원번호, e.ename 사원명,

e.mgr 매니저사원번호, m.ename 매니저명

from emp e, emp m

where e.mgr = m.empno and e.sal>=m.sal


-- 18. 사원명의  글자가 ‘A’이고처음과  사이에 ‘LL’ 들어가는 사원의 커미션 COMM2일때, 모든 사원의 커미션에 COMM2 더한 결과를 사원명, COMM, COMM2, COMM+COMM2 출력하라.

select

DECODE(comm, NULL, 0, comm) comm,

(select comm

from emp

where ename like 'A%LL%') as comm2,

(DECODE(comm, NULL, 0, comm) +

(select comm

from emp

where ename like 'A%LL%')) as "COMM + COMM2"

from emp

order by "COMM + COMM2"


-- 19.  부서별로 1981 5 31 이후 입사자의 부서번호부서명사원번호사원명입사일을 출력하시오.

-- 조건1. 부서별 사원정보가 없더라도 부서번호부서명은 출력

-- 조건2부서번호 오름차순 정렬

-- 조건3입사일 오름차순 정렬

select d.deptno, d.dname, e.empno, e.ename, e.hiredate

from emp e RIGHT OUTER JOIN dept d

ON e.deptno = d.deptno

and to_char(e.hiredate, 'YYYYMMDD')> '19810531'

order by d.deptno, e.hiredate


-- 20. 입사일로부터 지금까지 근무년수가 30 이상 미만인 사원의 사원번호사원명입사일근무년수를 출력하라.

-- 조건1. 근무년수는 월을 기준으로 버림 (:30.4 = 30, 30.7=30)

select empno,ename,hiredate, trunc((sysdate - hiredate)/365) 근무년수

from emp

where trunc((sysdate - hiredate)/365)<30




한국정보 기술 연구원 KITRI 교육 (http://www.kitri.re.kr/)

Posted by 파란개발자
,


15.05.07 오라클 퀴즈

1.위 테이블을 활용하여



2. 위 사진의 테이블과 같이 출력하시오




3. 내가 풀은 답 캡쳐화면


select d.dname, p.name, g.gname

from department d, professor2 p, gift2 g

where d.deptno= p.deptno

and p.deptno= g.deptno;


+ 추가문제




Posted by 파란개발자
,

SQL 함수의 종류

 1. 단일 행 함수

가. 문자함수

나.숫자함수

다.날짜함수

라. 변환함수

1) 묵시적 데이터 형 변환

2) 명시적 데이터 형 변환

마. 일반함수

 2. 복수 행 함수

---------------------------------------------------------------

1. 단일행함수

가.문자함수

INICAP

Posted by 파란개발자
,

내가푼것


select name, tel, replace(tel, substr(tel, 1, INSTR(tel,')')-1), '##')

from student

where length(substr(tel,1,INSTR(tel,')')-1)) = 2

UNION all

select name, tel, replace(tel, substr(tel, 1, INSTR(tel,')')-1), '###')

from student

where length(substr(tel,1,INSTR(tel,')')-1)) = 3;


선생님 답


select name,  tel,  

lpad(substr(tel, instr(tel,')',1)), 12, '##########') 

from student;

Posted by 파란개발자
,

oracle 단축키

DB/Oracle 2015. 4. 29. 15:34

f9 : 맨 마지막 sql 실행

f5 : 전체 sql 실행

Posted by 파란개발자
,