PostgreSQL Queries
INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...);-
table_name:要插入数据的表名。
-
column1, column2, …:要插入数据的列名。如果省略列名,默认会插入所有列的值。
-
value1, value2, …:对应列的新值。
示例 1:插入单行数据
Section titled “示例 1:插入单行数据”假设你想插入一个新学生记录:
INSERT INTO students (first_name, last_name, class, email, phone_number, address)VALUES ('张', '三', '一班', 'zhangsan@example.com', '13800138001', '北京市朝阳区');示例 2:插入多行数据
Section titled “示例 2:插入多行数据”假设你想一次性插入多条学生记录:
INSERT INTO students (first_name, last_name, class, email, phone_number, address)VALUES('李', '四', '二班', 'lisi@example.com', '13800138002', '上海市浦东新区'),('王', '五', '三班', 'wangwu@example.com', '13800138003', '广州市天河区'),('赵', '六', '四班', 'zhaoliu@example.com', '13800138004', '深圳市南山区');示例 3:插入数据时省略列名
Section titled “示例 3:插入数据时省略列名”如果插入的值与表中列的顺序完全一致,并且没有遗漏任何列,可以省略列名:
INSERT INTO studentsVALUES (DEFAULT, '孙', '八', '五班', 'sunba@example.com', '13900139001', '成都市武侯区');- 这里使用了
DEFAULT关键字,表示让 PostgreSQL 自动生成id的值(因为id是SERIAL类型,会自动递增)。
示例 4:插入数据时使用子查询
Section titled “示例 4:插入数据时使用子查询”你还可以使用子查询来插入数据。例如,假设你想将 students 表中 class 为 '一班' 的学生复制到另一个表 students_backup 中:
INSERT INTO students_backup (first_name, last_name, class, email, phone_number, address)SELECT first_name, last_name, class, email, phone_number, addressFROM studentsWHERE class = '一班';DELETE FROM table_nameWHERE condition;-
table_name:要删除数据的表名。
-
condition:用于指定哪些行需要被删除的条件。如果省略
WHERE子句,表中的所有行都会被删除。
示例 1:删除单行数据
Section titled “示例 1:删除单行数据”假设你想删除 id 为 1 的学生记录:
DELETE FROM studentsWHERE id = 1;示例 2:删除多行数据
Section titled “示例 2:删除多行数据”假设你想删除所有 class 为 '一班' 的学生记录:
DELETE FROM studentsWHERE class = '一班';示例 3:删除所有数据
Section titled “示例 3:删除所有数据”如果你想删除表中的所有记录(清空表):
DELETE FROM students;SELECT column1, column2, ...FROM table_nameWHERE condition;-
column1, column2, …:要检索的列名。如果需要检索所有列,可以使用
*。 -
table_name:要查询的表名。
-
condition:用于筛选数据的条件。
示例 1:查找所有学生
Section titled “示例 1:查找所有学生”检索表中的所有列和所有行:
SELECT * FROM students;示例 2:按条件查找
Section titled “示例 2:按条件查找”查找 class 为 '一班' 的学生:
SELECT * FROM studentsWHERE class = '一班';示例 3:查找特定列
Section titled “示例 3:查找特定列”只检索 first_name 和 last_name 列:
SELECT first_name, last_nameFROM studentsWHERE class = '一班';示例 4:使用比较运算符
Section titled “示例 4:使用比较运算符”查找年龄大于 18 的学生:
SELECT * FROM studentsWHERE age > 18;示例 5:使用逻辑运算符
Section titled “示例 5:使用逻辑运算符”查找 class 为 '一班' 且年龄大于 18 的学生:
SELECT * FROM studentsWHERE class = '一班' AND age > 18;查找 class 为 '一班' 或 '二班' 的学生:
SELECT * FROM studentsWHERE class = '一班' OR class = '二班';示例 6:使用 IN 运算符
Section titled “示例 6:使用 IN 运算符”查找 class 为 '一班'、'二班' 或 '三班' 的学生:
SELECT * FROM studentsWHERE class IN ('一班', '二班', '三班');示例 7:使用 LIKE 运算符
Section titled “示例 7:使用 LIKE 运算符”查找 email 以 'example.com' 结尾的学生:
SELECT * FROM studentsWHERE email LIKE '%example.com';示例 8:使用 BETWEEN 运算符
Section titled “示例 8:使用 BETWEEN 运算符”查找年龄在 18 到 25 之间的学生:
SELECT * FROM studentsWHERE age BETWEEN 18 AND 25;示例 9:使用 IS NULL 和 IS NOT NULL
Section titled “示例 9:使用 IS NULL 和 IS NOT NULL”查找 phone_number 为空的学生:
SELECT * FROM studentsWHERE phone_number IS NULL;查找 phone_number 不为空的学生:
SELECT * FROM studentsWHERE phone_number IS NOT NULL;示例 10:使用 ORDER BY 排序
Section titled “示例 10:使用 ORDER BY 排序”查找所有学生,并按 age 升序排序:
SELECT * FROM studentsORDER BY age ASC;示例 11:使用 LIMIT 和 OFFSET
Section titled “示例 11:使用 LIMIT 和 OFFSET”查找前 5 名学生:
SELECT * FROM studentsLIMIT 5;跳过前 5 名学生,查找接下来的 5 名学生:
SELECT * FROM studentsOFFSET 5 LIMIT 5;示例12: 使用 DISTINCT
Section titled “示例12: 使用 DISTINCT”用于从查询结果中去除重复的行,只返回唯一的记录
去除重复的 class 列
SELECT DISTINCT classFROM students;-
索引优化:如果表中的数据量较大,且经常需要按某个条件查询,可以为该列创建索引以提高查询性能。例如:
CREATE INDEX idx_students_class ON students (class); -
使用别名:在复杂的查询中,可以为表和列使用别名,以简化查询语句。例如:
SELECT s.first_name, s.last_nameFROM students AS sWHERE s.class = '一班'; -
组合条件:可以使用括号来明确指定条件的优先级,避免歧义。例如:
SELECT * FROM studentsWHERE (class = '一班' OR class = '二班') AND age > 18; -
性能分析:如果查询性能不佳,可以使用
EXPLAIN或EXPLAIN ANALYZE来分析查询计划,找出性能瓶颈。例如:EXPLAIN ANALYZE SELECT * FROM students WHERE class = '一班';
UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;-
table_name:要更新的表名。
-
column1, column2, …:要更新的列名。
-
value1, value2, …:要设置的新值。
-
condition:用于指定哪些行需要更新的条件。如果省略
WHERE子句,表中的所有行都会被更新。
示例 1:更新单行数据
Section titled “示例 1:更新单行数据”假设你想更新 id 为 1 的学生的 email 和 phone_number:
UPDATE studentsSET email = 'newemail@example.com', phone_number = '13800138001'WHERE id = 1;示例 2:更新多行数据
Section titled “示例 2:更新多行数据”假设你想将所有 class 为 '一班' 的学生的 class 更新为 '一年级一班':
UPDATE studentsSET class = '一年级一班'WHERE class = '一班';示例 3:更新所有行
Section titled “示例 3:更新所有行”如果你想将所有学生的 address 设置为 '未知地址':
UPDATE studentsSET address = '未知地址';