22
Бази даних

cpp-2013 #15 Databases

Embed Size (px)

Citation preview

Page 1: cpp-2013 #15 Databases

Бази даних

Page 2: cpp-2013 #15 Databases

Реляційні бази даних (цілісність даних)

Сутності зберігаються в таблицях

Course

Колонки – атрибути сутностей

Name, Description, StartData, EndDate, ApplicationEndDate

Рядки – екземпляри сутностей

Визначаються лише атрибутами (не порядковим номером)

Найчастіше рядки є унікальними

Edgar Codd

Page 3: cpp-2013 #15 Databases

Primary key визначає унікальність рядка.

Один або декілька атрибутів (Name + Description; Id)

Page 4: cpp-2013 #15 Databases

Для зміни структури та отримання/редагування даних використовується мова SQL

Data Manipulation Language – DML

Data Definition Language – DDL

Page 6: cpp-2013 #15 Databases

Create database

create database LectureExample

drop database LectureExample

Page 7: cpp-2013 #15 Databases

Create table

create table Course(

Id int identity primary key,Name nvarchar(255),[Description] nvarchar(max),StartDate datetime2,EndDate datetime2,ApplicationEndDate datetime2

);

Page 8: cpp-2013 #15 Databases

Data typesData types http://msdn.microsoft.com/en-us/library/ms187752.aspx

bigint, numeric, bit, smallint, decimal, smallmoney, int, tinyint, money

float, real

date, datetimeoffset, datetime2, smalldatetime, datetime, time

char, varchar, text

nchar, nvarchar, ntext

Page 9: cpp-2013 #15 Databases

Insert, select, delete

insert into Course (Name, [Description], StartDate) values(N'C++ Feb 2013', N'...', '1/31/2013'),(N'C# 2012', N'...', '3/19/2013')

select * from Course

select Name, StartDate, EndDatefrom Course

delete Course

Завжди вказуйте перелік колонок

Не використовуйте ‘select *’ в коді

Page 10: cpp-2013 #15 Databases

Order by

select Name, StartDate from Courseorder by StartDate asc

select Name, StartDate from Coursewhere enddate is nullorder by StartDate desc

select top(2) Name, StartDate from Coursewhere enddate is nullorder by StartDate desc

Page 11: cpp-2013 #15 Databases

Pagingselect Name, StartDate from Courseorder by StartDate desc

offset 1 rowsfetch next 3 rows only

All rows

Page of size 3 starting from 2nd row

Page 12: cpp-2013 #15 Databases

Aggregationsselect count(*) from Coursewhere EndDate is null

select sum(Id) from Course

Page 13: cpp-2013 #15 Databases

select Id, Name, TeacherName,TeacherYearsOfExperiencefrom Course

A Teacher teaches a Course

Дані дублюються

Page 14: cpp-2013 #15 Databases

Вирішення – окрема таблиця для Teacher

create table Teacher(

Id int identity primary key,Name nvarchar(255),YearsOfExperience int

)

Teacher

Course

Page 15: cpp-2013 #15 Databases

Foreign keycreate table Course(

Id int identity primary key,Name nvarchar(255),TeacherId int,

constraint FK_Course_Teacherforeign key (TeacherId)references Teacher(Id)

);

Page 16: cpp-2013 #15 Databases

Inner joinselect Course.Id, Course.Name, Teacher.Id,

Teacher.Namefrom Courseinner join Teacher

on Course.TeacherId = Teacher.Id

Page 17: cpp-2013 #15 Databases

Left outer joinselect Course.Id, Course.Name, Teacher.Id,

Teacher.Namefrom Courseleft join Teacher

on Course.TeacherId = Teacher.Id

Page 18: cpp-2013 #15 Databases

Right outer joinselect Course.Id, Course.Name, Teacher.Id,

Teacher.Namefrom Courseright join Teacher

on Course.TeacherId = Teacher.Id

Page 19: cpp-2013 #15 Databases

“Right join” via left joinselect Course.Id, Course.Name, Teacher.Id,

Teacher.Namefrom Teacherleft join Course

on Course.TeacherId = Teacher.Id

Page 20: cpp-2013 #15 Databases

Full outer joinselect Course.Id, Course.Name, Teacher.Id,

Teacher.Namefrom Coursefull outer join Teacher

on Course.TeacherId = Teacher.Id

Page 21: cpp-2013 #15 Databases

Update

update Teacher set YearsOfExperience = 13where Id = 1

update Teacher set

YearsOfExperience = 15,Name = 'Walter White Junior'

where Id = 1

Page 22: cpp-2013 #15 Databases

Delete

delete Teacher where Id = 4