DDL vs. DML#
SQL statements are broadly categorized into two groups: Data Definition Language (DDL) and Data Manipulation Language (DML).
DDL#
DDL is a set of commands used to create, modify, and delete database objects such as tables, views, indexes, and constraints. Here are a few DDL commands:
CREATE: Create new database objects such as tables.ALTER: Modify existing database objects such as adding or removing columns from the table.DROP: Delete a database object such as a table or index.TRUNCATE: Delete all data from a table without deleting the table itself.RENAME: Rename an existing database object, like a table or column.
-- Create table
CREATE TABLE fruits_price (
    fruit varchar(255),
    price float
);
CREATE TABLE exchange_rate (
    from_cur varchar(255),
    to_eur varchar(255),
    rate float
);
-- Add column
ALTER TABLE fruits_price
ADD COLUMN category varchar(255) AFTER price;
-- Drop table
DROP TABLE exchange_rate;
-- Truncate table
TRUNCATE TABLE fruits_price;
-- Rename column
ALTER TABLE fruits_price
CHANGE price price_eur float;
DML#
DML is a set of commands used to manipulate the data. Here are a few DML commands:
SELECT: Retrieve data from tables or views.INSERT: Add one or more records to a table.UPDATE: Modify data of one or more records.DELETE: Remove one or more records from the table.MERGE: Handle inserts, updates, and deletes all in a single transaction without writing separate logic for each of these.
-- Select
SELECT 'Select statement' as '';
SELECT * FROM fruits_price;
-- Insert
SELECT 'INSERT/UPDATE/DELETE statement' as '';
INSERT INTO fruits_price (fruit, price)
VALUES ('blueberry',7.0);
-- Update
UPDATE fruits_price
SET price = 1.5
WHERE fruit = 'apple';
-- Delete
DELETE FROM fruits_price
WHERE fruit = 'banana';
SELECT * FROM fruits_price;
-- MYSQL doesn't support merge, here is the alternative
SELECT 'REPLACE(MERGE) statement' as '';
CREATE TABLE src_fruits_price (
    fruit varchar(255),
    price float
);
INSERT INTO src_fruits_price (fruit, price) -- create a source table
VALUES ('watermelon', 7.0), ('lime', 3.5);
REPLACE INTO fruits_price (fruit, price)
SELECT fruit,price FROM src_fruits_price;
SELECT * FROM fruits_price;