안녕하세요. SQL에 대한 강의에 오신 것을 환영합니다.
그래서 이것은
SQL에 대한 매우 짧은 소개입니다.
저는 SQL을 좋아합니다.
요전에 한 학생과 이야기하고 있었는데
“SQL은 제가 가장 좋아하는 언어입니다.”
그리고 저는 “
SQL이 제가 가장 좋아하는 언어라는 것에 동의해야 합니다.”
SQL은 너무 아름답기 때문에
SQL에서 루프를 작성할 필요조차 없습니다.
파이썬과 같은 언어로 루프를 작성합니다.
문제는 SQL이 완벽하다는
것입니다. 그러나
Linux 나 Python처럼 복잡한 것을 작성할 수있는 방법은 아닙니다.
그래서 SQL은 컴퓨터가 생각하는 방식이 아닙니다.
우리는 데이터베이스 엔진이라고 불리는
것들을 가지고 있습니다.
따라서 SQL은 데이터를 구성하는 좋은
방법이지만
데이터를 체계적으로 유지하고 단순하게 만드는 데 많은 작업이 필요했습니다.
그래서이 추상화가
있는 것과 같습니다. 추상화를 작동시키는 것은 많은 작업입니다.
그래서 저는
데이터베이스 앞에 약간의 역사를 가지고 시작하려고 합니다.
“음
, 데이터베이스 전에는 어떻게 그럴 수 있을까요?”
옛날,
그리고 컴퓨터를 갖춘 오래된 영화를
보시면,
이 테이프 기계가
배경에 있고 회전하는 사진들을 볼 수 있습니다.
그리고 테이프 머신의 회전은
계산의 물리적 표현의 일종입니다.
그리고 예전에는
컴퓨터가
모든 데이터를 메모리나 디스크에 저장하기에 충분한 데이터를 가지고 있지
않았다는 사실과 관련이 있었습니다. 초기에는 디스크가 없었죠.
초기에는 테이프가 우리가 가지고 있던 것이었고,
우리는 일종의 오디오 테이프를 사용했습니다.
그리고 오디오 대신에
데이터, 0과 1이 포함되어 있습니다.
그리고 예전에 일들이
작동하여 데이터베이스를 가질 수 있는 방식은 데이터베이스가
테이프에 기록된 모든 데이터였다는 것이었습니다.
그리고 테이프의 핵심은
그것이 물리적인
것이었다는 것입니다. 그래서 당신은 그것을
되감고 앞뒤로 가야합니다.
그리고 대부분의
사람들은 아마도 카세트 테이프나 8 트랙 테이프
또는 릴 투 릴 테이프를 본 적이 없었을 것입니다.
그러나 물리적으로 긴 천 피트의 플라스틱
조각이며 마지막에 데이터를 얻으려면
거기에 도착할 때까지 회전해야했습니다.
그래서 우리가 랜덤 액세스라고 부르는 것이 아니었습니다.
즉, 무작위 액세스에서
메모리 또는 디스크 드라이브이든,
랜덤 액세스를 통해
정해진 시간 내에 어느 곳에나 갈 수 있습니다.
반면, 테이프에 있는 무언가에
가까우면 매우 빠르게 액세스할 수 있습니다.
멀리 떨어져 있다면, 가서
기다렸다가 다시 돌아와야 해
그래서 이것은
매일 밤
어제의 계정 잔액에서 테이프를 가져가는 패턴을 만들었습니다.
우리가 은행이라고 합시다.
그리고 우리는 사람들이 창문으로 올라와 돈을
넣고 돈을 꺼내고 있습니다.
그리고 우리가 할 일은 모든
거래들을, 때로는 물리적으로 구멍을 뚫은 카드에
붙이고, 그리고 그것들을 분류하는 것입니다. 그렇죠?
그리고 우리가 26 개의 계정을 가지고 있고
, 사람 C는 $10를 더하고 사람 F가 나타나 $10를 빼고, 등등
그리고 우리가 밤에 가질
것, 우리는이 모든 정렬 얻을
것이다, 그리고 실제로 이들을 정렬 할 물리적 기계가 있었다일,
그리고 나서 우리는 오래된 균형,
A, B, C, D,
E, F를 순서대로 테이프에 앉아서 순서대로 정렬합니다.
그리고 은행이 폐쇄된 후에
우리는 A와 같은 테이프에서 첫 번째 기록을 읽을 수 있는 과정을 시작할
것입니다. 우리는 카드에서 첫 번째 거래를 읽고
그것을 비교할 것입니다.
그리고 테이프가
트랜잭션보다
이전이거나 낮은 경우, 우리는 단지 그것을 복사하기 때문에 우리는 그것을 복제합니다.
그리고 그래서 B는 C와
비교하고, B는 복사 얻을 것이다,
그리고 C 건너 것,
그리고 우리는 C 데이터, 우리는 C 데이터를
업데이트해야하고,
균형에 $10를 추가해야한다는 것을 깨닫게 될 것입니다, 그리고 우리는 그것을 쓸 것입니다.
그리고 당신은 우리가
정렬 된 순서입니다, 우리가 정렬하고, 우리가 쓰고있는 것을 알 수 있습니다.
그런 다음 우리는 D를 복사 할 것이고, 우리는 D에 대해 아무것도 가지고 있지
않으며, 그냥 복사 될 것입니다.
우리는 E를 복사 할
것이고, 우리는 E에 대해 아무것도 가지고, 그리고 그것은 단지 복사
될 것입니다, 그리고 우리는, 죄송합니다, 이 그림에 F를 넣어 잊어 버렸을
것입니다, 우리는 F를 가질 것이고 우리는 10을 빼고, 우리는 그것을 복사 할 것입니다.
그리고 우리는
그날 밤 우리가 해야 할 일들과 함께 할 것입니다.
그리고 우리가 할 일은
이 새로운 업데이트 된 데이터를
모두 계정 순서로 정렬했을 것입니다.
그리고 다음 날 밤,
우리는 테이프를 옮기고,
새로운 테이프는 오래된 테이프가 될
것이고, 우리는 그것을 반복해서 반복해서 할 것입니다.
때로는 이러한 프로세스가
4 ~ 5 시간 동안 실행되기도 합니다.
테이프가 길거나 여러 개의 테이프여야 하기 때문입니다.
그래서
은행이 5시에 문을 닫은 후에 많은 컴퓨팅이 이루어졌습니다.는 이러한 테이프를 마운트하고
이러한 작업을 실행하고 거기에 앉아서
데이터가
하나에서 다른 테이프로 복사되는 동안 이러한 테이프가 회전하는 것을 관찰합니다.
그래, 꽤 멋지다.
고맙게도, 그것이 우리가 더 이상 그것을 하는 방법이 아닙니다.
우리가
이것을 할 필요가 없도록 만든 것은 디스크 드라이브의 발명입니다.
디스크
드라이브는 테이프 드라이브와 마찬가지로 마그네틱 미디어입니다.
하지만 그
차이는 회전 플래터에 있다는 것입니다.
그래서 여러분이 할 수 있는 것은 데이터가
이 플래터에 있는 일련의 동심원에
있었다는 것입니다. 그리고 나서 빠르게 들어가고 밖으로 이동할 수 있는 머리를 가졌죠.
그래서 데이터에 접근할 수
있는 속도는
헤드가 특정 실린더로 이동할 수 있는 속도와 결합한 것이었습니다.
그리고 데이터가 돌아올 때까지 기다려야 했습니다.
그래서 가끔은 분당 5,400회 회전할 수 있습니다.
즉,
분당 5,400회, 5,000회,
이는 초당 100번입니다.
당신은 그것을 위해 초 100을 기다릴 것입니다.
그래서 이것은
테이프를 회전시키기 위해 1 분 반, 2 분, 심지어 10 분처럼 기다리는 것보다 낫습니다.
그래서 문제는
다음과 같습니다. “좋아요,
이제
우리는 이 멋진 기술을 가지고
있으므로 야간에 모든 데이터를 디스크에 저장할 수 있습니다. 충분한 공간이 있기 때문입니다.
그리고 많은 연구,
많은 컴퓨터 과학,
많은 공급업체 연구가
이 새로운 디스크를 가장 잘 사용하는 방법을 이해하게 되었습니다.
저는 사람들에게
이야기하는 것을 기억합니다. 왜냐하면 우리는 플로피 디스크를
사용했기 때문입니다.
그래서
머리를 움직이려면 1/4 초가 걸릴 수도 있고
주위를
돌리는 데 거의 1 초가 걸릴 수도 있습니다.
따라서
플로피 디스크의 어느 곳에나 가는 것은 약 1 초입니다.
그리고 우리는 데이터 저장에 대한 접근법을 세울
것이고, 우리는 이 물리적인 것부터
시작하게 될 것입니다. 그리고 나서 당신은 그 데이터를 저장하는 더 좋은 방법을 생각해 낼
것입니다.더 빨리 움직입니다.
그래서 이것은 연구와 같았습니다.
컴퓨터가 실제로 소리를
내며 컴퓨터 내부에서 코드를 변경할 수 있었던 것은 옛날이었습니다.
그리고 가장 먼저, 우리가 한 일은
순차적 인 마스터 업데이트를 가져 와서 올려 놓는 것입니다.
그러나 이것이 최선이 아닌 것으로 판명되었습니다.
그리고 그것은 일종의 연구였습니다.
무작위로 접근할 수 없는 데이터에 대해 우리가 했던 일을 어떻게 할 수 있을까 하는 것이 아니라,
그것을 이용합시다.
그래서 많은 연구, 많은 벤더들,
사람들이
“이봐, 당신은 은행이고,
당신은 정말로 그리고 진정으로 이것이 어떻게 작동하는지 알고 싶어합니다.” 라고 말하기 위해 구입했습니다.
그래서 60년대와 70년대에 일어났던 것은
컴퓨터 공급업체들이 싸우고 있었습니다.
그리고 그들은
현재의 데이터베이스 기법과 비교했을 때
아주
간단했지만, 그 당시에는 많은 작업이
필요했고, 그들은 다른 모든 것들과 싸울 것입니다.컴퓨터 공급 업체에서
“우리의 색인
순차적 메커니즘이 더 낫다”고 말할 것입니다.
그리고 벤더 2는
“우리의 네트워크 접근 방식이 더 낫다”고 말할 것입니다.
그리고 그들은 앉아서
서로 일종의 투쟁을
할 것입니다. 그리고 가난한 고객은
“나는 당신이 무슨 말을하는지 모르겠습니다.”
그리고 나서 그들은 단지
골프에 나갔거나
최고의 점심을 먹거나 플로리다로 여행을 떠난 업체로부터 물건을 사곤 했습니다.
그리고 나서 그들은 단지
그 벤더가 무엇을 했는지에 적응할 것입니다.
그래서 정말 무서운 일이었습니다. 왜냐하면 우리는
당신이 벤더에 갇혀있는 곳으로 옮기고 있었기 때문입니다.
그리고 일단
벤더에 갇혀있다면, 당신은 나쁜 모양입니다.
그래서 미국 정부는
특히
엄청난 돈을 가졌고,
정상적인 데이터 처리와
군사물 같은 전략적인 것들을 위해
수많은 컴퓨터를 구입하고 있었습니다. 그래서
그들은 수많은 컴퓨터를 구입하고 있었죠.그들은
단일 공급 업체에 그들을 고정,
공급 업체는 단지 가격을 지시 할 수 있습니다.
그래서 연방 정부는
국립 표준 기술 연구소인 NIST를 통해
데이터베이스에 표준이 필요하다고 결정했습니다.
그들은
동일한 기술을 사용하는 모든 공급 업체의 데이터베이스와 이야기 할 수있는 방법이
필요했고, 공급 업체를 전환 한 경우
소프트웨어를 완전히 다시 작성해야했습니다.
그래서 NIST는 이 추상화,
이 표준이 어떻게 작동할지 지정하지 않았습니다.
그들은 단지 벤더들을
끌어들이고 말했습니다. “
표준을 제시하지 않으면 소프트웨어 사용을 중단할 것입니다.”
그리고
벤더들이 모든 것이 완벽하고 훌륭하다고 생각했음에도 불구하고
많은 거꾸가 있었기 때문에 완벽한 시기였습니다.
특히
관계형 데이터베이스의 개념이
있었는데, 그 당시에는
실제로 구현된 사용 가능한 기술보다 데이터를 저장하고 검색하는 더 나은 방법에 대한 수학적 이론이었습니다.
그래서 SQL, 그리고 이것은
제가 갔고 NIST에서 인터뷰를 한 리즈 퐁 (LizFong) 입니다.
그녀는
초기에 대해 이야기합니다. 훌륭한
인터뷰입니다.
그리고 저는 여러분이
볼 수 있도록 이 비디오를 살펴보는 것이 좋습니다.
자, SQL이 기본적으로 말한
것은 데이터가 실제로 디스크에 어디에 있는지 걱정하지 않겠습니다. 왜냐하면
이전의 데이터베이스 접근 방식은
프로그래머가
실린더와 위치가 있다는
것을 알 수 있었기 때문입니다.색인을
만들고 우리는 색인을 직접 살펴볼
것입니다. 모든 종류의 다른 것들이나 디스크의 한 곳으로
읽으면 디스크에서 읽어야 할 다음 장소의 주소를 갖게 될 것입니다.
그리고 그들은 말하길, 아시다시피,
책상의 물리적 저장 구조에 대해 너무 걱정하지 말고,
우리가
읽고, 쓰고,
업데이트하고, 삭제하고자 하는 것을 표현할 수 있는 언어를 생각해 봅시다.는
그 아래에 많은 디스크 형식이있을 수있는 소프트웨어를 만들 수 있습니다.
그리고 우리는 모두 이 언어를 사용할 수 있고
, 벤더 A를 사서 이 언어와 벤더 B를 사용하고 이 언어를 사용할
수 있습니다. 그리고 나서 벤치마킹하여
“여기 이 언어로 된 많은 것들이 있습니다.
어떤 공급업체가 이 작업을 더 빠르게 실행할 수 있습니까?”
그래서 NIST에는 일련의 벤치마크도 있었습니다.
TPC는 벤치 마크 중 일부였습니다.
그래서 그들이 한 것은 기본적으로
이것을 만들어 이것이 아름답고 단순한 언어와 같았고,
우리가 SQL이라고 부르는 것입니다.
어떤 시점에서
단순 쿼리 언어라고 불리우며
데이터베이스와 대화하기 위해 사용하는 언어입니다.
그리고 흥미로운 점은
SQL이 처음 나왔을 때 60 년대와 70 년대에 실제로 할 수있게 해준 것입니다. 색인, 순차 및 네트워크 스타일 데이터베이스와 같은 구식 데이터베이스와
이야기하는 것이었습니다. 관계형 데이터베이스라는 새로운 양식입니다.수학적
기반이지만, 처음으로 심하게 구현되었습니다.
우리는 단지 “오 이상하다”라고 말할 수 있습니다.
관계형 데이터베이스의 성능이
다른 데이터베이스만큼 좋은 지점에 도달하면
전환 할 수 있고 동일한 SQL을 이야기 할 수 있습니다.
그래서 그것은
10 년 또는 15 년 동안 놀라운 혁신을
허용했습니다. 추상화를 통해
우리는 프로그래머로서 우리가 어떻게 사용했는지 변경하지 않고도 데이터베이스를 훌륭한 방법으로 향상시킬 수있었습니다.
꽤 괜찮아, 솔직히 말할거야.
그래서 저는
관계형 데이터베이스와 관계형 데이터베이스에 대한 개념에 대해 이야기
해왔고,
1980년대 초에 관계형 데이터베이스를 처음 보았을 때
, 이것은 쓰레기입니다. 왜냐하면 다시
플로피 디스크를 들을 수
있었고,저는
무슨 일이 일어나는지 너무 많이 알고
있었고, 그 인식을 좋아했습니다.
그리고 관계형 데이터베이스는
이 레이어 뒤에 무슨 일이 일어나는지 숨겼습니다.
그리고 제가 그것을 사용할 때마다,
그것은 아직 영리하지 않았기 때문에 더 느리다는 것이 밝혀졌습니다.
따라서 관계형 데이터베이스는
열,
행, 연결, 조인으로 데이터 네트워크를 표현하는 이론적 최선의 방법으로 수학적 아이디어로 시작되었습니다
. 결국 모든 것에 대해 이야기하겠습니다.
그리고 그것은 아름다운 아이디어였고 수학은 옳았습니다.
관계형 데이터베이스의 우수한 수학이
고도로 영리하게
최적화 된 이전 세대 데이터베이스 시스템보다 더 잘 작동하는 지점에 도달하는 데 오랜 시간이 걸렸습니다.
따라서 일반적인 데이터베이스
시스템이 많이 있습니다.
그들 중 일부는 오픈 소스이며,
일부는 상업적입니다.
포스트그레스와 MySQL은 오픈 소스입니다.
Postgres는 아마도 더
복잡하고 복잡하고 풍부 할 것입니다.
오라클은 복잡하고
복잡하며 풍부한 데이터베이스로
많은 돈을 지불 할 수
있으며 Microsoft는 SQL Server라는 데이터베이스를 보유하고 있습니다.
그리고 우리가 보는 이러한 모든 데이터베이스는
SQL 사양이 존재한 후에 어떤 의미에서
진화했기 때문에 일종의 SQL을 구축했습니다.
SQL을 배운 레거시 데이터베이스가있었습니다.
그리고 다른 많은 데이터베이스가 있습니다.
SQLite는 우리가
실제로이 과정과 함께 사용하려고하는 것입니다,
그것은 슈퍼 멋진, 슈퍼 빠른.
휴대 전화에는
SQLite의 40 복사본이있을 수
있으며 자동차에는 SQLite의 40 복사본이있을 수 있습니다.
실제 작은 임베디드 데이터베이스이기 때문입니다.
생산 규모에는 좋지 않습니다.
100 명의 사용자가
동시에 웹 사이트를 타격하면
Postgres, MySQL 또는 오라클 또는 SQL
Server는 실제로 온라인 실제 멀티 프로세싱 데이터베이스의 종류입니다.
그러나 SQLite는 정말 간단하기 때문에 훌륭합니다.
그것은 하나의 파일에 모든 것을 저장,
우리는 등 주위에 파일을 이동할 수 있습니다
그래서 나는 SQLite를
사랑하고, 이 클래스와 일에
우리는 SQLite에 대해 이야기거야.
하지만 우리가
이야기하는 모든 것은 이 모든 다른 데이터베이스 시스템에 적용됩니다.
따라서
데이터베이스로 작업 할 때 가장 먼저해야
할 일은 당신과 데이터베이스
사이의 계약을 마련해야한다는 것입니다.
열의 모양이 무엇인지, 열의
넓이, 어떤 종류의 데이터를 저장할 것인가.
그런
다음 데이터베이스 소프트웨어가
디스크와 같이 데이터베이스를 구조화하는 방법을 알려줍니다.
그리고 당신이하고있는 일의 일부는
데이터베이스 소프트웨어, MySQL
또는 Postgres 또는 SQLite가 스토리지를 최대로 최적화 할 수있게하는 것입니다.
그것은 당신보다 훨씬 똑똑합니다.
오라클, MySQL
또는 Postgres와 같은
것은 아마도
데이터를 저장하고 검색하는 가장 좋은 방법에 대한 연구 및 개발의 10 억 달러를 나타냅니다.
그리고 당신은 그 중 어떤 것도 알 필요조차 없습니다.
당신은, 보세요, 나는이 열을 가질 것입니다,
그것은 100 문자의 텍스트를 가질 것입니다,
그리고 나는 정수와
부동 소수점 숫자, 그리고 3,000 문자의 텍스트를 가질 것입니다,
당신은 모든 세부 사항에 대해 걱정.
하지만 핵심은
“내가 원하는 것을
저장할 것”이라고 말하면 최적화할 수 없습니다. 그래서
처음에 계약을 맺고
“이것이 바로 내가
데이터베이스 시스템과 이야기 할 때 데이터를 배치하는 방법입니다.
그러면
실제 디스크에 데이터를 배치하는 방법을 알아낼 수 있습니다.”
그래서 스키마 또는 데이터베이스 모델이라고 부릅니다.
데이터베이스 모델을 만드는 것은 그 자체로 멋진 일입니다.
따라서 복잡한 응용 프로그램을
구축한다면, 이러한 모델들이 연결되어
있고, 결국 우리는 그 모든 것에 대해 이야기 할 것입니다.
그러나 데이터베이스 소프트웨어가 데이터베이스의
스토리지를 최적화 할 수 있도록 데이터베이스 소프트웨어 간의 계약이라고 말하는 것이 중요합니다.
이제 스키마를 제공하면 해당 스키마에
의존하는 쿼리를 작성할 수 있습니다.
그래서 당신은
전자 메일이라는 열과 이름이라는 열이있을 수 있습니다,
당신은
그 스키마를 사용하여 데이터베이스에 데이터를 삽입 할
수 있습니다, 당신은 당신이 데이터베이스
내부의 어딘가의 데이터 종류를 변경할 수 있습니다, 스키마를 사용하여 데이터를 검색 할 수 있습니다,
당신은 데이터를 삭제할 수 있습니다.
잠깐만 기다려 우와. 안녕, 저기
저기 뭐하는 거야? 오, 젠장
미안, 미안해 당신은 나쁜 생물입니다.
저것 좀 봐요 나는 그 소음이 무엇인지 궁금해하고 있었다.
이리 와 이 모든 사람들에게 당신을 소개해야 합니다.
이리 와
당신은 행동하지 않습니다.
이것이 쉘비입니다.
안녕하세요 셸비 이것이 쉘비입니다. 여긴 내 강아지야
나는 그녀를
케이지에서 떼어내고 그녀가 앉아서 내 발로 가도록하려고 노력하고있다.
그리고 그녀는 씹는 장난감을 가지고 있습니다.
안녕하세요 셸비 여긴 셸비
그녀는 방해하고 있습니다.
내 강의를 방해하고 있어 하지만 당신은 귀엽다.
그러니 펜으로 씹는
것을 그만두고 내가 준 씹는 장난감을 씹어, 알았지?
이 강의를 통해 보자.
좋아, 내려갈 수 있어
그냥 씹는 것을 그만 두십시오.
그 개 중단에 대해 미안해
나는 씹는 소리를 듣고 있었고,
나는 모든 것을 가져갔지만
바닥에 하나의 펜이 있었기
때문에 펜과 불쌍한 펜이 강아지 씨를 만난다.
오, 글쎄. 좋아, 내가 어디 있었어?
SQL. CRUD, 작성, 읽기
, 업데이트 및 데이터를 삭제합니다.
그래서 우리의 다음 단계는
실제로 SQL을 수행하고 데이터베이스를 만드는 것입니다.
[ 음악]