Программирование в Microsoft SQL Server 2000

Удаление строк

Разбить на страницы
Показывать лекцию целиком

Вы научитесь:

  • удалять избранные строки из таблицы с использованием панели сетки Grid Pane;
  • удалять строки с использованием оператора DELETE...WHERE;
  • удалять строки с использованием оператора DELETE...FROM...WHERE;
  • удалять строки с использованием каскадного удаления;
  • удалять все строки с использованием оператора TRUNCATE TABLE.
  • Понятие об операторе DELETE

    Базовая структура оператора DELETE несколько отличается от других операторов SQL, с которыми мы сталкивались ранее. Его синтаксис следующий:

    DELETE таблица_или_представление
    [FROM источники_таблиц]
    [WHERE условие_отбора]

    Список столбцов в операторе DELETE не указывается, поскольку при удалении строки удаляются также все столбцы. Необязательная фраза WHERE дает возможность указывать, какие строки следует удалить. Если фраза WHERE опущена, удаляются все строки в указанной таблице или представлении.

    Фраза FROM, также необязательная, позволяет задавать дополнительные источники (таблицы или представления), которые будут использоваться в условии отбора в фразе WHERE. Подобный синтаксис оператора может ввести в заблуждение, поскольку строки не будут удаляться из таблиц и представлений, указанных в фразе FROM. Если в фразе FROM вы указываете более одной таблицы или представления, их имена следует отделять запятыми.

    Совет. Оператор DELETE не поддерживает применение операции JOIN, поэтому вам следует связывать таблицы или представления в фразе WHERE оператора.

    Если таблица участвует в отношении, важно не допустить, чтобы при удалении в главной таблице оставались "висячие" строки. Висячими строками называют строки в зависимой таблице (таблице внешнего ключа), которые не имеют соответствующих строк в главной таблице (таблице первичного ключа). Новинкой в SQL Server 2000 является возможность каскадных удалений в отношении. Если для отношения задается каскадное удаление, SQL Server автоматически удалит строки в зависимой таблице, чтобы не оставлять висячих строк. На рис. 19.1 показано отношение, установленное между таблицами Oils и PlantParts.

    (рис 19.1) Каскадные удаления выполняются на вкладке Relationships (Отношения) диалогового окна Properties (Свойства).

    Использование оператора DELETE

    Подобно другим операторам SQL, используемым в конструкторе запросов Query Designer, оператор DELETE может быть непосредственно введен в панели SQL Pane, либо создан с использованием графических панелей.

    Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane

    Панель сетки и панель диаграмм конструктора запросов Query Designer предоставляют графические средства для создания операторов DELETE; однако, они не поддерживают применение фразы FROM, которая дает возможность использовать в операторе DELETE дополнительные таблицы и представления.

    Удалите избранные строки из таблицы

  • Перейдите к папке Tables базы данных Aromatherapy. SQL Server отобразит список таблиц в рабочей панели Details Pane.
  • Щелкните правой кнопкой мыши на таблице MyOils, укажите на Open Table (Открытие таблицы) и выберите Query (Запрос). Будет открыт конструктор запросов Query Designer.
  • Скройте панель SQL Paneи панель результатов Results Pane.
  • Щелкните на кнопке Change Query Type (Изменить тип запроса)в панели инструментов конструктора запросов, а затем выберите Delete (Удалить).
  • Не закрывая окно конструктора запросов, откройте новое представление таблицы MyOils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Переместитесь в конец таблицы, чтобы убедиться, что в ней имеется четыре строки, начинающиеся с "Insert".
  • Вернитесь в окно конструктора запросов Query Designer, содержащее оператор DELETE.
  • Добавьте выражение Left(OilName, 6) в ячейку Column и добавьте условие = 'Insert' в ячейку Criteria.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что четыре строки были удалены.
  • Нажмите ОК, чтобы закрыть окно сообщения. Вернитесь в окно конструктора запросов, отображающее все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT*.
  • Переместитесь в конец таблицы, чтобы убедиться, что строки, начинающиеся с "Insert", были удалены.
  • Удаление строк с использованием панели SQL Pane

    Как и в других случаях, непосредственный ввод оператора DELETE в панели SQL Pane конструктора запросов Query Designer обеспечивает большую гибкость, однако при этом вам необходимо помнить синтаксис оператора.

    Удалите строки с использованием фразы WHERE

  • Вернитесь к окну конструктора запросов, содержащему оператор DELETE.
  • Отобразите панель SQL Paneи скройте панель диаграмм Diagram Paneи панель сетки Grid Pane.
  • Замените оператор SQL следующим:
    DELETE FROM MyOils
    	WHERE (OilName = 'Basil')
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что строка была удалена.
  • Вернитесь к окну конструктора запросов, отображающему все строки в таблице MyOils.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT*. Убедитесь, что строка для Basil была удалена.
  • Удалите строки с использованием фразы FROM

  • Вернитесь к окну конструктора запросов, содержащему оператор DELETE.
  • Замените оператор SQL на следующий:
    DELETE	MyOils
    FROM	PlantParts
    WHERE	(MyOils.PlantPartID = PlantParts.PlantPartID) AND
    	(PlantParts.PlantPart = 'Roots')
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что были удалены две строки.
  • Вернитесь к окну конструктора запросов, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос
  • Закройте оба окна конструктора запросов Query Designer.
  • Удалите строки при помощи каскадного удаления

  • Щелкните правой кнопкой мыши на таблице PlantParts в рабочей панели Details Pane, откройте Open Table (Открытие таблицы) и выберите Query (Запрос).
  • Скройте панель диаграмм Diagram Paneи панель сетки Grid Pane.
  • Щелкните на кнопке Change Query Type (Изменить тип запроса)в панели инструментов конструктора запросов и выберите Delete (Удалить). Конструктор запросов изменит оператор
  • Не закрывая окно конструктора запросов, откройте представление таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Вернитесь к окну конструктора запросов, содержащему оператор DELETE.
  • Измените оператор SQL следующим образом:
    DELETE PlantParts
    	WHERE (PlantPartID = 10)
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что строка была удалена.
  • Вернитесь к окну конструктора запросов, отображающему все строки из таблицы Oils.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос
  • Закройте окна конструктора запросов Query Designer.
  • Оператор TRUNCATE TABLE

    Результат выполнения оператора TRUNCATE TABLE идентичен результату выполнения оператора DELETE, для которого не указано условие WHERE, т.е. из таблицы удаляются все строки. Оператор TRUNCATE TABLE, отличается от оператора DELETE тем, что оператор TRUNCATE TABLE не записывается в журнал транзакций, что существенно ускоряет его выполнение.

    Удаление всех строк с помощью оператора TRUNCATE TABLE

    Оператор TRUNCATE TABLE может быть выполнен только из панели SQL Pane конструктора запросов Query Designer.

    Удалите все строки с использованием оператора TRUNCATE TABLE

  • Щелкните правой кнопкой мыши на таблице MyOils в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Query (Запрос). Будет открыто окно конструктора запросов Query Designer.
  • Скройте панель диаграмм Diagram Paneи панель сетки Grid Pane.
  • Замените имеющийся оператор SQL на следующий:
    TRUNCATE TABLE MyOils
  • Не закрывая текущее окно конструктора запросов, откройте новое представление таблицы MyOils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Вернитесь к окну конструктора запросов, содержащему оператор TRUNCATE TABLE.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что запрос был успешно исполнен.
  • Вернитесь к окну конструктора запросов, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос
  • Краткое содержание

    Чтобы ...Синтаксис оператора SQL
    Удалить все строки с использованием оператора DELETE DELETE таблица_или_представление
    Удалить избранные строки с использованием фразы WHERE DELETE таблица_или_представление WHERE (условие_отбора)
    Удалить избранные строки с использованием условия на основе другой таблицы DELETE таблица_или_представление FROM источники_таблиц WHERE (условие_отбора)
    Удалить все строки с использованием оператора TRUNCATE TABLE TRUNCATE TABLE таблица_или_представление
    Страницы:

    Вы научитесь:

  • удалять избранные строки из таблицы с использованием панели сетки Grid Pane;
  • удалять строки с использованием оператора DELETE...WHERE;
  • удалять строки с использованием оператора DELETE...FROM...WHERE;
  • удалять строки с использованием каскадного удаления;
  • удалять все строки с использованием оператора TRUNCATE TABLE.
  • Понятие об операторе DELETE

    Базовая структура оператора DELETE несколько отличается от других операторов SQL, с которыми мы сталкивались ранее. Его синтаксис следующий:

    DELETE таблица_или_представление
    [FROM источники_таблиц]
    [WHERE условие_отбора]

    Список столбцов в операторе DELETE не указывается, поскольку при удалении строки удаляются также все столбцы. Необязательная фраза WHERE дает возможность указывать, какие строки следует удалить. Если фраза WHERE опущена, удаляются все строки в указанной таблице или представлении.

    Фраза FROM, также необязательная, позволяет задавать дополнительные источники (таблицы или представления), которые будут использоваться в условии отбора в фразе WHERE. Подобный синтаксис оператора может ввести в заблуждение, поскольку строки не будут удаляться из таблиц и представлений, указанных в фразе FROM. Если в фразе FROM вы указываете более одной таблицы или представления, их имена следует отделять запятыми.

    Совет. Оператор DELETE не поддерживает применение операции JOIN, поэтому вам следует связывать таблицы или представления в фразе WHERE оператора.

    Если таблица участвует в отношении, важно не допустить, чтобы при удалении в главной таблице оставались "висячие" строки. Висячими строками называют строки в зависимой таблице (таблице внешнего ключа), которые не имеют соответствующих строк в главной таблице (таблице первичного ключа). Новинкой в SQL Server 2000 является возможность каскадных удалений в отношении. Если для отношения задается каскадное удаление, SQL Server автоматически удалит строки в зависимой таблице, чтобы не оставлять висячих строк. На рис. 19.1 показано отношение, установленное между таблицами Oils и PlantParts.

    (рис 19.1) Каскадные удаления выполняются на вкладке Relationships (Отношения) диалогового окна Properties (Свойства).

    Использование оператора DELETE

    Подобно другим операторам SQL, используемым в конструкторе запросов Query Designer, оператор DELETE может быть непосредственно введен в панели SQL Pane, либо создан с использованием графических панелей.

    Удаление строк с использованием панели сетки Grid Pane и панели диаграмм Diagram Pane

    Панель сетки и панель диаграмм конструктора запросов Query Designer предоставляют графические средства для создания операторов DELETE; однако, они не поддерживают применение фразы FROM, которая дает возможность использовать в операторе DELETE дополнительные таблицы и представления.

    Удалите избранные строки из таблицы

  • Перейдите к папке Tables базы данных Aromatherapy. SQL Server отобразит список таблиц в рабочей панели Details Pane.
  • Щелкните правой кнопкой мыши на таблице MyOils, укажите на Open Table (Открытие таблицы) и выберите Query (Запрос). Будет открыт конструктор запросов Query Designer.
  • Скройте панель SQL Paneи панель результатов Results Pane.
  • Щелкните на кнопке Change Query Type (Изменить тип запроса)в панели инструментов конструктора запросов, а затем выберите Delete (Удалить).
  • Не закрывая окно конструктора запросов, откройте новое представление таблицы MyOils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Переместитесь в конец таблицы, чтобы убедиться, что в ней имеется четыре строки, начинающиеся с "Insert".
  • Вернитесь в окно конструктора запросов Query Designer, содержащее оператор DELETE.
  • Добавьте выражение Left(OilName, 6) в ячейку Column и добавьте условие = 'Insert' в ячейку Criteria.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что четыре строки были удалены.
  • Нажмите ОК, чтобы закрыть окно сообщения. Вернитесь в окно конструктора запросов, отображающее все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить) в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT*.
  • Переместитесь в конец таблицы, чтобы убедиться, что строки, начинающиеся с "Insert", были удалены.
  • Удаление строк с использованием панели SQL Pane

    Как и в других случаях, непосредственный ввод оператора DELETE в панели SQL Pane конструктора запросов Query Designer обеспечивает большую гибкость, однако при этом вам необходимо помнить синтаксис оператора.

    Удалите строки с использованием фразы WHERE

  • Вернитесь к окну конструктора запросов, содержащему оператор DELETE.
  • Отобразите панель SQL Paneи скройте панель диаграмм Diagram Paneи панель сетки Grid Pane.
  • Замените оператор SQL следующим:
    DELETE FROM MyOils
    	WHERE (OilName = 'Basil')
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что строка была удалена.
  • Вернитесь к окну конструктора запросов, отображающему все строки в таблице MyOils.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос SELECT*. Убедитесь, что строка для Basil была удалена.
  • Удалите строки с использованием фразы FROM

  • Вернитесь к окну конструктора запросов, содержащему оператор DELETE.
  • Замените оператор SQL на следующий:
    DELETE	MyOils
    FROM	PlantParts
    WHERE	(MyOils.PlantPartID = PlantParts.PlantPartID) AND
    	(PlantParts.PlantPart = 'Roots')
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Конструктор запросов Query Designer отобразит сообщение, подтверждающее, что были удалены две строки.
  • Вернитесь к окну конструктора запросов, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос
  • Закройте оба окна конструктора запросов Query Designer.
  • Удалите строки при помощи каскадного удаления

  • Щелкните правой кнопкой мыши на таблице PlantParts в рабочей панели Details Pane, откройте Open Table (Открытие таблицы) и выберите Query (Запрос).
  • Скройте панель диаграмм Diagram Paneи панель сетки Grid Pane.
  • Щелкните на кнопке Change Query Type (Изменить тип запроса)в панели инструментов конструктора запросов и выберите Delete (Удалить). Конструктор запросов изменит оператор
  • Не закрывая окно конструктора запросов, откройте представление таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Вернитесь к окну конструктора запросов, содержащему оператор DELETE.
  • Измените оператор SQL следующим образом:
    DELETE PlantParts
    	WHERE (PlantPartID = 10)
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что строка была удалена.
  • Вернитесь к окну конструктора запросов, отображающему все строки из таблицы Oils.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос
  • Закройте окна конструктора запросов Query Designer.
  • Оператор TRUNCATE TABLE

    Результат выполнения оператора TRUNCATE TABLE идентичен результату выполнения оператора DELETE, для которого не указано условие WHERE, т.е. из таблицы удаляются все строки. Оператор TRUNCATE TABLE, отличается от оператора DELETE тем, что оператор TRUNCATE TABLE не записывается в журнал транзакций, что существенно ускоряет его выполнение.

    Удаление всех строк с помощью оператора TRUNCATE TABLE

    Оператор TRUNCATE TABLE может быть выполнен только из панели SQL Pane конструктора запросов Query Designer.

    Удалите все строки с использованием оператора TRUNCATE TABLE

  • Щелкните правой кнопкой мыши на таблице MyOils в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Query (Запрос). Будет открыто окно конструктора запросов Query Designer.
  • Скройте панель диаграмм Diagram Paneи панель сетки Grid Pane.
  • Замените имеющийся оператор SQL на следующий:
    TRUNCATE TABLE MyOils
  • Не закрывая текущее окно конструктора запросов, откройте новое представление таблицы MyOils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, открыв меню Open Table (Открытие таблицы) и выбрав Return All Rows (Показать все строки).
  • Вернитесь к окну конструктора запросов, содержащему оператор TRUNCATE TABLE.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы исполнить запрос. Enterprise Manager отобразит сообщение, подтверждающее, что запрос был успешно исполнен.
  • Вернитесь к окну конструктора запросов, отображающему все строки из таблицы MyOils.
  • Нажмите кнопку Run (Выполнить)в панели инструментов конструктора запросов, чтобы повторно исполнить базовый запрос
  • Краткое содержание

    Чтобы ...Синтаксис оператора SQL
    Удалить все строки с использованием оператора DELETE DELETE таблица_или_представление
    Удалить избранные строки с использованием фразы WHERE DELETE таблица_или_представление WHERE (условие_отбора)
    Удалить избранные строки с использованием условия на основе другой таблицы DELETE таблица_или_представление FROM источники_таблиц WHERE (условие_отбора)
    Удалить все строки с использованием оператора TRUNCATE TABLE TRUNCATE TABLE таблица_или_представление
    Вернуться к учебному плану