Описание всех лабораторных работ (1127020)
Текст из файла
Создатель первой версии файла: Губайдулин Айдар, 174 группа (2013) Ресурсы Сайт с заданием, книга Мартина Грабера “SQL” Общие советы: ● Начинайте сдавать лабы как можно раньше и не пропускайте сдачи. Самое главное правило сдачи БД. На следующей неделе после ознакомительного занятия нужно прийти сдавать 1 лабу. Также стоит подготовить схему 2 лабы, чтобы Теймур указал на главные ошибки и на второй неделе вы её сдали. Так как в первый день придёт сдавать мало людей, вы точно успеете со второй . В другие же дни сдать за день две лабы просто нереально, желающих очень много. Если начать сдавать с первого дня и идти так до конца, не теряя недель, то баллы за сдачи будут гораздо выше и ближе к середине апреля вы всё закончите с оценкой Отл в зачётке. Также существует вариант сдачи всех 10 лаб в феврале начале марта по договорённости с Теймуразовым. Такой способ ещё более предпочтителен, т.к. в феврале нагрузка минимальна и большинство времени всё равно идёт не на учёбу. А учиться лучше зимой, а не весной. ● На сдачу приходить нужно в самом начале пары (а, может, и раньше), т.к. если попасть в конец очереди и отвечать за 15 минут до конца, времени, необходимого на ответы на дополнительные вопросы, не будет. [КБТ и компания мало того что довольно строго ведет очередь, но ещё и ограничивают запись в неё опоздавшим. Хотя, обычно, если у вас “нормальный” приоритет (ваша пара, без дисконта, сегодняшняя лаба) то вы успеете ответить] ● При подготовке к каждой лабе используйте Справку MSDN Справка MSDN (используйте поиск) ● Когда будете ставить MS SQL Server, нужно чётко придерживаться инструкций, данных КБТ. В противном случае вы не сможете сделать 7 лабу, т.к. при аутентификации искусственным пользователем возможно возникновение ошибки №18452. Возможно, существует решение проблемы, но во всех двух мне известных случаях приходилось брать ноут с нормально поставленным MS SQL у друзей. И лучше устанавливайте НЕ express версию, если собираетесь сдавать 10 лабу. (Не обязательно. 10 лаба сдается и без инструментов указанных в описании, даже без бд northwind. Хотя последняя конечно и удобна, легче будет создать свою тривиальную бд и заполнить её скриптом) ● Ни в коем случае не пытайтесь переустановить MS SQL. Удаления его из “Установки и удаления” программ не достаточно. MS SQL “опутывает” всю систему и, чтоб его удалить, можно, разве что, воспользоваться инструкцией с Майкрософта. Если пытаться всё делать самому, то могут остаться его куски, которые в дальнейшем будут препятствовать повторной установке. Если вы испортили свой сервер, то лучше просто создать ещё один. ● Попробуйте обогнать расписание сдач хотя бы на одну лабу. Уровень сложности сдачи падает раза в два. 1 лаба. Работа в среде интерактивного SQL Protip: Если выделить строчку в окне запроса и нажать “исполнить”, выполнится только она (при этом свойства подключения типа вывода информации о времени запроса, или execute as, будут работать если были исполненны в этом подключении) protip: F5 “выполнить запрос”, Ф6 проанализировать грамматику без выполнения, PROtip: если вам надоело каждый раз удалять данные после неудачных запросов, перед любым выражением создания\добавления поставьте BEGIN TRAN, после создания проверьте результат селектом, и в конце скрипта сделайте ROLLBACK ● При подготовке запросов важно, чтобы количество вызова оператора SELECT было минимальным. В идеале каждый запрос должен содержать ровно один SELECT. КБТ не очень любит вложенные запросы типа SELECT(SELECT(SELECT(....))). (мало того, он клялся и божился, что все запросы из этой лабы решаются в один селект) ● Хотя большинство запросов из вариантов можно найти в локалке, лучше написать их самому, т.к. запросы основа понимания предмета. В любом случае, умение писать запросы необходимо в 4 лабе. ● Внимательно читайте условие запроса, ничего не додумывая и выполняя в точности то, что требуется. Например, в 29 варианте 4 запрос гласит: “Выбрать список продуктов, цены на которые в 1988г. менялись не менее 2 раз.” Тут существует два “подводных камня” a.
Если цена только установилась первый раз в 1988г., то это мы не считаем, т.к. цена не изменилась. b. Если цена изменилась, но новая цена совпадает со старой (такое тоже, очевидно, возможно), то цена также не изменилась. ● Если, например, для какогото отдела нужно вывести всех сотрудников, работающих в НьюЙорке, а для некоторого отдела их нет, то запрос должен выдавать название отдела и 0 напротив него. Если он не выводит этот отдел вообще, то запрос потребуют переписать. ● НИКОГДА не оставляйте в запросах служебные поля вроде id. Особенно если нужно вывести “все х когонибудь”. Если кроме него нету уникального поля, сделайте составное (например, если есть поля имя и фамилия, обьедините их в одну строку и выведете). Так же желательно использовать именование столбцов в запросе(select чтото as толковое_имя) Вопросы 1.
Что такое SELECT, FROM, GROUP BY, ORDER BY, HAVING 2. Что такое ALL, DISTINCT 3. Чем отличаются INNER JOIN и OUTER JOIN 4. Что такое CROSS JOIN, какой более простой конструкцией его можно заменить. Ответ: CROSS JOIN это произведение двух таблиц. Гораздо более простой конструкцией является запятая. Т.е. SELECT (...) FROM tab1, tab2 это всё равно, что SELECT(...) FROM tab1 CROSS JOIN tab2 5. Что будет, если ввести запрос SELECT * FROM table WHERE id = id 6. Что такое ISNULL 7. Что выведет COUNT(*), COUNT(), COUNT(8) в групповом запросе и почему. 8. Что выдаст SELECT * FROM table WHERE NULL=NULL (Ответ: ничего, потому что по стандарту сравнение с NULL возращает false, нужно использовать IS NULL) 9. declare @TestTable as table(A int) insert into @TestTable(A) values (1) insert into @TestTable(A) values (7) insert into @TestTable(A) values (5) insert into @TestTable(A) values (NULL) B Пишут такую фигню и просят вывести среднее между 1,7,5. O Надо написать AVG(CAST(A as FLOAT)) или AVG(A*1.0) select AVG(A*1.0) from @TestTable B После спрашивают как считать COUNT с NULL и без NULL. O COUNT(*) и COUNT(A) соответсвенно 2 лаба. Проектирование схемы Для сдачи этой работы нужно будет просто изобразить схему таблиц. Куда удобнее сразу сделать базу в SQL, чтобы сгенерировать схему автоматически встроенным средством. ● Не доверяйте простоте схемы в задании. Нужно продумать базу не только со стороны ответа на вопрос “кому и зачем” но ещё и “как это реалировать так чтобы было удобно”. Но и перебарщивать не стоит, чем сложнее схема тем навороченее запросы, и легче КБТ вас по ней завалить. ● В вашей базе данных не должно быть лишних таблиц. Ваша база должна коррелировать с реальной жизнью. То есть, проектируя базу, связанную с ЖКХ, заранее ознакомьтесь с этой сферой, с тарифами и услугами и т.д. ● Будьте готовы к вопросам типа: “Зачем в этой таблице нужен этот столбец?”, “Зачем нужна эта таблица?” ● Самый главный вопрос “Для кого и зачем проектировалась эта база данных?”. Вы должны будете назвать цель и обосновать, зачем вам в вашей базе нужны все таблицы. ● По возможности не включайте в схему финансы в каком бы то ни было виде. Если вы попытаетесь создать базу бухгалтерии, то с огромной вероятностью вас завалят, т. к. нужно учитывать абсолютно всё: поставки, долги, неожиданные доходы и т.п. КБТ с лёгкостью вас завалит. ● То же относиться к кадрам. ● Удобно делать схему с помощью, например, Database Design Tool (можно потом экспортировать в .sql) http://gnuwin.epfl.ch/apps/DDT/en/ 3 лаба. Создание таблиц ● Нужно знать типы данных ● protip: если в предыдущей лабе схему рисовали автоматом по созданной базе, то скрипты для этой тоже можно получить автоматически, в контекстном меню базы данных выбрав Task > Generate Scripts; Его надо почистить от непонятных слов( ● При сдаче лабы вас попросят удалить все имеющиеся таблицы и запустить скрипт создания. Удобно в начале скрипта создания прописать удаление всех таблиц. (DROP TABLE <имя таблицы>). При этом нужно расположить команды удаления в нужном порядке, так как таблицы друг на друга ссылаются и это нужно учесть (сначала удаляйте таблицы, которые зависят от других, потом “главные” таблицы). ●В таблицах нужно использовать ключевое слово IDENTITY. Если у вас этого не будет, вас отправят переделывать скрипт. Вопросы: 1.
Чем отличаются CHAR и VARCHAR? 2. Чем отличаются VARCHAR и NVARCHAR (зачем перед строковыми данными N’строка’)? 3. Что будет, если убрать из объявления столбца PRIMARY KEY ключевое слово NOT NULL Ответ: ничего не будет, но по стандарту положено, чтобы этот столбец был NOT NULL Следующий вопрос: убирает NOT. Ответ: Выдаст ошибку. 4. Чем отличаются PRIMARY KEY и UNIQUE? 5. Какая минимальная и максимальная может быть дата у datetime? (01.01.1000 31.12.9999) Пиздишь, братан, минимальная дата 01.01.1753. Ты написал для date 6. Ещё одна суперзадача от КБТ: данные удаляются и добавляются снова. Возможны два варианта: всё заработало(Вам повезло, карма+1) и данные упали. В чём причина? Identity не сбросило. Как исправить? Я просто в INSERT явно указывал PRIMARY KEY. 7. Изменение параметров типа (или самого типа): a. Изменить тип данных поля в вашей базе. b.
Что будет, если при создании таблицы с полем age SMALLINT написать age SMALLINT DEFAULT(30)? Ответ: DEFAULT по умолчанию устанавливает всем строкам таблицы приписанное ему значение, если значения для соответствующего поля не вставляются в таблицу при помощи INSERT. c. Изменить ограничение наложенное, например, на тип VARCHAR. Т.е. если было VARCHAR(15), нужно сделать VARCHAR(30) Ответ: ALTER TABLE CLIENT ALTER COLUMN last_name VARCHAR(30); d. Изменить ограничение, наложенное при помощи CHECK, изменить значение DEFAULT. Указание к ответу: в окне обозревателя можно посмотреть ограничения, относящиеся к любой таблице и полю в ней. Там же можно создать сценарий (скрипт) для его изменения. В итоге должно получиться чтото типа: ALTER TABLE CLIENT DROP CONSTRAINT [DF__CLIENT__age__2764BD12] ALTER TABLE CLIENT ADD CONSTRAINT [DF__CLIENT__age__2764BD12] DEFAULT (35) FOR age 8.Если попросят изменить тип поля, которое связано foreign key, возможны два решения: удалить constraintы, поменять везде типы, восстановить constraintы. Но КБТ это не понравится, он хочет копии таблиц с измененным типом и копирование данных туда 1.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.