CREATE DATABASE message_boards;CREATE TABLE users ( user_id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, username VARCHAR ( 25 ) UNIQUE NOT NULL. full_name TEXT NOT NULL, -- TEXT has no upper bound last_login TIMESTAMP);INSERT INTO users (username, email, full_name) VALUES ('...', ..., NOW());SELECT * FROM users;SELECT username, last_login FROM users LIMIT 5;SELECT username, email FROM users WHERE user_id=150SELECT username, email FROM users WHERE last_login IS NULL AND created_on < NOW() - interval '6 months' LIMIT 10;SELECT username, email FROM users ORDER BY created_on DESC LIMIT 10;SELECT COUNT(*) FROM users; -- * counts all rows included those with NULL
JOIN
CREATE TABLE comments ( user_id INT REFERENCES users(user_id) ON DELETE CASCADE -- or SET NULL)SELECT comment_id, user.username, LEFT(comment, 20) -- users. can be omittedAS preview FROM commentsINNER JOIN usersON comments.user_id=users.user_idWHERE borad_id=39;SELECT comment_id, username, LEFT(comment, 20) -- users. can be omittedAS preview FROM commentsNATURAL INNER JOIN users -- if you know columns names matchWHERE borad_id=39;
INNER/LEFT/RIGHT/OUTER/FULL OUTER/CROSS JOIN
GROUP
SELECT board_name, COUNT(comment_id) AS comment_countFROM commentsNATURAL RIGHT JOIN boards -- RIGHT JOIN to include those without commentsGROUP BY board.board_nameORDER BY comment_count ASCLIMIT 10;