SQL
Reading
SQL Commands
CREATE TABLE
This command creates a new table
CREATE TABLE "TableNameGoesHere" ("ColumnOneNameGoesHere" TEXT,"ColumnTwoNameGoesHere" TEXT,);
Example:
CREATE TABLE "Books" ("Title" TEXT NOT NULL,"PrimaryAuthor" TEXT,"YearPublished" INT,);
Column types
These are the most common column types, but they certainly aren't the only ones.
| Type | Description |
|---|---|
| CHAR(N) | A "string" that stores up to N characters, the rest padded with spaces. |
| VARCHAR(N) | A "string" that stores up to N characters, the rest is NOT padded with spaces. |
| TEXT | A "string" that can store a very long string of characters and is the most flexible. |
| INT | Stores an integer value. |
| NUMERIC | Stores a number with values of any precision and scale that can be stored. |
| BOOLEAN | Stores a true or false value. |
| DATE | Stores a year, month, and day together. Use YYYY-MM-DD format such as '2020-07-04' when adding data. |
| TIMESTAMP | Stores a precise time, Use YYYY-MM-DD HH:MM:DD format such as '2020-07-04 15:45:12 when adding data. |
NULL versus NOT NULL
By default all the column types above are NULLable meaning that you do not
have to specify a value and thus can be the special value NULL that means
"lacks a value".
If you want a column that must be supplied, add NOT NULL to its specification.
Example:
CREATE TABLE "Books" ("Title" TEXT NOT NULL,"PrimaryAuthor" TEXT,"YearPublished" INT,);
PRIMARY KEY
To create a primary key column we add the qualifier PRIMARY KEY. It is also
useful to use the SERIAL type which creates an automatically increasing
integer for each row inserted. This allows us to omit that column and allow
the database to supply it and automatically keep track of it.
CREATE TABLE "Books" ("Id" SERIAL PRIMARY KEY"Title" TEXT NOT NULL,"PrimaryAuthor" TEXT,"YearPublished" INT,);
INSERT data
To insert data we can use the INSERT INTO command.
NOTE: Notice textual values are surrounded by SINGLE quotes.
Format:
INSERT INTO "TableName" ("ColumnA", "ColumnB", "ColumnC")VALUES ('columnAValue', 'columnBValue', 'columnCValue');
For an example of inserting data into our Books table:
INSERT INTO "Books" ("Title", "PrimaryAuthor", "YearPublished", "Genre")VALUES ('Night of the Living Dummy', 'R. L. Stine', 1993, 'horror');INSERT INTO "Books" ("Title", "PrimaryAuthor", "YearPublished", "Genre")VALUES ('The Lost World', 'Michael Crichton', 1995, 'sci-fi');
SELECT data
To select data:
SELECT <column name(s)>FROM <table name>
Example:
SELECT "Title", "YearPublished"FROM "Books";
You can also use the special name * to mean All Columns.
SELECT *FROM "Books";
We can also do computations with SELECT
To see the number of books:
SELECT COUNT(*)FROM "Books";
To see the average, largest, and smallest year of publication
SELECT AVG("YearPublished"), MAX("YearPublished"), MIN("YearPublished")FROM "Books";
SELECT data but limit the rows to return
Using a WHERE clause we can limit which rows are selected.
For example, to see all the books published before 1990 we use:
SELECT *FROM "Books"WHERE "YearPublished" < 1990
To see all the books published by Michael Crichton:
SELECT *FROM "Books"WHERE "PrimaryAuthor" = 'Michael Crichton';
SELECT data but order the results
The data from a SELECT statement will come back in an unpredictable order.
Even though running the same SELECT twice may give the data in the same order,
it is not guaranteed.
To specify an order:
SELECT *FROM "Books"ORDER BY "Genre";
You can also order descending:
SELECT *FROM "Books"ORDER BY "Genre" DESC;
The ORDER BY can also order numeric types.
UPDATE existing data
To change a value in existing rows we use the UPDATE command. The UPDATE
command will make the changes specified in the SET statements for ALL rows
that match the WHERE
Format:
UPDATE "TableName"SET "ColumnA" = 'new value'WHERE "ColumnB" = 'some value'
Example:
Word of warning, if the
WHEREclause is left off, then all rows will be updated.
Example, change the Genre into children horror for all the books where the
PrimaryAuthor is R. L. Stine
UPDATE "Books" SET "Genre" = 'children horror' WHERE "PrimaryAuthor" = 'R. L. Stine';
NOTE: You can apply multiple changes with the SET command
UPDATE "Books" SET "Genre" = 'children horror', "YearPublished" = 1995 WHERE "PrimaryAuthor" = 'R. L. Stine';
DELETE existing data
We use the DELETE statement to remove multiple rows from the database.
Format:
DELETEFROM "TableName"WHERE "ColumnB" = 'some value'
Example:
Word of warning, if the
WHEREclause is left off, then all rows will be deleted.
Example, to delete all the rows where the PrimaryAuthor is R. L. Stine
DELETE FROM "Books" WHERE "PrimaryAuthor" = 'R. L. Stine';
ALTER TABLE - Renaming a table
We can rename a table if we use the wrong name.
Example of renaming a table:
ALTER TABLE "Band" RENAME TO "Bands";
ALTER TABLE "OldName" RENAME TO "NewName";
ALTER TABLE - Adding a column, Renaming a Column, Changing a Type
The structure of our tables is not set in stone. They can be modified at a later
date by using the ALTER TABLE query.
Example of adding a column:
ALTER TABLE "Books" ADD COLUMN "Genre" VARCHAR(15);
Example of renaming a column:
ALTER TABLE "Books" RENAME COLUMN "Genre" TO "SpecificGenre";
Example of changing a column data type:
ALTER TABLE table_name ALTER COLUMN column_name TYPE new_data_type;
To change our YearPublished to a TEXT column:
ALTER TABLE "Books" ALTER COLUMN "YearPublished" TYPE TEXT;
FOREIGN KEYS - Adding to an existing table
To add a foreign key to an existing table:
ALTER TABLE "ExistingTableNameHere" ADD COLUMN "SingularNameOfOtherTableFollowedById" INTEGER NULL REFERENCES "NameOfOtherTableHere" ("Id");
Example of adding a column to Books to relate to the Ratings table.
ALTER TABLE "Books" ADD COLUMN "RatingId" INTEGER NULL REFERENCES "Ratings" ("Id");
FOREIGN KEYS - Adding to the list of columns when you CREATE a table
CREATE TABLE "Books" ("Id" SERIAL PRIMARY KEY"Title" TEXT NOT NULL,"PrimaryAuthor" TEXT,"YearPublished" INT,"RatingId" INTEGER REFERENCES "Ratings" ("Id"),);