以下示例基于PostgreSQL
常用DDL
DDL
DDL:[Data Mefinition Language] 数据定义语言
关键点: CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE/DROP INDEX 等
主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DDL操作是隐性提交的!不能rollback
创建表
CREATE TABLE employees (
employee_id SERIAL PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
birth_date DATE,
hire_date DATE
);
修改表
#添加列
ALTER TABLE employees
ADD COLUMN email VARCHAR(100);
#修改列类型
ALTER TABLE employees
ALTER COLUMN birth_date TYPE TIMESTAMP;
#删除列
ALTER TABLE employees
DROP COLUMN email;
删除表
DROP TABLE employees;
创建视图
CREATE VIEW employee_names AS
SELECT first_name, last_name
FROM employees;
删除视图
DROP VIEW employee_names;
常用DML
DML
DML:[Data Manipulation Language] 数据操纵语言
关键点: INSERT、UPDATE、DELETE
主要是对表数据进行操作,如对表数据进行增、删、改
插入数据
#插入单行数据
INSERT INTO employees (first_name, last_name, birth_date, hire_date)
VALUES ('John', 'Doe', '1990-01-01', '2020-01-01');
#插入多行数据
INSERT INTO employees (first_name, last_name, birth_date, hire_date)
VALUES
('Jane', 'Doe', '1992-02-02', '2021-02-02'),
('Jim', 'Beam', '1985-03-03', '2019-03-03');
更新数据
#更新单个字段
UPDATE employees
SET hire_date = '2021-01-01'
WHERE employee_id = 1;
#更新多个字段
UPDATE employees
SET first_name = 'Jonathan', last_name = 'Smith'
WHERE employee_id = 2;
删除数据
#删除符合条件的行
DELETE FROM employees
WHERE employee_id = 3;
#删除所有数据(但保留表结构)
DELETE FROM employees;
常用DCL
DCL
DCL: [Data Control Language] 数据控制语言
关键点: GRANT、REVOKE
主要主要用于控制数据库的访问权限和安全性
授予权限
#授予用户对表的全部权限
GRANT ALL PRIVILEGES ON TABLE employees TO user_name;
#授予用户对表的特定权限
GRANT SELECT, INSERT, UPDATE ON TABLE employees TO user_name;
#授予角色权限
GRANT SELECT ON TABLE employees TO role_name;
#授予用户对数据库的连接权限
GRANT CONNECT ON DATABASE database_name TO user_name;
撤销权限
#撤销用户对表的特定权限
REVOKE SELECT, INSERT ON TABLE employees FROM user_name;
#撤销用户对表的全部权限
REVOKE ALL PRIVILEGES ON TABLE employees FROM user_name;
#撤销角色权限
REVOKE CONNECT ON DATABASE database_name FROM user_name;
授予和撤销角色
#创建角色
CREATE ROLE role_name;
#授予用户角色
GRANT role_name TO user_name;
#撤销用户角色
REVOKE role_name FROM user_name;
常用DQL
DQL
DQL: [Data Query Language ] 数据查询语言
关键点: SELECT
DQL基本结构是由SELECT语句,FROM语句,WHERE语句组成的查询块:
基本语法:SELECT <字段名表> FROM <表或视图名> WHERE <查询条件>
基本查询
#查询所有列
SELECT *
FROM employees;
#查询特定列
SELECT first_name, last_name
FROM employees;
条件查询
#查询满足特定条件的行
SELECT first_name, last_name
FROM employees
WHERE last_name = 'Doe';
#使用比较运算符
SELECT first_name, last_name
FROM employees
WHERE hire_date > '2020-01-01';
使用逻辑运算符
#AND运算符
SELECT first_name, last_name
FROM employees
WHERE last_name = 'Doe' AND hire_date > '2020-01-01';
#OR运算符
SELECT first_name, last_name
FROM employees
WHERE last_name = 'Doe' OR hire_date > '2020-01-01';
#NOT运算符
SELECT first_name, last_name
FROM employees
WHERE NOT (last_name = 'Doe');
使用ORDER BY子句排序
#按一个列排序
SELECT first_name, last_name
FROM employees
ORDER BY last_name ASC;
#按多个列排序
SELECT first_name, last_name, hire_date
FROM employees
ORDER BY last_name ASC, hire_date DESC;
使用LIMIT子句限制返回的行数
SELECT first_name, last_name
FROM employees
ORDER BY hire_date DESC
LIMIT 5 OFFSET 3;
使用聚合函数和GROUP BY子句
#计数
SELECT COUNT(*)
FROM employees;
#分组计数
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;
#其他聚合函数(如SUM, AVG, MAX, MIN)
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;
使用JOIN子句连接表
#内连接
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
#左连接
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
One comment
想想你的文章写的特别好