게시글
질문&답변
2024.06.03
regexp like 에 특정 특수기호 포함
안녕하세요? 더하기 (+) 기호는 정규식에서 바로 앞에 있는 문자가 하나 이상 반복됨을 의미하는 역할을 갖습니다. 그래서 문자열에서 + 기호를 찾으려면 '\+' 대신에 '\\+' 로 적어야 합니다. 슬래쉬 두 개를 사용해 + 가 일반 문자열임을 지정하는 것입니다. 제가 작성한 다음 예제 코드를 참고하시기 합니다. CREATE TABLE test ( col1 int, col2 varchar(20) ); INSERT INTO test VALUES(1, '-ABC'); INSERT INTO test VALUES(2, 'A+BC'); INSERT INTO test VALUES(3, '+ABC'); INSERT INTO test VALUES(4, 'ABC+'); INSERT INTO test VALUES(5, 'A+=BC'); INSERT INTO test VALUES(6, 'A*BC'); SELECT * FROM test WHERE col2 REGEXP '\+'; /* Error Code: 3688. Syntax error in regular expression on line 1, character 1. */ SELECT * FROM test WHERE col2 REGEXP '\\+'; /* col1 col2 ---------------- 2 A+BC 3 +ABC 4 ABC+ 5 A+=BC */ 질문해 주셔셔 감사합니다.
- 1
- 1
- 23
질문&답변
2024.04.27
컬럼 안 공백 문자열 제외
와~ 다행입니다. 밤새내 어찌 되었나 궁금했습니다^^ 공백 문자 제거에 대해 예제를 만들어보았습니다. 다음과 같이 REPLACE() 함수를 사용해 변경하면 됩니다. -- 테이블 만들기 CREATE TABLE Test ( col1 int, col2 varchar(100) ); -- 데이터 추가 INSERT INTO Test VALUES(1, ' 홍 길동 '); INSERT INTO Test VALUES(2, ' 일지 매'); INSERT INTO Test VALUES(3, ' 강 우 동 '); -- 확인 SELECT * FROM Test; /* '1', ' 홍 길동 ' '2', ' 일지 매' '3', ' 강 우 동 ' */ -- 공백 제거 UPDATE Test SET col2 = REPLACE(col2, ' ', ''); -- 확인 SELECT * FROM Test; /* '1', '홍길동' '2', '일지매' '3', '강우동' */ 질문 감사합니다~
- 1
- 1
- 53
질문&답변
2024.04.26
USING 조인 질문드립니다.
안녕하세요? 제가 질문을 제대로 이해있는지 모르겠네요. 다음과 같이 예제를 만들어 봤습니다. 혹시 원하시는 것이 아니면 다시 질문해 주세요. -- 테이블 만들기 CREATE TABLE fruits ( num int, fruit_list varchar(100) ); CREATE TABLE fruit_price ( fruit_name varchar(100), price int ); -- 데이터 추가 INSERT INTO fruits VALUES(1, '사과와당근'); INSERT INTO fruits VALUES(2, '배와딸기'); INSERT INTO fruits VALUES(3, '수박과도마토'); INSERT INTO fruit_price VALUES('사과', 8000); INSERT INTO fruit_price VALUES('딸기', 2000); INSERT INTO fruit_price VALUES('당근', 1500); INSERT INTO fruit_price VALUES('파인애플', 7000); -- 쿼리 SELECT f1.num, f1.fruit_list, f2.fruit_name, f2.price FROM fruits AS f1 INNER JOIN fruit_price AS f2 ON REGEXP_LIKE(f1.fruit_list, f2.fruit_name); /* '1', '사과와당근', '사과', '8000' '2', '배와딸기', '딸기', '2000' '1', '사과와당근', '당근', '1500' */ 질문해 주셔서 감사합니다~
- 0
- 2
- 86
질문&답변
2024.04.13
JOIN함수 질문입니다.
안녕하세요? 우선 두 쿼리문의 결과는 대부분 같습니다. 첫 번째 쿼리문, 즉 제가 강의에서 다룬 쿼리문은 ANSI SQL 표준을 따르는 명시적 조인 방식입니다. JOIN 구문을 사용함으로써 어떤 테이블이 어떻게 조인되는지 명확하게 표현됩니다. 조인의 조건이 ON 절에 명시적으로 표현되어 있어서, 나중에 쿼리를 수정하거나 디버깅할 때 좋습니다. 그리고 명시적 조인은 조인 조건을 빼먹는 실수를 방지해줍니다. 예를 들면 CROSS JOIN을 피할 수 있습니다. 두 번째 쿼리문은 비명시적 조인 방식을 사용합니다. 조인 조건이 WHERE 절에 명시되어 있습니다. 짧고 간결하게 작성될 수 있으며, 일부 오래된 데이터베이스 시스템 또는 간단한 쿼리에 적합할 수 있습니다. 하지만 대부분의 쿼리에서는 WHERE 절 내의 조인 조건과 필터 조건이 섞여 가독성이 저하될 수 있습니다. 또한 조인이 WHERE 절에 섞여 있어, 나중에 쿼리를 수정하거나 확장하는데 어려움을 겪을 수 있습니다. 그리고 조인 조건을 잘못 작성하거나 빼먹는 경우가 발생할 수 있으며, 이는 예기치 않은 CROSS JOIN으로 이어질 수 있습니다. 그래서 명시적 조인을 사용하는 첫 번째 쿼리 방식이 요즘의 SQL 작성법에 더 적합합니다. 이 방식은 쿼리의 의도를 분명히 하고, 가독성 및 유지보수성을 높여줍니다. 대부분의 데이터베이스 시스템과 SQL 표준에서는 명시적 조인을 권장하고 있습니다. 따라서, 저는 첫 번째 쿼리 사용을 강력히 추천합니다. 하지만, SQLD에서 다루는 쿼리문은 예전 방식의 쿼리문입니다. 그리고 ORACLE 데이터베이스를 기준으로 합니다. 저는 이게 마음에 들지 않습니다. 왜 특정 제품을 기준으로 시험을 보는지 모르겠어요. 아뭏든 SQLD 시험을 목표로 한다면, 적절하지 않더라도, SQLD 관련 책의 내용을 중심으로 공부하셔야 합니다. 하지만 실무에서는 첫 번째 방법을 사용하기를 다시 한번 권고합니다. 무슨 뜻인지 아시겠지요?^^ 질문해 주셔서 감사합니다~
- 1
- 1
- 66
질문&답변
2024.04.07
ELT 함수와 FIELD함수 질문입니다.
안녕하세요? 말씀하신 대로 ‘ELT() 함수는 지정한 위치의 값을 반환하는 함수’입니다. 그래서 ELT(1, ’상’, ‘중’, ‘하’)로 하면 ‘상’, ‘중’, ‘하’ 중 첫 번째 값인 ‘상’이 반환되고, ELT(2, ’상’, ‘중’, ‘하’)로 하면 ‘중’이 반환됩니다. NTILE(3) OVER(ORDER BY salary DESC)은 3등분한 결과를 반환하므로 1, 2, 3 중 하나를 반환하게 됩니다. 만일 NTILE(3) OVER(ORDER BY salary DESC) 구문이 1을 반환하면 ELT(NTILE(3) OVER(ORDER BY salary DESC), ’상’, ‘중’, ‘하’)은 ELT(1, ’상’, ‘중’, ‘하’)과 같이 되어 ‘상’이 반환됩니다. 질문에서 ‘지정 위치 숫자도 없고’ 라고 하셨는데, ELT()함수 맨 앞에 사용된 NTILE() 함수 부분이 위치 숫자를 반환해 줍니다. 또한 말씀하신 대로 ‘FIELD() 함수는 위치를 반환하는 함수’입니다. ORDER BY FIELD(dept_id, 'MKT', 'HRD', 'SYS') 구문에서 FIELD() 함수가 사용된 FIELD(dept_id, 'MKT', 'HRD', 'SYS') 부분은 dept_id 열의 값이 ‘MKT’ 이면 1, ‘HRD’이면 2, ‘SYS’이면 3을 반환합니다. 이렇게 반환된 1, 2, 3 숫자를 기준으로 정렬하라고 ORDER BY 문에 사용한 것입니다. 즉, dept_id 열의 값 'MKT', 'HRD', 'SYS' 를 각각 1, 2, 3이라고 간주하고 정렬하라는 의미로 해석할 수 있습니다. 혹시 이해가 안되는 부분이 있으면 다시 질문해 주시기 바랍니다. 질문해 주셔서 감사합니다~
- 0
- 1
- 72
질문&답변
2024.04.01
뷰 변경 질문입니다.
안녕하세요? 뷰를 처음에 만들 때는 CREATE VIEW 문으로 만듭니다. 이미 만들어진 뷰가 있다면 CREATE VIEW 문으로 같은 이름의 뷰를 만들 수 없습니다. 같은 이름의 뷰가 있을 때, 그 뷰의 쿼리문을 수정하고자 할 때는 ALTER VIEW 또는 CREATE OR REPLACE VIEW 문을 사용해야 합니다. DROP 하고 다시 CREATE 해도 되지만, 이렇게 되면 해당 뷰에 대해 설정되었던 권한도 제거되므로, 다시 권한 설정을 해야할 수도 있습니다. 그러므로 기존 뷰를 수정할 때는 ALTER VIEW 또는 CREATE OR REPLACE VIEW 문을 사용하기를 권고합니다. 혹시 다른 내용을 질문한 것이라면, 다시 한번 질문해 주세요. "VIEW를 선언할 때(CREATE VIEW) 당시의 코드로 돌아가서, 해당 코드에서 수정한 다음 실행을 해보니 덮어쓰기가 안 되더라구요." 이 부분이 명확히 이해갸 되지 않기 때문입니다. 질문 앞부분에 "ALTER VIEW 혹은 CREATE OR REPLACE VIEW를 쓴다고 하셨습니다." 이렇게 쓰신 것은 뷰를 변경하는 방법을 이미 알고 계신다 생각되기 때문입니다. 아뭏든 덮어쓰려면 ALTER VIEW 또는 CREATE OR REPLACE VIEW 문을 사용해야 합니다. 질문해 주셔서 감사합니다~
- 0
- 2
- 86
질문&답변
2024.03.24
[질문] 3. '다양한 데이터 집계 _ 심각할 수 있는 집계 함수와 NULL값의 관계' 수업 내용 질문
안녕하세요? '나중에 emp_id가 primary key가 아니고 emp_id에 null값이 들어갈 수 있는 가능성이 있다.' 이 말은 나중에 emp_id 대신 다른 열이 Primary Key가 될 수 있다는 의미입니다. 물론 employee 테이블에서 emp_id 열이 Primary Key 역할을 계속 하겠지만, 만에 하나라도 변경될 수 있는 가능성이 있기 때문입니다. Primary Key가 아니면 null 값이 저장될 가능성도 있고요. 실무에서 자주는 아니지만 Primary Key 를 변경하는 경우가 있습니다. 이러한 경우에 대비해서라도 데이터 건수 확인은 count(*)을 사용하자는 의미입니다. 질문 감사합니다~
- 0
- 1
- 72
질문&답변
2024.03.18
대문자 질문입니다!
안녕하세요? 키워드를 대문자로 작성하거나 소문자로 작성하는 것은 정해진 규칙이 없습니다. 작성된 구문이 가독성이 좋을 수 있는 방법으로 작성하면 됩니다. 그래서 제 나름으로 정한 규칙은 키워드는 대문자, 나머지는 소문자로 작성하는 방법입니다. 키워드라고 하는 것은 SELECT, FROM, WHERE등 이미 약속된 퀴리 구문입니다. 키워드를 대문자로 작성하고 들어쓰기와 내어쓰기를 잘하는 것이 가장 가독성이 좋다고 수 십년 경험에서 제가 얻은 결론이고, 대부분의 회사의 코딩 규칙입니다. 하지만 강력한 규제가 따르는 규칙은 아니니 질문자분은 이시점에서 자신 나름의 코딩 규칙을 정해보시면 좋을 것 같습니다. 어떤 방식을 정하든 일관되게 사용하면 좋을 것입니다. 질문해 주셔서 감사합니다!
- 0
- 1
- 75
질문&답변
2024.03.10
mysql 설치 오류로 학습 불가
안녕하세요? 자료를 다운로드 한 경우 환불이 안된다는 공지가 있습니다. 그래서 환불이 안되는 것인데, 제가 문의해서 해결이 될 수 있을 지 모르겠네요. 우선 운영자에게 문의를 하도록 하겠습니다. 감사합니다.
- 0
- 1
- 95
질문&답변
2023.11.23
데이터베이스 접속 관련
안녕하세요? SQL Server에 데이터베이스를 백업 파일에서 복원을 했다면 IP 주소와 같은 서버 연결 정보는 변함이 없습니다. 데이터베이스 복원은 기존 서버에 데이터베이스를 이전 상태로 복원할 뿐, 서버에 대한 정보를 건드리지 않습니다. 혹시 데이터베이스를 복원한 후 연결이 되지 않는다면, 다른 윈인(계정 상태, 권한 문제 등)에 의한 문제일 것입니다. 이런 상황이라면 어떤 오류가 발생했는 지 알려 주시면 같이 원인을 파악해 보도록 하겠습니다. 확인해 보시고, 다시 한번 질문해 주시면 감사하겠습니다.
- 1
- 2
- 363