Cohe

데이터베이스와 데이터베이스 시스템의 개념 본문

데이터 베이스 기초

데이터베이스와 데이터베이스 시스템의 개념

코헤0121 2024. 3. 29. 17:21
728x90
  1. 데이터베이스 개념
    • 데이터베이스(DB)는 서로 관련있는 데이터들을 효율적으로 관리하기 위해 수집된 데이터들의 집합체를 말하며, 상호 유기적인 관계에 의해 구성된다.
    • 이는 데이터베이스는 서로 관련있는 데이터를 최소한의 중복으로 정리한 것이다.
      • 중첩 되게 만드는 것 : 반정규화
      • 비정규화 : 갖다 다 집어넣음
      • 최소한의 중복을 정리함 : 정규화 <<앵간해서는 정규화를 쓴다.
  2. 데이터 베이스 시스템 개념
    • 데이터베이스 시스템은 위의 데이터베이스 개념을 구현하기 위해서 구성된 시스템으로 보다 효율적으로 데이터베이스를 유지 관리하고, 데이터간의 상호연관성을 이용한 관리를 효율적으로 이루기 위해서 만든 시스템이다.(DBMS)
    • 데이터베이스 스키마
      • 데이터베이스에서의 스키마는 데이터의 구조와 관계성을 설명하고자 만들어진 틀을 의미한다.
      • 데이터베이스에서의 스키마는 기능에 따라서 3계층으로 나눠져 있고, 사용자의 입장, 조직 전체의 입장, 저장 장치의 입장에 따라서 구분되어 있다.
      1. 외부 스키마(사용자 입장의 스키마) : 개발자 입장의 스키마
        • 외부 스키마는 서브 스키마, 사용자 뷰 라고도 불리며 각 사용자의 입장에서 본 데이터베이스 구성을 말한다.
        • 사용자마다 서로 다른 데이터베이스 스키마를 가지고 같은 데이터베이스에 대해서도 서로 다른 관점을 정의할 수 있도록 허용하고 있다.
        • 하나의 데이터베이스에는 여러 개의 외부 스키마가 존재할 수 있고, 하나의 외부 스키마를 여러 개의 응용프로그램이나 사용자가 공용으로 사용이 가능하도록 되어 있다.
          • 테이블을 정의한 것이 외부 스키마이다.
      2. 개념 스키마(조직 전체 입장의 스키마)
        • 개념 스키마는 전체적인 뷰 라고도 불리며 조직 전체의 입장에서 본 데이터베이스 구조를 말한다. 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스이기 때문에 데이터베이스 단 하나만 존재한다.
        • 데이터 객체, 제약조절에 대한 명세 유지, 기관이나 조직체의 관점에서 데이터베이스를 정의하는 역할을 한다.
      3. 내부 스키마(저장 장치 입장의 스키마) 내부 스키마는 저장장치 입장에서 본 데이터베이스 구조로 데이터의 실제 저장 방법에 대해서 기술하는 물리적인 저장장치와 밀접한 계층이다.
  3. 데이터베이스(DB) 시스템의 구성요소
    • 데이터베이스 시스템은 데이터를 데이터베이스로 저장하고 관리해서 필요한 정보를 생성하는 컴퓨터 중심의 시스템이며 구성요소로 데이터베이스, DBMS, 데이터언어, 사용자, 컴퓨터 등이 있다.
    • 데이터베이스 : 상호 유기적인 관계를 가진 데이터들의 집합
    • DBMS : 데이터베이스를 관리, 유지, 처리하는 관리 시스템 ex) MSSQL, MySQL(MariaDB), Oracle, Postsql ...
    • 데이터언어 : 데이터를 처리하기 위해서 사용되는 언어 ex) sql
    • 사용자 : DB를 통해서 데이터를 사용하는 이용자
    • 컴퓨터 : 데이터베이스를 이용하거나 처리하기 위해 사용되는 도구
  4. 데이터베이스(DB) 관리시스템의 장단점 => DBMS의 장단점
    • DBMS는 데이터베이스를 보다 편리하게 정의하고, 생성하고, 조작할 수 있도록 해주는 범용 소프트웨어를 의미한다.
    1. 장점
      • 데이터의 중복을 최소화할 수 있다.
      • 데이터를 공유할 수 있다.
      • 데이터의 일관성을 유지할 수 있다.
      • 데이터의 무결성을 유지할 수 있다.
      • 데이터의 보안을 보장할 수 있다.
    2. 단점
      • 파일 시스템보다 고가의 제품, 운영에 필요한 컴퓨터 자원이 많다.
      • DBMS는 다수 사용자가 접근하기 때문에 보안에 문제가 발생한다.
  5. DBMS의 종류
    1. 네트워크 DBMS(NDBMS)
      • 데이터 구조를 네트워크상의 노드(장비) 형태로 논리적이게 표현한 데이터 모델로서 각각의 노드(자료)를 서로 대등한 관계로 구성한 시스템.
      • 장점 : 계층형 데이터베이스 관리 시스템의 문제점인 상하 종속적인 관계 해결
      • 단점 : 구성과 설계가 복잡하고 궁극적으로 데이터의 종속성을 해결 못함.
        • 다 같이 평등하여 서로 연관성에 따른 상하관계를 표현할 수 없음
    2. 계층형 DBMS(HDBMS)
      • 데이터가 계층적이며 상하 종속적인 관계로 구성되어 있다.
      • 장점 : 어떤 유형의 응용에 대해서 빠른 속도 및 높은 효율을 제공
      • 단점 : 데이터 접근 방식을 응용 프로그램에서 미리 정의해야 하고, 데이터 베이스가 생성된 때 각각의 관계가 명시적으로 정의되어야 한다.
    3. 관계형 DBMS(RDBMS)
      • 현재 가장 많이 사용되는 DBMS로 응용프로그램 개발에 획기적인 개선을 유도함. 수학적 논리 관계를 테이블의 형태로 구성한 구조이다. 테이블이라는 2차원 형식의 단순 직관적인 표를 사용하고, 내부에 컬럼 중 일부를 다른 테이블과 중복해 각 테이블간의 상관관계를 정의한다.
      • 장점 : 업무 변화에 대한 적응력이 높아 변화하는 업무에 쉽게 활용 가능하며, 유지보수가 편리한 점이 있다.
      • 단점 : 다른 DBMS에 비해 더 많은 지원을 필요로 하기에 시스템 부하가 높다
        • 빅데이터 처리 시 많은 문제가 있다.
          • 하둡 : 데이터를 분산저장 된다.
          • NOSQL : map으로 저장 → 몽고 DB, key-value로 저장, 영상 음성도 저장할 수 있다. 빅데이터라고 하면 텍스트로 쓸 수 없는 자료들이 있는데 특정 키워드 값으로 저장하면 키워드로 저장할 수 있다.
    • 대표적인 DBMS로 Oracle, MS SQL Server, MySQL 등이 있다.
  6. 데이터 언어
    • 데이터베이스의 정의, 조작, 제어를 위한 통신 수단(예)SQL)
    1. 데이터 정의어(DDL, Data Definition Language) : 데이터베이스의 정의 및 수정
      • 논리적 데이터 구조의 정의(개념 및 외부 스키마 기술)
      • 물리적 데이터 구조의 정의(내부 스키마 기술)
      • 데이터 저장 정의어로 데이터 구조와 저장형식을 정의함.
    2. 데이터 조작어(DML, Data Manipulation Language)
      • 사용자와 DBMS사이의 통신 수단이며, 데이터 처리 연산의 집합(데이터 검색, 삽입(추가), 삭제, 변경)
      • CRUD
    3. 데이터 제어어(DCL, Data Control Language) :
      • 공용 데이터베이스 관리를 위한 데이터 제어를 위한 기술
      • 데이터 보안, 무결성, 회복, 병행 수행 등등을 수행하는 언어들.
  7. 사용자
    • 일반 사용자 : 비절차적 DML을 통해서 데이터베이스를 사용.
    • 응용 프로그래머 : 호스트 언어 + DML을 통해서 데이터베이스를 사용.
    • 데이터베이스 관리자 : DDL + DCL을 통해서 DB를 정의하고 제어하는 사람.

MySQL

  • 주석 : #으로 시작, 여러줄 주석처리 : /**/

SQL 명령어

  1. 데이터베이스 정의어(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;

연습문제

  1. 데이터 베이스 testDB를 생성하라.
  2. 데이터 베이스 testDB에 testTable을 생성하라 생성할 테이블의 형태는 num(int), name(varchar), phone(varchar), address(varchar), email(varchar)
  3. 생성한 테이블에 student_num(int),korean(int),math(int),english(int)를 추가
  4. 추가한 student_num의 테이터 타입을 varchar형태로 변경해라.
  5. address 컬럼을 삭제해라.
  6. testTable 테이블을 삭제해라.
  7. 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 테이블에 있는 자료를 보고 다음의 쿼리를 확인
        1. 나이가 27인 사람이 사는 도시는?
          • select city from persons where age = 27;
        2. id가 5 미만인 사람들을 출력하세요.
          • select * from persons where id<5;
        3. 나이가 30대인 사람들의 이름(firstname)을 출력하세요.
          • select id, firstname from persons where age >=30 and age <=39;
      • 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사용해서 수정)
        1. 부산과 수원에 사는 사람들 중에 나이가 30이상인 사람의 이름
          1. select id, firstname, lastname from persons where (city = 'Busan' or city = 'suwon')and (age>=30);
        2. 나이가 20이상인 사람들 중에 도시가 광주인 사람과 대구인 사람의 나이는?
          1. select age from persons where (city = 'Gwangju' or city = 'Daegu')and (age>=20);
        3. 도시가 서울이 아닌 사람들 중에 부산사람들을 뺀 나머지는?
          1. select * from persons where not(city = 'Seoul' or city = 'Busan') ;
    •  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);
      • 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';
  • 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 실습
      1. Transaction시작 후에 사용자 추가 설정(Persons테이블) testuser1 ~ 5까지 추가 후.... (나이와 도시 설정) (적용설정하세요...)
      2. 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;