!!SQL Syntax Notes

!Basic Select Statement

{{{
SELECT * FROM table;

SELECT col1, col2 FROM table;

SELECT * FROM table WHERE col1 = 'ABC';

SELECT * FROM table WHERE col1 IS NULL;

SELECT * FROM table WHERE col1 = 'ABC' ORDER BY col1, col2;

SELECT * FROM table WHERE col1 <> 'ABC' ORDER BY col1 DESC;

SELECT DISTINCT col1, col2 FROM table;

SELECT COUNT(*) FROM table WHERE col1 = 'ABC';

SELECT col1, col2 FROM tbl1, tbl2 WHERE tbl1.col3 = tbl2.col3;

SELECT a.col1, b.col2 FROM tbl1 a, tbl2 b WHERE a.col3 = b.col3;
}}}

!Changing Data

{{{
UPDATE table SET field=value;    --  this changes every record!

UPDATE table SET field=value WHERE keyfield = keyvalue;

UPDATE table SET field=value WHERE EXISTS (SELECT field2 FROM table2 WHERE table.field = table2.field2);
}}}

!Deleting Data

{{{
DELETE FROM table;    --  this deletes every record!

DELETE FROM table WHERE keyfield = keyvalue;
}}}

!Adding Data

{{{
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3);
}}}

!Creating and Altering a Table

{{{
CREATE TABLE table (
    col1 CHARACTER(5) NOT NULL PRIMARY KEY,
    col2 VARCHAR(30),
    col3 INTEGER UNIQUE,
    col4 INTEGER DEFAULT 0 NOT NULL,
    col5 DOUBLE PRECISION,
    col6 SMALLINT,
    col7 TIMESTAMP,
    CONSTRAINT cname PRIMARY KEY (col1, col2),
    CONSTRAINT cname UNIQUE (col2, col3),
    CONSTRAINT cname FOREIGN KEY (col1) REFERENCES other_table (ocol1),
    CONSTRAINT cname CHECK (col3 > 4)
);

DROP TABLE table;

CREATE [UNIQUE] INDEX name ON table (col1, col2);

CREATE [UNIQUE] INDEX name ON table (lower(col1), col2);

DROP INDEX name;

ALTER TABLE table ADD COLUMN newcol VARCHAR(20);

ALTER TABLE table DROP COLUMN oldcol;

ALTER TABLE table ALTER COLUMN col SET DEFAULT val;

ALTER TABLE table ALTER COLUMN col DROP DEFAULT;
}}}