← SQL EnglishChapter 09 of 13

Table Operations

## Learning Objectives - Create and modify tables - Add and modify columns - Use indexes effectively - Drop tables safely ## CREATE TABLE ### Basic Syntax ```sql CREATE TABLE employees ( employee_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT UNIQUE, hire_date DATE, salary DECIMAL(10, 2) ); ``` ### Data Types | Type | Description | |------|-------------| | INTEGER | Whole numbers | | REAL | Decimal numbers | | TEXT | Character strings | | DATE | Date values | | DATETIME | Date and time | | BOOLEAN | True/false | | BLOB | Binary data | ### Database-Specific Types ```sql -- MySQL VARCHAR(255) INT BIGINT DECIMAL(10,2) -- PostgreSQL VARCHAR(255) INT BIGSERIAL NUMERIC(10,2) SERIAL -- SQL Server VARCHAR(255) INT DECIMAL(10,2) ``` ## ALTER TABLE ### Add Column ```sql ALTER TABLE employees ADD COLUMN phone VARCHAR(20); ``` ### Add Multiple Columns ```sql ALTER TABLE employees ADD COLUMN phone VARCHAR(20), ADD COLUMN address TEXT; ``` ### Drop Column ```sql ALTER TABLE employees DROP COLUMN phone; ``` ### Modify Column ```sql -- PostgreSQL ALTER TABLE employees ALTER COLUMN email TYPE VARCHAR(100); -- MySQL ALTER TABLE employees MODIFY COLUMN email VARCHAR(100); -- SQL Server ALTER TABLE employees ALTER COLUMN email VARCHAR(100); ``` ### Rename Column ```sql -- PostgreSQL ALTER TABLE employees RENAME COLUMN first_name TO given_name; -- MySQL ALTER TABLE employees CHANGE first_name given_name VARCHAR(50); ``` ### Rename Table ```sql ALTER TABLE employees RENAME TO staff; ``` ## DROP TABLE ### Basic Drop ```sql DROP TABLE employees; ``` ### Drop If Exists ```sql DROP TABLE IF EXISTS employees; ``` ### CASCADE ```sql -- Drop and dependent objects DROP TABLE employees CASCADE; ``` ### Safety First ```sql -- Always check dependencies first SELECT * FROM information_schema.table_constraints WHERE table_name = 'employees'; ``` ## Indexes ### Create Index ```sql CREATE INDEX idx_department ON employees(department); ``` ### Composite Index ```sql CREATE INDEX idx_dept_salary ON employees(department, salary DESC); ``` ### UNIQUE Index ```sql CREATE UNIQUE INDEX idx_email ON employees(email); ``` ### When to Index - Columns used in WHERE clauses - Columns used in JOIN conditions - Columns used in ORDER BY - Columns with high cardinality (many unique values) ### Drop Index ```sql DROP INDEX idx_department; ``` ## CREATE TABLE ... AS ### Copy Table Structure and Data ```sql CREATE TABLE employees_backup AS SELECT * FROM employees; ``` ### Copy with Filter ```sql CREATE TABLE sales_employees AS SELECT * FROM employees WHERE department = 'Sales'; ``` ### Structure Only (No Data) ```sql CREATE TABLE employees_archive AS SELECT * FROM employees WHERE 1 = 0; ``` ## TRUNCATE ### Remove All Rows ```sql TRUNCATE TABLE employees; ``` ### Faster than DELETE - No transaction log per row - Cannot be rolled back - Resets auto-increment counters ### CASCADE with TRUNCATE ```sql TRUNCATE TABLE employees CASCADE; ``` ## Temporary Tables ### Session Table ```sql CREATE TEMPORARY TABLE temp_results ( id INTEGER, name TEXT ); -- Auto-deleted when session ends ``` ### PostgreSQL ```sql CREATE TEMP TABLE temp_data AS SELECT * FROM source_table WHERE condition; ``` ## Column Constraints ### NOT NULL ```sql CREATE TABLE example ( name TEXT NOT NULL ); ``` ### UNIQUE ```sql CREATE TABLE example ( email TEXT UNIQUE ); ``` ### PRIMARY KEY ```sql CREATE TABLE example ( id INTEGER PRIMARY KEY, name TEXT ); ``` ### DEFAULT ```sql CREATE TABLE example ( created_at DATE DEFAULT CURRENT_DATE, status TEXT DEFAULT 'active' ); ``` ### CHECK ```sql CREATE TABLE example ( age INTEGER CHECK (age >= 0), salary DECIMAL CHECK (salary > 0) ); ``` ## Summary - **CREATE TABLE**: Define new tables with columns and constraints - **ALTER TABLE**: Modify existing table structure - **DROP TABLE**: Remove tables (use IF EXISTS) - **Indexes**: Speed up queries on large tables - **TRUNCATE**: Fast way to delete all rows - **Temporary tables**: Session-scoped storage - Use **constraints** to enforce data integrity

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →