Cohe
데이터베이스와 데이터베이스 시스템의 개념 본문
728x90
반응형
- 데이터베이스 개념
- 데이터베이스(DB)는 서로 관련있는 데이터들을 효율적으로 관리하기 위해 수집된 데이터들의 집합체를 말하며, 상호 유기적인 관계에 의해 구성된다.
- 이는 데이터베이스는 서로 관련있는 데이터를 최소한의 중복으로 정리한 것이다.
- 중첩 되게 만드는 것 : 반정규화
- 비정규화 : 갖다 다 집어넣음
- 최소한의 중복을 정리함 : 정규화 <<앵간해서는 정규화를 쓴다.
- 데이터 베이스 시스템 개념
- 데이터베이스 시스템은 위의 데이터베이스 개념을 구현하기 위해서 구성된 시스템으로 보다 효율적으로 데이터베이스를 유지 관리하고, 데이터간의 상호연관성을 이용한 관리를 효율적으로 이루기 위해서 만든 시스템이다.(DBMS)
- 데이터베이스 스키마
- 데이터베이스에서의 스키마는 데이터의 구조와 관계성을 설명하고자 만들어진 틀을 의미한다.
- 데이터베이스에서의 스키마는 기능에 따라서 3계층으로 나눠져 있고, 사용자의 입장, 조직 전체의 입장, 저장 장치의 입장에 따라서 구분되어 있다.
- 외부 스키마(사용자 입장의 스키마) : 개발자 입장의 스키마
- 외부 스키마는 서브 스키마, 사용자 뷰 라고도 불리며 각 사용자의 입장에서 본 데이터베이스 구성을 말한다.
- 사용자마다 서로 다른 데이터베이스 스키마를 가지고 같은 데이터베이스에 대해서도 서로 다른 관점을 정의할 수 있도록 허용하고 있다.
- 하나의 데이터베이스에는 여러 개의 외부 스키마가 존재할 수 있고, 하나의 외부 스키마를 여러 개의 응용프로그램이나 사용자가 공용으로 사용이 가능하도록 되어 있다.
- 테이블을 정의한 것이 외부 스키마이다.
- 개념 스키마(조직 전체 입장의 스키마)
- 개념 스키마는 전체적인 뷰 라고도 불리며 조직 전체의 입장에서 본 데이터베이스 구조를 말한다. 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스이기 때문에 데이터베이스 단 하나만 존재한다.
- 데이터 객체, 제약조절에 대한 명세 유지, 기관이나 조직체의 관점에서 데이터베이스를 정의하는 역할을 한다.
- 내부 스키마(저장 장치 입장의 스키마) 내부 스키마는 저장장치 입장에서 본 데이터베이스 구조로 데이터의 실제 저장 방법에 대해서 기술하는 물리적인 저장장치와 밀접한 계층이다.
- 데이터베이스(DB) 시스템의 구성요소
- 데이터베이스 시스템은 데이터를 데이터베이스로 저장하고 관리해서 필요한 정보를 생성하는 컴퓨터 중심의 시스템이며 구성요소로 데이터베이스, DBMS, 데이터언어, 사용자, 컴퓨터 등이 있다.
- 데이터베이스 : 상호 유기적인 관계를 가진 데이터들의 집합
- DBMS : 데이터베이스를 관리, 유지, 처리하는 관리 시스템 ex) MSSQL, MySQL(MariaDB), Oracle, Postsql ...
- 데이터언어 : 데이터를 처리하기 위해서 사용되는 언어 ex) sql
- 사용자 : DB를 통해서 데이터를 사용하는 이용자
- 컴퓨터 : 데이터베이스를 이용하거나 처리하기 위해 사용되는 도구
- 데이터베이스(DB) 관리시스템의 장단점 => DBMS의 장단점
- DBMS는 데이터베이스를 보다 편리하게 정의하고, 생성하고, 조작할 수 있도록 해주는 범용 소프트웨어를 의미한다.
- 장점
- 데이터의 중복을 최소화할 수 있다.
- 데이터를 공유할 수 있다.
- 데이터의 일관성을 유지할 수 있다.
- 데이터의 무결성을 유지할 수 있다.
- 데이터의 보안을 보장할 수 있다.
- 단점
- 파일 시스템보다 고가의 제품, 운영에 필요한 컴퓨터 자원이 많다.
- DBMS는 다수 사용자가 접근하기 때문에 보안에 문제가 발생한다.
- DBMS의 종류
- 네트워크 DBMS(NDBMS)
- 데이터 구조를 네트워크상의 노드(장비) 형태로 논리적이게 표현한 데이터 모델로서 각각의 노드(자료)를 서로 대등한 관계로 구성한 시스템.
- 장점 : 계층형 데이터베이스 관리 시스템의 문제점인 상하 종속적인 관계 해결
- 단점 : 구성과 설계가 복잡하고 궁극적으로 데이터의 종속성을 해결 못함.
- 다 같이 평등하여 서로 연관성에 따른 상하관계를 표현할 수 없음
- 계층형 DBMS(HDBMS)
- 데이터가 계층적이며 상하 종속적인 관계로 구성되어 있다.
- 장점 : 어떤 유형의 응용에 대해서 빠른 속도 및 높은 효율을 제공
- 단점 : 데이터 접근 방식을 응용 프로그램에서 미리 정의해야 하고, 데이터 베이스가 생성된 때 각각의 관계가 명시적으로 정의되어야 한다.
- 관계형 DBMS(RDBMS)
- 현재 가장 많이 사용되는 DBMS로 응용프로그램 개발에 획기적인 개선을 유도함. 수학적 논리 관계를 테이블의 형태로 구성한 구조이다. 테이블이라는 2차원 형식의 단순 직관적인 표를 사용하고, 내부에 컬럼 중 일부를 다른 테이블과 중복해 각 테이블간의 상관관계를 정의한다.
- 장점 : 업무 변화에 대한 적응력이 높아 변화하는 업무에 쉽게 활용 가능하며, 유지보수가 편리한 점이 있다.
- 단점 : 다른 DBMS에 비해 더 많은 지원을 필요로 하기에 시스템 부하가 높다
- 빅데이터 처리 시 많은 문제가 있다.
- 하둡 : 데이터를 분산저장 된다.
- NOSQL : map으로 저장 → 몽고 DB, key-value로 저장, 영상 음성도 저장할 수 있다. 빅데이터라고 하면 텍스트로 쓸 수 없는 자료들이 있는데 특정 키워드 값으로 저장하면 키워드로 저장할 수 있다.
- 빅데이터 처리 시 많은 문제가 있다.
- 대표적인 DBMS로 Oracle, MS SQL Server, MySQL 등이 있다.
- 네트워크 DBMS(NDBMS)
- 데이터 언어
- 데이터베이스의 정의, 조작, 제어를 위한 통신 수단(예)SQL)
- 데이터 정의어(DDL, Data Definition Language) : 데이터베이스의 정의 및 수정
- 논리적 데이터 구조의 정의(개념 및 외부 스키마 기술)
- 물리적 데이터 구조의 정의(내부 스키마 기술)
- 데이터 저장 정의어로 데이터 구조와 저장형식을 정의함.
- 데이터 조작어(DML, Data Manipulation Language)
- 사용자와 DBMS사이의 통신 수단이며, 데이터 처리 연산의 집합(데이터 검색, 삽입(추가), 삭제, 변경)
- CRUD
- 데이터 제어어(DCL, Data Control Language) :
- 공용 데이터베이스 관리를 위한 데이터 제어를 위한 기술
- 데이터 보안, 무결성, 회복, 병행 수행 등등을 수행하는 언어들.
- 사용자
- 일반 사용자 : 비절차적 DML을 통해서 데이터베이스를 사용.
- 응용 프로그래머 : 호스트 언어 + DML을 통해서 데이터베이스를 사용.
- 데이터베이스 관리자 : DDL + DCL을 통해서 DB를 정의하고 제어하는 사람.
MySQL
- 주석 : #으로 시작, 여러줄 주석처리 : /**/
SQL 명령어
- 데이터베이스 정의어(CREATE, ALTER, DROP)
- CREATE : 객체 생성
- -DB생성- CREATE DATABASE databasename; => 데이터베이스 생성 -DB내에 Table생성- CREATE TABLE table_name ( => 테이블 생성 column1 datatype, => 테이블 내에 column의 저장 형식 지정 column2 datatype, column3 datatype, column4 datatype, .... );
- 추가-DB에서 사용되는 용어
- table/relation : 표, 데이터의 집합
- row/record/tuple : 테이블의 행에 해당
- column/field/attribute : 테이블의 열에 해당
- cell : 테이블에서 행과 열의 교차점에 있는 특정 값이 저장된 위치
- Primary key(기본키) : 레코드를 고유하게 구별할 수 있는 값
- Candidate key(후보키) : 레코드를 고유하게 구별할 수 있는 키들 모두
- Foreign key(외래키) : 테이블들 간에 참조 무결성을 위해서 사용 값
- 데이터를 집어 넣을 때 무결성을 생각해야 하기 때문에 없는 값을 가지고 집어넣을 수 없다.
- ALTER : 객체 수정 - 구조를 변경하고자 할 때
- 지정한 테이블에 컬럼을 추가하려고 할 때,
- ALTER TABLE table_name ADD column_name datatype;
- 예제) t_table에 phone(varchar(20))를 추가하기
- ⇒ MariaDB [testdb]> alter table t_table add phone varchar(20);
- 실습) t_table에 korean(int), english(int), math(int) 컬럼을 추가하세요
- alter table t_table add korean int, add english int , add math int ;
- 데이터 타입 수정
- SQL Server/MS Access ALTER TABLE table_name ALTER COLUMN column_name datatype;
- MySQL / Oracle(10G 이전) ALTER TABLE table_name MODIFY COLUMN column_name datatype;
- Oracle 10G 이후 버전 ALGER TABLE table_name MODIFY column_name datatype;
- 실습) Korean(varchar(5)), Math(varchar(10)) 수정하고, varchar -> int로 변경하세요.
- alter table t_table modify column korean varchar(5), modify column math varchar(10); alter table t_table modify column korean int, modify column math int;
- 지정된 테이블에 컬럼을 삭제할 때, (일부 시스템에서는 지원하지 않을 수 있음)
- 예) t_table에 있는 English를 삭제 MariaDB [testDB]> alter table t_table drop column English; -DROP : 객체 삭제
- 지정한 테이블에 컬럼을 추가하려고 할 때,
- 객체 삭제
- database 삭제 DROP DATABASE database_name; => 데이터베이스 삭제
- table 삭제
- DROP TABLE table_name; => 테이블 삭제
- TRUNCATE TABLE => 테이블 내에 있는 데이터를(레코드) 삭제. (트런케이트)
- 테이블에 형태는 삭제하지 않음.
- TRUNCATE TABLE table_name;
연습문제
- 데이터 베이스 testDB를 생성하라.
- 데이터 베이스 testDB에 testTable을 생성하라 생성할 테이블의 형태는 num(int), name(varchar), phone(varchar), address(varchar), email(varchar)
- 생성한 테이블에 student_num(int),korean(int),math(int),english(int)를 추가
- 추가한 student_num의 테이터 타입을 varchar형태로 변경해라.
- address 컬럼을 삭제해라.
- testTable 테이블을 삭제해라.
- testDB 데이터베이스를 삭제해라
- 접속한 DATABASE확인. DATABASE()를 활용. (mysql/mariadb) ⇒ select database();
MySQL Data Types
- 문자 데이터 타입들:
- CHAR(size) : 고정 길이 데이터 타입(최대 255byte)-지정된 길이보다 짧은 데이터 입력될 시 나머지 공간은 공백으로 채워진다.
- VARCHAR(size) : 가변 길이 데이터 타입(최대 255byte)-지정된 길이보다 짧은 데이터 입력될 시 너머지 공간은 채우지 않는다.
- TINYTEXT : 문자열 데이터 타입(최대 255byte)
- TEXT : 문자열 데이터 타입(최대 65535byte)
- MEDIUMTEXT : 문자열 데이터 타입(최대 16777215byte):
- LONGTEXT : 문자열 데이터 타입(최대 4294967295byte)
- ENUM(x,y,z,etc) : 입력가능한 데이터 리스트를 정하고 입력받음.
- 숫자형 데이터 타입들:
- TINYINT : 정수형 데이터타입(1byte) -128 ~ +127 또는 0 ~ 255
- SMALLINT : 정수형 데이터타입(2byte) -32768 ~ +32767 또는 0~65536
- MEDIUMINT : 정수형 데이터타입(3byte) -8388608 ~ +8388607 또는 0 ~ 16777215
- INT : 정수형 데이터타입(4byte) -2147483648 ~ +21417483647 또는 0 ~ 4294967295
- BIGINT : 정수형 데이터타입(8byte) -무제한 수 표현 가능
- FLOAT(길이,소수) : 부동 소수형 데이터타입(4byte) -고정 소수점을 사용
- DECIMAL(길이,소수): 고정 소수형 데이터타입(길이+1byte) -소수점을 사용
- DOUBLE(길이,소수): 부동 소수형 데이터타입(8byte) -DOUBLE을 문자열로 저장
- 날짜형 데이터 타입들:
- DATE : 날짜(년도,월,일)형태의 기간 표현 데이터타입(3byte)
- TIME : 시간(시,분,초) 형태의 기간 표현 데이터타입(3byte)
- DATETIME : 날짜와 시간 형태의 기간 표현 데이터타입(8byte)
- TIMESTAMP : 날짜와 시간 형태의 기간 표현 데이터타입(4byte) -시스템 변경시 자동으로 그 날짜와 시간이 저장
- YEAR : 년도 표현 데이터 타입(1byte)
- 이진 데이터 타입들 :
- BINARY(size) & BYTE(size) : CHAR의 형태의 이진데이터 타입(최대 255byte)
- VARBINARY(size) : VARCHAR의 형태의 이진 데이터 타입(최대 65535byte)
- TINYBLOB(size) : 이진 데이터 타입(최대 255byte)
- BLOB(size) : 이진 데이터 타입(최대 65535byte)
- MEDIUMBLOB(size): 이진 데이터 타입(최대 16777215byte)
- LONGBLOB(size) : 이진 데이터 타입(최대 4294967295byte)
- Constraints(제약조건) : 테이블을 생성할 때에 테이블의 컬럼에 제약 조건을 설정할 수 있음.
- 제약조건은 테이블 내에 데이터(레코드)를 위한 특별한 규칙을 정하는 것을 의미함.
- 즉, 테이블 안에 데이터를 저장할 때에 제한을 걸어 규정된 내용 이외의 값이나 동작을 막는 역할을 함.
- 제약조건은 테이블에 있는 Column들 혹은 Table에 지정할 수 있고, Table에 지정한 경우에는 Table전체에 영향을 주게 된다.
- 일반적으로 사용하는 제약 조건들...
- NOT NULL : column 값에 NULL을 가질 수 없다.
- UNIQUE : column내에 모든 값들 중에 유일해야 한다.(전체가 달라야 함... 중복X)
- PRIMARY KEY : NOT NULL과 UNIQUE을 합한 형태로 테이블 내에 각 레코들 구분하는 값.
- FOREIGN KEY : 다른 테이블에서 레코드를 구분할 수 있는 값
- 참조와 무결성과 관련
- CHECK : 컬럼의 모든 값이 특정 조건을 충촉하는지 확인
- DEFAULT : 값이 지정되지 않은 경우 column의 기본값을 설정
- INDEX : DBMS에서 데이터를 매우 신속하게 생성 및 검색하는 데 사용
데이터베이스 조작어 (SELECT, INSERT, UPDATE, DELETE)
- INSERT : 테이블 내에 데이트를 삽입
- 문법 INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
- 예) insert into Persons values(110,'testuser','testname',30);
- SELECT : 테이블 내에 데이터를 검색(*****)
- Syntex(문법) SELECT column1, column2, ... FROM table_name WHERE condition; => where이후에 있는 조건에 따라서 컬럼의 값을 출력함.
- WHERE 조건문 동작
- Operator(동작) Description(설명)
- = Equal(같은 경우) <> Not equal(같지 않은 경우). 다른 표현방법 '!='< Less than(미만인 경우)
- 예제) Persons테이블에 있는 사람들 중에 나이가 30살 이상인 사람만 출력.
- select * from persons where age>=30;
- 실습) Persons 테이블에 있는 자료를 보고 다음의 쿼리를 확인
- 나이가 27인 사람이 사는 도시는?
- select city from persons where age = 27;
- id가 5 미만인 사람들을 출력하세요.
- select * from persons where id<5;
- 나이가 30대인 사람들의 이름(firstname)을 출력하세요.
- select id, firstname from persons where age >=30 and age <=39;
- 나이가 27인 사람이 사는 도시는?
- Distinct 중복된 내용을 제외
- select distinct age form persons where id=5 or id =8;
- WHERE 조건문에 비교 연산자 사용(and(논리곱), or(논리합), not(부정))
- AND연산자 사용 ( A and B 인경우로 A도 참이고, B도 참이면 참... 이외는 거짓) 예제1) select * from Persons where Age>20 and age<40;
- OR연산자 사용 ( A or B 인 경우, A또는 B가 참이면 참, 둘다 거짓인 경우에 거짓) 예제2) select * from Persons where Age<21 or age>40;
- NOT 연산자 ( 조건에 대한 부정을 의미함. NOT A의 의미는 A가 아닌 ) 예제3) select * from Persons where not City='Daegu';
- (실습) Persons 테이블에 id가 5, 7인 사람은 City를 Suwon으로 id가 8, 1인 사람은 Busan으로 id가 10인사람은 Gwangju로 변경한 후에 다음 조건을 검색해 보세요.(update사용해서 수정)
- 부산과 수원에 사는 사람들 중에 나이가 30이상인 사람의 이름
- select id, firstname, lastname from persons where (city = 'Busan' or city = 'suwon')and (age>=30);
- 나이가 20이상인 사람들 중에 도시가 광주인 사람과 대구인 사람의 나이는?
- select age from persons where (city = 'Gwangju' or city = 'Daegu')and (age>=20);
- 도시가 서울이 아닌 사람들 중에 부산사람들을 뺀 나머지는?
- select * from persons where not(city = 'Seoul' or city = 'Busan') ;
- 부산과 수원에 사는 사람들 중에 나이가 30이상인 사람의 이름
- 예제) Persons테이블에 있는 사람들 중에 나이가 30살 이상인 사람만 출력.
- Greater than or equal (이상인 경우) <= Less than or equal(이하인 경우) BETWEEN Between an inclusive range(제시하는 값 사이) LIKE Search for a pattern(특정 패턴값을 찾을 때에)
-
Greater than(초과인 경우)
-
- Order by(결과에 대한 정렬)
- 사용예 SELECT column1, column2, column3,.... FROM table_name ORDER BY column1,column2,.... ASC(오름차순 정렬) | DESC(내림차순 정렬)
- 예제) select ID, City from Persons의 결과를 오름차순 정렬과 내림차순 정렬로 출력해보자!!!
- 오름차순
- 내림차순
- (연습) Orders 테이블을 PersonID를 사용하여 오름차순, 내림차순 정렬해서 결과를 확인하세요!!!
- select * from Orders order by PersonID asc; select * from Orders order by PersonID desc;
- null값의 사용 : null값이 존재하는 경우 해당 값을 가지고 있는 레코드를 출력하고 싶은 경우...
- null 값을 생성... insert into Persons (LastName, Age, City) values ('test_null', 35, 'Seoul');
- null값을 가지고 있는 레코드를 출력하고자 할 경우, null을 지정할 방법이 기존방법으로 안됨.이때에 is null을 사용하면 원하는 값을 출력할 수 있다.
- null포함하는 레코드 출력 예제) select * from Persons where FirstName is null;
- null값을 포함하지 않는 레코드 출력 예제) select * from Persons where FirstName is not null;
- 집단 함수
- MAX() : 최대값 구하는 함수 : SELECT MAX(column_name) FROM table_name WHERE condition;
- MAX() 예제 : Persons테이블에 있는 사람들 중에 가장 나이가 많은 사람의 이름
- select LastName, FirstName from Persons where Age=(select max(age) from Persons);
- MAX() 예제 : Persons테이블에 있는 사람들 중에 가장 나이가 많은 사람의 이름
- MIN() : 최소값 구하는 함수
- -MIN() 예제 : Persons테이블에 있는 사람들 중에 나이가 가장 적은 사람이 사는 도시 => select Ctiy from Persons where Age=(select min(age) from Persons);
- COUNT() : 매칭조건의 갯수를 구하는 함수
- COUNT() 예제 : 나이를 기준으로 카운트하세요... select count(Age) from Person
- **참고, count()는 NULL값을 카운트하지 않아요!!!!**
- 테이블 내에 전체 레코드의 갯수 : select count(*) from Persons;
- AVG() : 평균을 구하는 함수
- AVG() 예제 : Persons테이블 안에 있는 사람들의 나이의 평균 => select avg(Age) from Persons;
- SUM() : 합을 구하는 함수
- SUM() 예제 : Persons테이블에서 Seoul에 사는 사람들의 나이의 합 => select sum(Age) from Persons where City='Seoul';
- MAX() : 최대값 구하는 함수 : SELECT MAX(column_name) FROM table_name WHERE condition;
- Transaction
- 데이터를 처리하는 SQL쿼리들을 즉각적으로 반영하지 않고, 내용을 저장하다가 일괄적으로 적용하는 영역 동작을 의미함.
- Transaction 시작은 "start transaction" 또는 "begin","begin work"로 시작함. 동작 내용을 적용할 경우는 "commit"를 실행. 작업한 내용을 최초의 transaction으로 이동할 경우에는 "rollback"을 실행.
- 주의) 한번 사용된 transaction은 다시 시작해야함
- 즉, commit 이나 rollback이 사용된 경우에는 다시 transaction을 시작해야함.
- mysql에서 transaction이 적용되는 경우의 엔진을 사용해야 됨. 해당 엔진은 InnoDB임. table을 해당 엔진으로 설정하는 방법
- 설정 : ALTER table table_name engine=InnoDB;
- Transaction 실습
- Transaction시작 후에 사용자 추가 설정(Persons테이블) testuser1 ~ 5까지 추가 후.... (나이와 도시 설정) (적용설정하세요...)
- 2) Transaction시작 후 다음 내용을 수정 testuser1, testuser3의 나이을 28살로 변경 testuser4 사는 곳을 JEJU 로 변경 (Rollback으로 되돌리기)
- DELETE : 테이블 내에 데이터를 삭제
- 문법 : DELETE FROM table_name WHERE condition;
- Transaction실행(start transaction)- 후에 삭제
- start transaction
- delete from Persons where id=11;
- IN 다수의 값을 조건으로 사용할 수 있게하는 명령어
- (문법) SELECT column_name(s).. FROM table_name WHERE column_name IN (value1,value2,....);
- 예제1) Persons테이블에 서울, 부산, 광주 인 사용자를 출력하세요. select * from Persons where City IN ('Seoul','Busan','Gwangju');
- 예제2) Persons테이블에서 서울, 부산, 광주 가 아닌 사용자를 출력하세요. select * from Persons where City NOT IN ('Seoul','Busan','Gwangju')
**BETWEEN 동작은 범위내의 값를 제공함
Syntax(문법)
SELECT column_name(s) FROM table_name
WHERE column_name BETWEEN value1 AND value2;
의미... value1에서부터 value2까지(두 값 사이)
예제) 나이가 20에서 40사이에 있는 사람의 FirstName을 알아오자!!
select FirstName from Persons where Age BETWEEN 20 AND 40;
- 그 값을 포함하여 연산한다.
실습) 나이가 50이상 100이하인 사람들이 사는 곳은?
AS(ALIAS:별칭) 특정 컬럼을 지정하거나 결과값들 혹은 테이블을 다른 이름으로 지정하기 위해서 사용함.
컬럼을 별칭으로 사용하는 경우,
SELECT column_name AS alias_name FROM table_name;
예제1) select PersonID as ID, OrderDate as Date from Orders;
테이블인 경우,
SELECT column_name(s) FROM table_name AS alias_name;
예제2) select max(Age) from (select Age from Persons where City='Seoul') as AgeTable;
실습1) Persons 테이블에 있는 user7이 주문한 주문번호와 주문날짜,주문고객이름(FirstName)이
출력되게 하세요.
(출력결과)
+---------+---------------------+-----------+
| OrderID | OrderDate | firstname |
+---------+---------------------+-----------+
| 8 | 2022-01-26 12:22:08 | user7 |
| 9 | 2022-01-26 12:22:18 | user7 |
+---------+---------------------+-----------+
2 rows in set (0.001 sec)
(결과)
SELECT o.ID as OrderID, o.OrderDate, c.FirstName as firstname
FROM Persons AS c, Orders AS o
WHERE c.FirstName='user7' AND c.ID=o.PersonID;
728x90
반응형
'데이터 베이스 기초' 카테고리의 다른 글
oracle 기본 데이터 형 및 기타 내용 (2) | 2024.04.03 |
---|---|
데이터 베이스 설치들 (0) | 2024.04.02 |
Union, GROUP BY / HAVING, Join, GRANT (0) | 2024.04.01 |
1 데이터 베이스 기초 (0) | 2024.01.26 |