SQL 基础语法笔记
《PostgreSQL修炼之道:从小工到专家(第2版)》 reading
1 DDL
1.1 基础语法
创建表
CREATE table2 table_name (
col1_name data_type,
col2_name data_type,
);
指定主键
CREATE table2 table_name (
col1_name data_type primary key,
col2_name data_type,
);
删除表
DROP table2 table_name;
1.2 TRUNCATE TABLE 语句
TRUNCATE TABLE table;
注意它与 DELETE FROM table_name;
的不同。
2 DML
2.1 INSERT 语句
语法一
INSERT INTO table_name VALUES(value1,value2);
语法二
INSERT INTO student(col1_name,col2_name) VALUES(value1,value2);
INSERT INTO student(col2_name,col1_name) VALUES(value2,value1);
以上两行代码插入的内容相同。
可以对应全部列,也可以对应部分列。如果是部分列,未指定的列的对应数据为 NULL。
INSERT INTO student(col1_name) VALUES(value1);
2.1.1 INSERT…SELECT 语句
INSERT INTO table2 SELECT * FROM table1;
将表 1 的所有数据插入表 2 中,例如,可用于备份表。
INSERT INTO table_bak SELECT * FROM table;
2.2 UPDATE 语句
针对所有列的更新
UPDATE table_name SET col_name=value;
带有条件的更新
UPDATE table_name SET col_name=value WHERE子句;
同时更新多列
UPDATE table_name SET col1_name=value1,col1_name=value1,col2_name=value2 WHERE子句;
注意,如果 value 为字符串,需用单引号包起而非双引号。
2.3 DELETE 语句
删除表内全部数据
DELETE FROM table_name;
删除特定列数据
DELETE FROM table_name WHERE子句;
其中,WHERE 子句用于筛选出特定列。
3 DQL
3.1 基础语法
基本语法一
SELECT col_name FROM table_name;
SELECT col1.name,col2.name FROM table_name;
基础语法二
SELECT 包含列名的算数表达式 FROM table_name;
SELECT 算数表达式;
也可用 WHERE 子句。
3.2 排序
正序
select * from table_name order by col_name;
select * from table_name order by col1_name,col2_name;
倒序
select * from table_name order by col_name DESC;
select * from table_name order by col1_name DESC,col2_name;
select * from table_name order by col1_name,col2_name DESC;
select * from table_name order by col1_name DESC,col2_name DESC;
注意:ORDER BY 子句应在 where 子句之后,不然就会报错。
3.3 分组查询
SELECT col_name,聚合函数 FROM table_name GROUP BY col_name;
3.4 多表关联语句
SELECT col_name,COL_NAME FROM table,table2 WHERE 多表关联条件;
如果感觉表名太长,可以为其取个别名,如 a、b。
SELECT col_name,COL_NAME FROM table a,table2 b WHERE 多表关联条件;
有意思的是,别名可以先于表名出现(一般存在子查询语句),如
SELECT cols_name(SELECT max(value) as max_value FROM table a WHERE a.col_name = b.COL_NAME) as max_value FROM table2 b;
仅作为示例以说明这一点,不必过分关注语句内容。
3.5 UNION 语句
SELECT * FROM table WHERE子句 UNION SELECT * FROM table where子句;
默认结果集中相同的两条记录合并成一条。如果不想合并
SELECT * FROM table WHERE子句 UNION ALL SELECT * FROM table where子句;
4 psql 基本操作
使用 \d
显示数据库中有哪些表;
使用 \d table_name
可以显示这张表的定义情况;