Setup
You can perform all these queries online for free using .
The examples in this article require the following tables to be present.
--DROP TABLE employees PURGE; --DROP TABLE departments PURGE; CREATE TABLE departments ( department_id NUMBER(2) CONSTRAINT departments_pk PRIMARY KEY, department_name VARCHAR2(14), location VARCHAR2(13) ); INSERT INTO departments VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO departments VALUES (20,'RESEARCH','DALLAS'); INSERT INTO departments VALUES (30,'SALES','CHICAGO'); INSERT INTO departments VALUES (40,'OPERATIONS','BOSTON'); COMMIT; CREATE TABLE employees ( employee_id NUMBER(4) CONSTRAINT employees_pk PRIMARY KEY, employee_name VARCHAR2(10), job VARCHAR2(9), manager_id NUMBER(4), hiredate DATE, salary NUMBER(7,2), commission NUMBER(7,2), department_id NUMBER(2) CONSTRAINT emp_department_id_fk REFERENCES departments(department_id) ); INSERT INTO employees VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20); INSERT INTO employees VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30); INSERT INTO employees VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30); INSERT INTO employees VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20); INSERT INTO employees VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30); INSERT INTO employees VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30); INSERT INTO employees VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10); INSERT INTO employees VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87','dd-mm-rr')-85,3000,NULL,20); INSERT INTO employees VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10); INSERT INTO employees VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30); INSERT INTO employees VALUES (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87', 'dd-mm-rr')-51,1100,NULL,20); INSERT INTO employees VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30); INSERT INTO employees VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20); INSERT INTO employees VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10); COMMIT;
These tables are a variant of the EMP and DEPT tables from the SCOTT schema. You will see a lot of Oracle examples on the internet using the tables from the SCOTT schema. You can find the original table definitions in the «$ORACLE_HOME/rdbms/admin/utlsampl.sql» script.
DROP
DROP table query removes one or more table definitions and all data, indexes, triggers, constraints, and permission specifications for those tables. DROP command requires to ALTER permission on the schema to which the table belongs, CONTROL permission on the table, or membership in the db_ddladmin fixed database role.
The following SQL query drops the Customers table and its data and indexes from the current database.
- DROPTABLE Customers ;
- The DROP command removes a table from the database.
- All the tables’ rows, indexes, and privileges will also be removed.
- No DML triggers will be fired.
- The operation cannot be rolled back.
- DROP and TRUNCATE are DDL commands, whereas DELETE is a DML command.
- DELETE operations can be rolled back (undone), while DROP and TRUNCATE operations cannot be rolled back
Truncate vs Delete
Point of Difference | TRUNCATE | DELETE |
---|---|---|
Type of command | It is a DDL (data definition language) command | It is a DML (data manipulation language) command. |
Execution | While using the TRUNCATE command, the entire table is locked for the removal of all given records. A table lock is initiated for execution. | DELETE is executed with the help of a row lock. When the command is triggered, each row present in the tablespace is locked for deletion. |
Usage of WHERE clause | The WHERE clause cannot be used with the truncate clause. | The usage of WHERE clause comes in handy for the sake of selection and filtering of the rows to be deleted. Only the rows and columns specified in the WHERE condition will be deleted. |
Removal of rows | The use of truncate command will delete all the rows in a table. | The DELETE statement is responsible for removing only one row at a time rather than removing all the rows contained in the table at a single go. Every time a row is removed, its entry is recorded in the transaction log. |
Performance | As there is minimal logging in context to the truncate command, the performance is faster than the delete command. | As a log is created and maintained for each row that’s deleted, the performance of the DELETE command is slower than that of the TRUNCATE command. |
Deallocations in the transaction log | The TRUNCATE TABLE command helps in removing all the data; it does so by deallocating the data pages that are used for storing the table data. Once done, only the page deallocations are recorded in the transaction log. Triggers are not fired off, as there are no modifications taking place. TRUNCATE is a DDL command, so it doesn’t modify data; instead, it changes the table structure and its definition. | In case of the DELETE command, the DELETE trigger (if present) is fired along with the INSTEAD OF as well as the AFTER triggers for the DELETE TRIGGER (if present). Delete command being a DML command deletes the data on a row-by-row basis and the triggers are fired on the table on which the operation takes place. |
Identity column | In case the table possesses an identity column, then it will be reset to show its seed value after the truncate command has been used. | When a record is deleted, the identity column value is not reset. In other words, the value of the identity column is retained even after the DELETE command has been used. |
Permission for the use of command | To use the truncate command on a table, at least the inclusion of the ALTER permission to the table becomes a necessity. | To use the DELETE command, the DELETE permission has to be applied on the table. |
Usage of transaction space | The truncate command uses lesser transaction space in comparison to the delete statement. | More transaction space is needed as each deletion is recorded. |
Usage with indexed views | The truncate command is not capable of being used with indexed views. | Delete command can be used along with indexed views. |
Foreign key constraints | A TRUNCATE command cannot be executed in case the foreign key command constraints apply to the object that has to be deleted. | The DELETE command can be used on the records that contain foreign key constraints. |
Что такое «представление» (view) и для чего оно применяется?
Представление, View — виртуальная таблица, представляющая данные одной или более таблиц альтернативным образом. Представления широко используются когда необходимо представить структуру базы данных в удобном для восприятия человеком виде, а так же в соображениях безопасности, предоставляя пользователям возможность обращаться к данным, но не разрешая им доступ к исходным таблицам.
В действительности представление – всего лишь результат выполнения оператора , который хранится в структуре памяти, напоминающей SQL таблицу. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных. Представления значительно расширяют возможности управления данными. Это способ дать публичный доступ к некоторой (но не всей) информации в таблице.
Для создания представления используется оператор SQL CREATE и синтаксис выглядит следующим образом:
CREATE VIEW view_name AS SELECT column_name FROM table_name WHERE condition
SQL Truncate Command
SQL Truncate is a data definition language (DDL) command. It removes all rows in a table. SQL Server stores data of a table in the pages. The truncate command deletes rows by deallocating the pages. It makes an entry for the de-allocation of pages in the transaction log. It does not log each row deletion in the transaction log.
We cannot specify any condition in the SQL Truncate command. At a high level, you can consider truncate command similar to a Delete command without a Where clause. It locks the table and the pages instead of a row.
SQL Server does not show the actual execution plan of a SQL Truncate command. In the following screenshot, you can see the estimated execution plan.
Example 5: Remove all rows of Employee table using the truncate statement
The SQL truncate command is straightforward; you just need to pass the table name to remove all rows.
1 | TRUNCATETABLESQLShackDemo.dbo.Employee; |
Example 6: SQL Truncate command and identity values
In the previous example 3, we explored delete command with the identity values. Delete does not reset identity values. Let’s see how the truncate command behaves with the identity values.
First, execute the command in example 5 to delete all rows of a table.
1 | TRUNCATETABLESQLShackDemo.dbo.Employee; |
The table is empty now. Let’s insert a new record in the table.
1 | INSERTintoemployeevalues(‘bb’,’bb’,’b’,’bb’,1,555) |
You can see that Identity value again starts from 1 as defined in the table properties.
Example 7: SQL Truncate command with Rollback
In example 4, w explored to roll back a transaction with the delete command. It is a misconception among DBA’s that we cannot roll back a transaction executed with the TRUNCATE command. Is it true?
Let’s explore this again with an example.
Start a transaction to truncate the employee table.
1 |
BEGINTRAN; TRUNCATETABLESQLShackDemo.dbo.Employee; |
Once the command is completed, verify that there are no records in the table.
Now, issue the Rollback Tran command and verify the records in the table. We get our data back in the table.
It shows that we can roll back delete as well as truncated command started within a transaction.
Let’s explore the difference between the SQL Delete and SQL Truncate command in the following table.
TRUNCATE TABLE Syntax
The syntax for the SQL TRUNCATE statement is slightly different in each database.
The basic TRUNCATE statement looks the same:
- schema_name: This is optional. If your table belongs to a different schema, you specify it here.
- table_name: The name of the table to remove the data from.
However, there are several options unique to each database.
Oracle
SQL Server
MySQL
Postgres
So what do all of these parameters mean?
Oracle:
- PRESERVE MATERIALIZED VIEW LOG: Optional, and default. If you specify this, then the materialized view log will be preserved when you truncate the table.
- PURGE MATERIALIZED VIEW LOG: Optional. If you specify this, then the materialized view log will be purged when you truncate the table.
- DROP STORAGE: Optional, and default. If you specify this, all storage that is allocated to the truncated rows will be deallocated (except the space allocated by MINEXTENTS).
- REUSE STORAGE: If you specify this, all storage that is allocated to the truncated rows will remain allocated to the table.
SQL Server:
WITH PARTITIONS: Specifies the partitions to truncate or from which all rows are removed.
PostgreSQL:
- RESTART IDENTITY: Automatically restarts the sequences owned by columns of this table.
- CONTINUE IDENTITY: Does not change the values of sequences. This is the default.
- CASCADE: Automatically truncate all tables that have foreign key references to this table.
- RESTRICT: Does not truncate any tables that have foreign key references to this table. This is the default.
Пример отличия в работе TRUNCATE TABLE от DELETE
Для примера давайте создадим таблицу со столбцом идентификаторов, затем добавим в нее данные и удалим их сначала инструкцией DELETE, а потом попробуем выполнить то же самое только инструкцией TRUNCATE TABLE (предварительно пересоздав таблицу).
Создание тестовой таблицы
CREATE TABLE Goods( ProductId INT IDENTITY(1,1) NOT NULL, ProductName VARCHAR(100) NOT NULL );
Выполняем удаление с помощью DELETE
--Добавляем данные INSERT INTO Goods VALUES ('Компьютер'), ('Монитор'), ('Принтер'); --Выборка данных SELECT * FROM Goods; --Удаляем все данные инструкцией DELETE DELETE Goods; --Снова добавляем данные INSERT INTO Goods VALUES ('Компьютер'), ('Монитор'), ('Принтер'); --Выборка данных SELECT * FROM Goods;
Выполняем удаление инструкцией TRUNCATE TABLE
--Добавляем данные INSERT INTO Goods VALUES ('Компьютер'), ('Монитор'), ('Принтер'); --Выборка данных SELECT * FROM Goods; --Удаляем все данные инструкцией TRUNCATE TABLE TRUNCATE TABLE Goods; --Снова добавляем данные INSERT INTO Goods VALUES ('Компьютер'), ('Монитор'), ('Принтер'); --Выборка данных SELECT * FROM Goods;
Как видите, в первом случае счетчик не сбросился, и нумерация продолжилась, а во втором счетчик начался с самого начала.
На сегодня это все, пока!
Нравится20Не нравится
Определение DELETE
УДАЛЯТЬ это Язык обработки данных (DML) команда. Задача команды DELETE — удалить или удалить кортежи из таблицы или отношения. Используя DELETE, мы можем удалить весь кортеж со всеми значениями его атрибутов из отношения. DELETE не удаляет значение определенного атрибута кортежа из отношения.
Вы можете отфильтровать кортежи, которые хотите удалить из таблицы, используя ГДЕ пункт. если ты уточнить Предложение WHERE в операторе DELETE, тогда он удалит только кортежи, удовлетворяющие условию предложения WHERE. Но если ты не указывать предложение WHERE в операторе DELETE, тогда по умолчанию оно удаляет или исключает все кортежи из отношения. Предложение WHERE в инструкции DELETE может содержать вложенные ВЫБРАТЬ ОТ ГДЕ заявления.
Синтаксис команды DELETE следующий:
УДАЛИТЬ ИЗ table_name ГДЕ ;
Команда DELETE работает только с единственное отношение или стол за раз. Если вы хотите удалить кортеж из разных отношений, вам нужно разместить разные команды DELETE для каждого. Но удаление кортежа из одного отношения может нарушить ссылочная целостность базы данных, которую можно разрешить с помощью триггеров. Если команда DELETE нарушает ссылочную целостность, то все ссылочные триггеры (если указано) активируется, что распространяет действие удаления на кортежи другого отношения, которое относится к удаленным кортежам.
Сначала команда DELETE замок строка или кортеж, который нужно удалить, а затем удалить кортеж по одному. Следовательно, требуется больше блокировок и ресурсов, которые делают его помедленнее. Вы можете сделать изменения, сделанные оператором DELETE, постоянными, используя COMMIT, или вы можете сбросить базу данных, используя ОТКАТ.
Introduction to the SQL TRUNCATE TABLE statement
To delete all data from a table, you use the statement without a clause. For a big table that has few million rows, the statement is slow and not efficient.
To delete all rows from a big table fast, you use the following statement:
In this syntax, you specify the that you want to delete data after the clause.
Some database systems such as MySQL and PostgreSQL allow you to skip the keyword so the statement is as simple as follows:
When you issue the statement, the database system deletes all rows from the table by deallocating the data pages allocated by the table. By doing this, the RDBMS can reduce the resources for logging and the number of locks that need to acquire.
To truncate multiple tables at a time, you can use a list of comma-separated table names after the clause as follows:
Not all database systems support this form of the statement. If you are using the one that does not, you must issue multiple statements to truncate multiple tables.
SQL TRUNCATE TABLE examples
Let’s take a look at an example of truncating a table.
First, create a new table named as follows:
Second, execute the following statement as many times as you want to insert sample data into the table:
Note that if you use a database system that supports stored procedure, you can put this statement inside a loop. For example, the following stored procedure in MySQL loads data into the table with the number of rows specified by the parameter.
The following statement calls the stored procedure to insert 10,000 rows into the table.
Third, to remove all data from the , you use the following statement:
As you can see, how fast the statement is.
Now you should know how to use the statement to delete all data from a big table fast and understand the differences between the and statements.
Какие ограничения на целостность данных существуют в SQL?
sql constraint
— набор полей (1 или более), значения которых образуют уникальную комбинацию и используются для однозначной идентификации записи в таблице. Для таблицы может быть создано только одно такое ограничение. Данное ограничение используется для обеспечения целостности сущности, которая описана таблицей.
используется для ограничения множества значений, которые могут быть помещены в данный столбец. Это ограничение используется для обеспечения целостности предметной области, которую описывают таблицы в базе.
обеспечивает отсутствие дубликатов в столбце или наборе столбцов.
защищает от действий, которые могут нарушить связи между таблицами. в одной таблице указывает на в другой. Поэтому данное ограничение нацелено на то, чтобы не было записей , которым не отвечают записи .
Оператор DELETE стр. 1
Оператор DELETE удаляет строки из временных или постоянных базовых таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:
Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-SQL (T-SQL) — процедурное расширение языка SQL, используемое для программирования на стороне сервера в Microsoft SQL Server и Sybase ASE. Transact-SQL также выполнить с помощью команды
Однако есть ряд особенностей в реализации команды TRUNCATE TABLE , которые следует иметь в виду:
не журнализируется удаление отдельных строк таблицы; в журнал записывается только освобождение страниц, которые были заняты данными таблицы;
не отрабатывают триггеры, в частности, триггер на удаление;
команда неприменима, если на данную таблицу имеется ссылка по внешнему ключу, и даже если внешний ключ имеет опцию каскадного удаления.
значение счетчика ( IDENTITY ) сбрасывается в начальное значение.
Требуется удалить из таблицы Laptop все портативные компьютеры с размером экрана менее 12 дюймов.
Все блокноты можно удалить с помощью оператора
Transact-SQL расширяет синтаксис оператора DELETE , вводя дополнительное предложение FROM :
При помощи источника табличного типа можно конкретизировать данные, удаляемые из таблицы в первом предложении FROM .
При помощи этого предложения можно выполнять соединения таблиц, что логически заменяет использование подзапросов в предложении WHERE для идентификации удаляемых строк. Поясним сказанное на примере.
Пусть требуется удалить те модели ПК из таблицы Product, для которых нет соответствующих строк в таблице PC.
Используя стандартный синтаксис, эту задачу можно решить следующим запросом:
Заметим, что предикат type = ‘pc’ необходим здесь, чтобы не были удалены также модели принтеров и портативных компьютеров.
Эту же задачу можно решить с помощью дополнительного предложения FROM следующим образом:
What is a DELETE Command?
Delete is a DML or Data Manipulation Command that is used to delete particular records from a table. It deletes the complete row from the table and produces the number of deleted rows as output. You can use the WHERE clause with the DELETE command to delete specific records from the table.
PCP in Business Analysis
In partnership with Purdue UniversityVIEW COURSE
After executing this command, you cannot recover the deleted records. Therefore, you should have a database backup before executing this command.
Below is the syntax for the DELETE command to remove data from the table:
DELETE FROM table_name WHERE condition;
Now, understand this with the help of an example.
You will create a table named players and insert a few records on the table.
create table players (player_id int, name varchar(20),
country varchar(20), goals int);
insert into players (player_id, name, country, goals)
values (101, ‘Sam’, ‘USA’, 6),
(103, ‘Daniel’, ‘England’, 7),
(104, ‘Anthony’, ‘France’, 10),
(102, ‘Bruno’, ‘Sweden’, 6),
(105, ‘Alex’, ‘Wales’, 5),
(106, ‘Matt’, ‘Scotland’, 3);
Select * from players;
Now you must write a query to delete the last record with player_id = 106.
Delete from players where player_id = 106;
The SQL query mentioned above will remove the last row, i.e. with player_id = 106, from the players’ table.
Что такое агрегатные и скалярные функции?
Агрегатная функция выполняет вычисление над набором значений и возвращает одно значение. В табличной модели данных это значит, что функция берет ноль, одну или несколько строк для какой-то колонки и возвращает единственное значение. Для сравнения — скалярные функции принимают на вход одно значение и возвращают одно значение.
Примеры агрегатных функций:
- AVG() – Функция вычисляет среднее значение
- MAX() – Функция вычисляет элемент с максимальным значением
- MIN() – Функция вычисляет элемент с минимальным значением
- SUM() – Функция суммирует значения
Примеры скалярных функций:
- LEN() – Функция вычисляет общую длину поля
- MID() – Функция извлекает подстроки из набора строковых значений в таблице
- RAND() – Функция генерирует случайный набор чисел заданной длины
- NOW() – Функция возвращает текущую дату и время
Другие инструкции и предложения Transact-SQL для модификации таблиц
Сервер SQL Server поддерживает следующие дополнительные инструкции и предложения для модификации таблиц:
-
инструкцию TRUNCATE TABLE;
-
инструкцию MERGE;
-
предложение OUTPUT.
Эти инструкции и предложение рассматриваются в последующих подразделах.
Инструкция TRUNCATE TABLE
Инструкция TRUNCATE TABLE является более быстрой версией инструкции DELETE без предложения WHERE. Эта инструкция удаляет все строки таблицы более быстро, чем инструкция DELETE, поскольку она удаляет содержимое постранично, тогда как инструкция DELETE делает это построчно. Инструкция TRUNCATE TABLE является расширением Transact-SQL стандарта SQL. Еще одним важным отличием этой инструкции является то, что она сбрасывает индекс столбца, для которого указано свойство автоинкремента IDENTITY.
Инструкция TRUNCATE TABLE имеет следующий синтаксис:
Инструкция MERGE
Инструкция MERGE объединяет последовательность инструкций INSERT, UPDATE и DELETE в одну элементарную инструкцию, в зависимости от существования записи (строки). Иными словами, можно синхронизировать две разные таблицы, чтобы модифицировать содержимое таблицы назначения в зависимости от различий, обнаруженных в таблице-источнике.
Основной областью применения для инструкции MERGE является среда хранилищ данных, где таблицы необходимо периодически обновлять, чтобы отражать новые данные, прибывающие с систем оперативной обработки транзакций OLTP (On-Line Transaction Processing). Эти данные могут содержать изменения существующих строк таблиц и/или новый строки, которые нужно вставить в таблицы. Если строка в новых данных соответствует записи, которая уже имеется в таблице, выполняется инструкция UPDATE или DELETE. В противном случае выполняется инструкция INSERT.
Альтернативно, вместо инструкции MERGE можно использовать последовательность инструкций INSERT, UPDATE и DELETE, в которых для каждой строки решается, какую операцию выполнять: вставку, удаление или обновление. Но этот подход имеет значительный недостаток, связанный с производительностью: в нем требуется выполнять несколько проходов по данным, а данные обрабатываются по принципу «запись за записью».
Предложение OUTPUT
По умолчанию единым видимым результатом выполнения инструкции INSERT, UPDATE или DELETE является только сообщение о количестве модифицированных строк, например «3 rows DELETED» (удалены 3 строки) и система не сохраняет информацию о модифицированных данных. Если такой видимый результат не удовлетворяет вашим требованиям, то можно использовать предложение OUTPUT, которое выводит модифицированные, вставленные или удаленные строки.
Предложение OUTPUT также применимо с инструкцией MERGE, для которой оно выводит все модифицированные строки в виде таблицы.
Результаты выполненных операций соответствующих инструкций предложение OUTPUT выводит в таблицах inserted и deleted. Кроме этого, чтобы
заполнить таблицы, в предложении OUTPUT требуется использовать выражение INTO. Поэтому для сохранения результата используется табличная переменная.
В примере ниже показано использование инструкции OUTPUT с инструкцией DELETE:
При условии, что содержимое таблицы находится в исходном состоянии, выполнение запроса в примере дает следующий результат:
В этом примере сначала объявляется табличная переменная @deleteTable с двумя столбцами: Id и LastName. В этой таблице будут сохранены удаленные строки. Синтаксис инструкции DELETE расширен предложением OUTPUT: «OUTPUT deleted.Id, deleted.LastName INTO @deleteTable». Посредством этого предложения система сохраняет удаленные строки в таблице deleted, содержимое которой потом копируется в переменную @deleteTable.
В примере ниже показано использование предложения OUTPUT в инструкции UPDATE:
Результат выполнения этого запроса:
Что такое «триггер»?
Триггер (trigger) — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных: добавлением, удалением или изменением данных в заданной таблице реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически и все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.
Момент запуска триггера определяется с помощью ключевых слов (триггер запускается до выполнения связанного с ним события) или (после события). В случае, если триггер вызывается до события, он может внести изменения в модифицируемую событием запись. Кроме того, триггеры могут быть привязаны не к таблице, а к представлению (VIEW). В этом случае с их помощью реализуется механизм «обновляемого представления». В этом случае ключевые слова и влияют лишь на последовательность вызова триггеров, так как собственно событие (удаление, вставка или обновление) не происходит.
Напишите запрос…
CREATE TABLE table ( id BIGINT(20) NOT NULL AUTO_INCREMENT, created TIMESTAMP NOT NULL DEFAULT , PRIMARY KEY (id) );
Требуется написать запрос который вернет максимальное значение и значение для этого :
SELECT id, created FROM table where id = (SELECT MAX(id) FROM table);
CREATE TABLE track_downloads ( download_id BIGINT(20) NOT NULL AUTO_INCREMENT, track_id INT NOT NULL, user_id BIGINT(20) NOT NULL, download_time TIMESTAMP NOT NULL DEFAULT , PRIMARY KEY (download_id) );
Напишите SQL-запрос, возвращающий все пары , удовлетворяющие следующему условию: — общее ненулевое число пользователей, сделавших ровно скачиваний :
SELECT DISTINCT download_count, COUNT(*) AS user_count FROM ( SELECT COUNT(*) AS download_count FROM track_downloads WHERE download_time="2010-11-19" GROUP BY user_id) AS download_count GROUP BY download_count;
Как узнать количество записей в SQL-выборке
Очень часто нам не требуется извлекать данные из таблицы, однако, нам необходимо узнать количество записей в определённой SQL-выборке, в частном случае, количество записей в таблице. Вот как узнать количество записей в SQL-выборке, я расскажу в этой небольшой статье.
На самом деле всё очень просто, и нам нужна всего лишь функция COUNT():
SELECT COUNT(*) FROM `table` WHERE `field_1`=’value_1′
После выполнения данного запроса будет возвращён result_set, в котором будет храниться массив, содержащий элемент COUNT(*) со значением количества записей в таблице «table«, где поле «field_1» имеет значение «value_1«.
Другой пример. Допустим, надо узнать просто количество записей. Тогда то же самое, но без WHERE:
SELECT COUNT(*) FROM `table`
И давайте, напоследок, подкину ещё один пример. Допустим, Вам необходимо подсчитать количество уникальных записей в таблице:
SELECT COUNT(DISTINCT `field_1`) FROM `table`
Вот такой нехитрой функцией COUNT() можно легко узнавать количество записей в SQL-выборке, не извлекая при этом сами записи и экономя ресурсы.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья : http://vk.com/myrusakov.Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 45 ):
Михаил, здравствуйте! Хотел бы попросить у Вас помощи. Почему на реальном хостинге этот запрос не работает $res_articles = $mysqli->query(«SELECT id,title,cp_title,description,images,author,DATE_FORMAT(date,’%d %M %Y’) as date FROM articles WHERE tg=’0′ ORDER BY id DESC LIMIT $shift,$num_data»); Проблема в — LIMIT $shift,$num_data — не пойму почему не работает с переменными! Перепробовал все варианты, уже два дня голову ломаю :((( Если Вас не затруднит можете дать совет.
Вряд ли дело в хостинге, Вы проверьте значения переменных shift и num_data. А также «не работает» понятие растяжимое. Выдаются ли какие-нибудь ошибки? Или просто пустой результат выходит?
Пустой результат, но когда убираю LIMIT $shift,$num_data или пишу вместо переменных LIMIT 2, 5 то всё ОК. А может переменные привести к числу через integer?
Тогда проблема в значении переменных, можете ещё попробовать через соединение строк: «LIMIT «.$shift.», «.$num_data
Я так пробовал всё равно пустой результат, но в переменных лежат числа я проверял конечно я не проверял на int
Посмотрите, что в этой строке (всё ли правильно): echo «SELECT id,title,cp_title,description,images,author,DATE_FORMAT(date,’%d %M %Y’) as date FROM articles WHERE tg=’0′ ORDER BY id DESC LIMIT $shift,$num_data»;
Сейчас проверяю, главное что на localhoste всё работает
Вывод после echo — SELECT id,title,cp_title,description,author,images,DATE_FORMAT(date,’%d %M %Y’) as date FROM articles WHERE tg=’0′ ORDER BY id DESC LIMIT -10,10.
Видите, что запрос неправильный? Вот и подумайте, почему -10 подставляется.
Спасибо Михаил за помощь разобрался просто в функции не изменил один параметр
DROP
The SQL DROP command is used to drop the whole table. In other words, it deletes the entire records as well as the schema and structure of the table along with its named elements. The DROP command is a Data Definition Language (DDL) command. In addition, this command can also be used to drop databases. Databases or tables once dropped are wiped out of existence and cannot be recovered.
DROP Command Syntax:
DROP TABLE Table_Name;
1 | DROP TABLE Table_Name; |
Example Queries:
This query will drop the table Student from the database
DROP TABLE Student;
1 | DROP TABLE Student; |
This query drops/deletes the entire Database School.
DROP DATABASE School;
1 | DROP DATABASE School; |
What is Delete command in SQL?
Delete is another SQL command available for removing records from the table. Delete is even more flexible than truncate like it provides support to WHERE Clause which can be used to remove selective data.
It logs each row which allows an operation to be rolled back and it also fires triggers. One disadvantage of using delete is speed and locking. Delete acquires a lock on the table and its also very slow operation because of logging, which makes it unsuitable for removing records from large tables.
One workaround for this is batch-delete in which you remove a batch of records instead on one record at a time.
Delete is most suitable for removing selective data and use it where you want to roll back the transaction in the database. It’s not useful to purge a large amount of data from tables and should not be used, otherwise, it could lock the table for a very long time, blew log segment, and can take ages to complete.
Example of delete commands in SQL
delete * from Orders; //delete all row from Orders, should not be used if Orders is large
delete * from Orders where Symbol=»MSFT.NQ» //delete all orders where symbol is MSFT.NQ