'프로그래밍/SQL'에 해당되는 글 12건

1
2
3
4
5
6
7
8
DELIMITER $$
create procedure NewUser (_id int, _name varchar(20))
begin
 
insert into user(id,name) values (_id , _name);
 
end$$
DELIMITER ;
cs

1 , 8 : DELIMITER로 처음과 끝을 감싸야 한다. (이유는 이전 글 참고)

2 : 프로시저 정의 (인자를 받지 않을 수도 있다)

3 , 7 : 시작과 끝

 

1
call test.NewUser(123,'bang');
cs

호출은 call 을 사용한다.(여기서 test는 프로시저가 있는 db이름)

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

sql 함수 만들기  (0) 2019.08.07
mysql Limit  (0) 2017.10.22
sql의 주석  (0) 2017.10.19
유니티와 mysql 연동하기  (0) 2017.10.19
mysql 자동증가값(auto_increment) 가지고 오기  (0) 2017.10.13
블로그 이미지

stuban

ㅇ.ㅇ

,
1
2
3
4
5
6
7
8
9
10
11
delimiter $$
create function SignUp (_id int)
returns varchar(20)    
begin
 
declare rtn_val varchar(20);
select name from user where id = _id into rtn_val;
return rtn_val;
 
end$$
delimiter ;
cs

 

1 , 11DELIMITER 로 처음과 끝을 감싸야 한다 DELIMITER 뒤에 있는 $$는 다른 문자로 바꿀 수 있다. (대신 10번째 줄에 있는 $$도 바꿔야함)

DELIMITER의 역할은 쿼리의 끝은 ; 가 아니라 $$ 라는 것을 알려줘서 중간에 명령이 실행되는 것을 막는다.

2 : 함수 정의 , 입력값

3 : 리턴값

4 : 함수 시작

6 : 변수 정의

7 : into 문으로 변수에 값을 넣을 수 있음

8 : 리턴

9 : $$ 으로 진짜 쿼리가 끝이라는 것을 알려준다

11 : 쿼리의 끝을 $$ 이 아니라 ; 이라고 돌려놓음

 

1
select test.SignUp(122);
cs

실행은 select 문으로 할 수 있다. (여기서 test는 함수가 있는 db이름)

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

sql 프로시저 만들기  (0) 2019.08.07
mysql Limit  (0) 2017.10.22
sql의 주석  (0) 2017.10.19
유니티와 mysql 연동하기  (0) 2017.10.19
mysql 자동증가값(auto_increment) 가지고 오기  (0) 2017.10.13
블로그 이미지

stuban

ㅇ.ㅇ

,

mysql Limit

프로그래밍/SQL 2017. 10. 22. 15:58

mysql이랑 mssql은 확실히 많은 부분이 다른 거 같다.


Select를 했을때 위에서부터 선착순으로 출력하는 TOP이라는 절이 있는데

이건 mySQL에서는 작동하지 않는다.


그 대신 LIMIT라는 게 있는데 이건 TOP와 같은 기능이지만 좀 쓰는 법이 다르다.


(테스트용 테이블은 1~10 까지 순서대로 들어있는 테이블)


1
select * from test limit 5; #5순위까지 
cs




1
select * from test limit 5,5; #5순위부터 5순위까지
cs


참고


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

sql 프로시저 만들기  (0) 2019.08.07
sql 함수 만들기  (0) 2019.08.07
sql의 주석  (0) 2017.10.19
유니티와 mysql 연동하기  (0) 2017.10.19
mysql 자동증가값(auto_increment) 가지고 오기  (0) 2017.10.13
블로그 이미지

stuban

ㅇ.ㅇ

,

sql의 주석

프로그래밍/SQL 2017. 10. 19. 22:21

mssql로 처음 sql을 배웠을 때 --가 주석인 줄 알았는데 

mysql에서 먹히지 않는 걸 보고 검색을 해보니 mysql에서는 --을 지원하지 않는다고 한다.



그러니깐 mysql의 주석은 # 혹은 /**/이고 --은 사용할 수 없다.


ANSI는 미국 표준이라는 뜻인데 표준을 지원하지 않는다니 뭔가 이해가 되지는 않는다...


참고

http://honesger.tistory.com/1

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

sql 함수 만들기  (0) 2019.08.07
mysql Limit  (0) 2017.10.22
유니티와 mysql 연동하기  (0) 2017.10.19
mysql 자동증가값(auto_increment) 가지고 오기  (0) 2017.10.13
오늘 새로배운 mysql 정리  (0) 2017.10.12
블로그 이미지

stuban

ㅇ.ㅇ

,

우선 기본 구조는 유니티에서 php로 정보를 보내고 php에서 정보를 토대로 mysql에 쿼리를 보내서 (혹은 프로시저를 호출해서) 정보를 받고 다시 유니티에 보내는 방식이다.




일단 유니티에서 php를 호출 하는 코루틴


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//맵 정보 검색하기
private IEnumerator GetMapInfos(string word)
{
    WWWForm form = new WWWForm();//php에 보낼 폼을 만듦
        
    //전해줄 정보 입력
    form.AddField("way", searchWay.ToString());
    form.AddField("word", word);
 
    WWW webRequest = new WWW("http://127.0.0.1/GetMapInfo.php",form);//127.0.0.1은 로컬 호스트 주소
 
    yield return webRequest;//정보가 올 때까지 기다림
 
    if (webRequest.isDone)//잘되면
    {
        ShowResult(webRequest.text);
    }
    else//안되면
    {
        Debug.Log(webRequest.error);
    }
}
cs


쓸 때는 그냥 코루틴 호출 하듯이 하면 된다.



php소스 (apmSetup을 사용한다면 C:\APM_Setup\htdocs)안에 파일을 넣으면 된다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
 
$way = $_POST['way']; //검색 방법 (0 = id 1 = 이름 2 = 제작자)
$word = $_POST['word']; //검색문
 
 
//xml로 반환을 위함
$xmlout = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
$xmlout .= "<mapinfos>";
 
//mysql연결
$connect = mysql_connect("127.0.0.1","root","apmsetup") or die("connect fail!".mysqli_error());
if(!$connect) die("connect fail!".mysql_error());
 
mysql_select_db ("test",$connect);//데이터베이스 사용
 
//쿼리 호출 방법
if($way == "0")//1 = id검색
    $sql = "SELECT * FROM testable WHERE id = '".$word."'";
else if($way == "1")//2 = 이름 검색
    $sql = "SELECT * FROM testable WHERE name LIKE '%".$word."%'";
else //3 = 제작자 검색
    $sql = "SELECT * FROM testable WHERE maker LIKE '%".$word."%'";
 
$result = mysql_query($sql,$connect);
 
while($row = mysql_fetch_array($result))
{
    $xmlout .= "<info>";
 
    $xmlout .= "<id>".$row['id']."</id>";
    $xmlout .= "<maker>".$row['maker']."</maker>";
    $xmlout .= "<name>".$row['name']."</name>";
    $xmlout .= "<map>".$row['map']."</map>";
 
    $xmlout .= "</info>\n";
 
 
$xmlout.= "</mapinfos>";
 
echo $xmlout;
 
mysql_free_result($result);//결과 지우기 
mysql_close($connect);//db와 연결 끊기
?>
 
cs


php에 select 결과를 xml로 뽑아주는 플러그인? 이 있다고 하는데 우선 야매로 처리했다.

(xml 사용법은 이전 블로그 글 참고)



테이블 구조



테이블 만드는 쿼리


1
2
3
4
5
6
7
create table  (
    id int(5unsigned zerofill not null auto_increment#자동증가 되는 id
    maker varchar(30not null#제작자
    name varchar(30not null#맵 이름
    map text not null#맵 정보
    primary key(id)
);
cs


참고로 cmd로 쿼리를 입력할 때는 주석이 오류를 낸다.(다른 방식으로 하면 되는지는 모르겠음)

방법찾음




결과 




참고로 웹 결과에는 <>안에 있는 내용이 나오지 않는다.


xml을 보기 편하게 해주는 헤더가 있다고 해서 시도해 봤는데 시간만 줄창 날렸다.

어차피 유니티에서는 잘 작동하니깐 시간 낭비할 필요는 없을 거 같다.



내가 시도해 보려고 한 유튜브 튜토리얼


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

mysql Limit  (0) 2017.10.22
sql의 주석  (0) 2017.10.19
mysql 자동증가값(auto_increment) 가지고 오기  (0) 2017.10.13
오늘 새로배운 mysql 정리  (0) 2017.10.12
sql 메모  (0) 2017.10.11
블로그 이미지

stuban

ㅇ.ㅇ

,

LAST_INSERT_ID()


LAST_INSERT_ID()라는 함수가 있다.

마지막으로 추가된 increment값을 가지고 올 수 있다고 한다.

아직 써보지는 않았지만 나중에 프로시저하나 만들어서 관리할 때 써먹어야겠다.


http://dongz.tistory.com/entry/MYSQL-%EC%9E%90%EB%8F%99%EC%A6%9D%EA%B0%80%EA%B0%92-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0


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

sql의 주석  (0) 2017.10.19
유니티와 mysql 연동하기  (0) 2017.10.19
오늘 새로배운 mysql 정리  (0) 2017.10.12
sql 메모  (0) 2017.10.11
apmSetup  (0) 2017.10.11
블로그 이미지

stuban

ㅇ.ㅇ

,


--오늘 만든 테이블

1
2
3
4
5
create table tb (
    id int(5unsigned zerofill not null auto_increment,
    name varchar(30not null,
    primary key(id)
)
cs


1. AUTO_INCREMENT 


컬럼을 정의할 때 데이터 타입 뒤에 auto_increment를 적고 (영어로 자동 증가라는 뜻)

primary key에 auto_increment를 넣어주면 자료가 하나씩 들어갈 때마다 알아서 하나씩 증가한 값을 넣어준다.


mssql의 identity 비슷한거 같다. (mysql에는 없는 기능인거 같음)


그러나 어찌 된 일인지 자동 증가를 선언할 때 컬럼명이 index이면 오류가 난다.


https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html



2. UNSIGNED


C언어 배울 때 자료형 목록을 보면서 본 적이 있는 단어다.

숫자의 음수 부분을 없애준다.



3. ZEROFILL


숫자형 데이터 타입 목록을 보면 뒤에 괄호를 치고 숫자를 넣을 수 있다고 되어있다.

만약 괄호를 치고 숫자를 넣는다면 . . .


아무일도 일어나지 않는다.



하지만 그때 뒤에 zerofill을 적어주면 

1을 넣었을 때 00001이라고 표시가 되는 것 이다.

(자릿수를 정의하고 남는 자릿수에 0(zero)을 채워줌(fill))


http://blackbull.tistory.com/44


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

유니티와 mysql 연동하기  (0) 2017.10.19
mysql 자동증가값(auto_increment) 가지고 오기  (0) 2017.10.13
sql 메모  (0) 2017.10.11
apmSetup  (0) 2017.10.11
SQL 정리 - 2 자료형들  (0) 2017.05.20
블로그 이미지

stuban

ㅇ.ㅇ

,

sql 메모

프로그래밍/SQL 2017. 10. 11. 21:20

예전에 sql수업 좀 들으면서 메모장에 메모한 메모


하나씩 잘 정리해서 블로그에 꾸준히 올리려고 했는데

귀찮아서 안 하다가 파일을 잃어버릴 뻔했다.


다행히 외장하드 한구석에 남아있어서 꺼내오기는 했는데

다시 잃어버릴까봐 그냥 한번에 올림.








sql 메모



CREATE DATEBASE 이름; -- 데이터 베이스 만들기


use Test; -- Test데이터 베이스 사용                                                


CREATE TABLE testTable(


number int identity(1,1) not null, --바꿀수 없는 자료 identity(시작하는 숫자,추가할따마다 추가되는 숫자)


Code INT, --코드 int

Title NVARCHAR(50), --타이틀 string NVARCHAR = 유니코드를 사용하는 문자

Price INT -- 가격 int

);                                     


dbcc checkident(테이블이름,0); -- 테이블의 아이덴티티값을 초기화


INSERT INTO 테이블이름(Code,Title,Price) --집어넣을 테이블 이름과 자료형 명시

VALUES (123,'스트링',500);--집어넣을 자료    


DELETE 테이블이름; --싸그리 지워 버리기                    


SELECT * FROM 테이블이름; --모든 테이블 정보

SELECT 원하는항목,원하는항목2 FROM 테이블이름; 


SELECT DISTINCT 원하는항목 FROM 테이블이름 --원하는 항목중 중복되는 것은 거름


--행추가

ALTER TABLE 테이블이름

ADD 추가할데이터이름 데이터형 초기값;


--행제거

ALTER TABLE 테이블이름

DROP COLUMN 행이름


--오름차순 정렬

SELECT * FROM 테이블이름 ORDER BY 행이름 ASC;

--내림차순 정렬

SELECT * FROM 테이블이름 ORDER BY 행이름 DESC;


--비교

select  * from 테이블이름 where 조건식; --논리연산자는 영어로 씀 and,or,not 그리고 "같다"는 '=' 하나만


--문자열 찾기

select * from 테이블 where 행이름 like '%예%';-- %''앞에 어떤글자를 포함함

select * from 테이블 where 행이름 like '__예';-- _앞에 _만큼의 글자가 있음


--값의 범위

select * from 테이블이름 where 행이름 between 0 and 30;


--널 검사

select * from 테이블이름 where 행이름 is null;--널이면 트루 

select * from 테이블이름where 행이름 is not null;--널이아니면 트루


--원하는값

select * from 테이블이름 where 행이름 in (원하는값1,원하는값2,ext)

select * from 테이블이름 where 행이름 not in (원하는값1,원하는값2,ext)


--출력하는 개수

select Top 1 * from 테이블이름;--위에서 선착순으로 출력


--foreach

update 테이블이름 set 설정값1,설정값2 where 설정조건;


--삭제

delete from 테이블이름 where 조건;




--함수들


--모든곳에서 사용가능한 함수


ceiling(실수) -- 올림

floor(실수) -- 내림


rand() -- 0~1 까지의 랜덤 숫자

round(숫자,반올림할 자리) -- 반올림할자리를 지정하여 반올림


len('문자열') --문자열의 길이

SUBSTRING('text',자릿수,가지고올길이) -- 텍스트의 자릿수번째부터 가지고올길이까지 가지고오기


ltrim('문자열')--왼쪽의 공백 제거

rtrim('문자열')--오른쪽의 공백 제거


upper('문자열') --문자열 대문자화

lower('문자열')--문자열 소문자화


getdate() -- 날자와 시간 정보

year(getdate()); --날자와 시간정보에서 연도구하기

month(getdate());--날자와 시간정보에서 달구하기

day(getdate());--날자와 시간정보에서 날자구하기


dateadd(d,1,'2017-3-13'); --날자에 1더하기

datediff(m,'2016-2-13','2017-3-13');  -- 2날자의 차이 구하기 (달단위)


datename(weekday,getdate()); -- 현제 요일의 이름


datepart(yyyy,getdate()); --현제 날자의 년도 뽑기

convertconvert(nvarchar(10),getdate(),112);; --날자 표시 형식 변경 (반환형,변경할거,코드)


--타입변환

cast(0,245 as varchar);--실수를 문자열로

cast('2016-03-11' as datetime)--문자열을 날자형으로


--테이블의 함수


select avg(행이름) from 테이블이름


AVG -- 평균

SUM -- 합계

COUNT -- 모든개수

MAX --최대값

MIN --최솟값



--그룹 바이

select name , Max(score) as high, min(score) as low from tbl_game group by name;

--이름이 같은사람끼리 그룹을 지어서 최댓값과 최솟값을 출력


select name , SUM(score) as su from tbl_game group by name having (sum(score) >= 300);

--그룹바이가 된 항목에 조건을 걸려면 having 을 사용



--서브 쿼리 

select * from tbl_game where point1 >= (select avg(point1) from tbl_game);

--셀렉트문안에 셀렉트문을 또 쓸수 있다          


--조인


select *from book cross join Orders;

--단순히 조합을 함  ,  으로 대신할수도 있음

select * from 테이블1 inner join 테이블2 on 테이블1.id = 테이블2 .id;

--on으로 조건을 줄수 있음

select *from 테이블1 left join 테이블2 on 테이블1.id = 테이블2.id; 

--왼쪽을 기준으로 조인을함


--번수 선언

declare @변수이름 테이터타입; -- 변수이름에 반드시 @가 있어야함

--변수 대입

set @변수이름 = 3;


--조건문


if 조건

begin --begin으로 시작해서 end로 끝남

실행문

end

else

begin

실행문

end                            


--while

while @test <10

begin

select @test;

set @test += 1;

end                               


--case 


바꿀 변수 = 

case 케이스에집어넣을변수

when 0 then 바꿀값1

when 1 then 바꿀값2

else 바꿀값3

end                                      


--isnull

if isnull(@temp,'') != ''

--널 값을 확인하고 대체값을 넣어줌 대체값을 보고 널인지 아닌지 구별할 수 있다



--뷰

--테이블에서 필요한 부분만 가져온 가상의 표 

--뷰와 테이블은 연동된다

--insert와 delete는 join이 되어있지 않은 뷰만 된다


--뷰 만들기

create view 만들고싶은뷰이름 as select * from  원래있던테이블 where 조건;


--뷰 삭제

drop view 뷰이름;


--집합연산자

select name from 테이블1 union select name from 테이블2--union 중복된데이터를 정리해서 기지고옴

select name from 테이블1 union all select name from 테이블2--union 중복된데이터도 가지고옴


select name from 테이블1 intersect select name from 테이블2;--intersect  교집합


select name from 테이블1 except select name from 테이블2;--except 처음에 쓴거를 중심으로 교집합


--ALL 서브쿼리 비교

select * from 테이블이름 where price > all (select saleprice from 테이블이름2)--서브쿼리의 모든값과 비교(and)


--ANY 서브쿼리 비교

select * from 테이블이름 where price > all (select saleprice from 테이블이름2)--서브쿼리의 값중 아무값과 비교하고 싶을때 (or)


--순위정렬

Select ROW_NUMBER() OVER(ORDER BY 열이름)from 테이블;--중복이 있어도 레코드 순서를 하나씩 표시

Select RANK() OVER(ORDER BY 열이름)from 테이블;

Select DENSE_RANK() OVER(ORDER BY 열이름)from 테이블;


--순위정렬로 랭크정렬하여 테이블에 기록

update emp set ranking = (

select r from

(select EMPNO,rank() over(order by sal desc) as r from emp) as t

where t.EMPNO = emp.EMPNO)



--new id

select newid();--서버의 네트워크 카드 MAC주소와 컴퓨터 시계로 부터 얻은 유일한 값의 조합

select checksum(newid()); --정수로 변환


--테이블 섞기

select * from emp order by newid();--newid로 섞기



--비밀번호


pwdencrypt('비밀번호'); -- 암호화

pwdcompare('12345',pw) = 1 ; --비교


select pwdcompare('1234',pw) from login where id = 'pc1';//로그인


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

mysql 자동증가값(auto_increment) 가지고 오기  (0) 2017.10.13
오늘 새로배운 mysql 정리  (0) 2017.10.12
apmSetup  (0) 2017.10.11
SQL 정리 - 2 자료형들  (0) 2017.05.20
SQL 정리 - 1 테이블 생성과 수정  (0) 2017.05.17
블로그 이미지

stuban

ㅇ.ㅇ

,