查询

创建新表

CREATE TABLE IF NOT EXISTS employee ( 
  emp_id SERIAL PRIMARY KEY,        -- AUTO_INCREMENT integer, as primary key
  emp_name VARCHAR(50) NOT NULL,    
  emp_salary NUMERIC(9,2) NOT NULL
);

// 创建新表(SQL)


显示表

\d employee
                                    Table "public.employee"   
Column      |         Type          |                         Modifiers                         
------------+-----------------------+-----------------------------------------------------------
emp_id     | integer               | not null default nextval('employee_emp_id_seq'::regclass) 
emp_name   | character varying(50) | not null
emp_salar  | numeric(9,2)          | not null

Indexes:
    "employee_pkey" PRIMARY KEY, btree (emp_id)

// 显示表(psql)


插入查询

INSERT INTO employee (emp_name, emp_salary) VALUES
('John', 5000),
('Jack', 4568.0),
('Robert',7500.50);

// 将记录插入表中(SQL)


条件选择查询

select * from employee where emp_salary >= 5000; 
 emp_id | emp_name | emp_salary 
--------+----------+------------
    1   | John     |    5000.00
    3   | Robert   |    7500.50
(2 rows)

// 根据筛选条件选择数据(例如 emp_salary >= 5000)(SQL)


条件更新查询(安全更新);

BEGIN;
  update employee set emp_salary = 6000 where emp_name = 'John'; 
COMMIT;

// 根据条件更新记录(例如 更新员工 'John' 的 emp_salary)(SQL)

除非发出提交命令,否则记录不会提交到数据库中。如果发出回滚命令而不是提交命令,更新也可以撤消。


更改表

alter table employee add column dept_id integer;
ALTER TABLE

// 更改表以添加新列(例如 在 employee 表中添加 dept_id)(SQL)

alter table employee drop column dept_id;
ALTER TABLE

// 更改表以删除列(例如 从 employee 表中删除 dept_id)(SQL)


截断表

truncate only employee;
TRUNCATE TABLE

// 截断 employee 表(SQL)

截断表是删除表中记录的快速方法,因为它不需要扫描表。截断是数据库中未记录的活动。截断表也比删除表并重新创建它容易得多。

使用 "ONLY" 关键字是安全的,这样你就不会意外地截断依赖/子表。

truncate only tableA, tableB;
TRUNCATE TABLE

// 同时截断多个表(SQL)


条件删除查询(回滚)

BEGIN; 
  delete from employee where emp_id = 2;
  select * from employee where emp_id = 2;
  emp_id | emp_name | emp_ssn | emp_salary | emp_dept_id 
  --------+----------+---------+------------+-------------
  (0 rows)
ROLLBACK;

select * from employee where emp_id = 2;
 emp_id | emp_name | emp_ssn | emp_salary | emp_dept_id 
--------+----------+---------+------------+-------------
      2 | Rohit    | 1234    |    5000.00 |           1
(1 row)

// 根据筛选条件从 employee 中删除(emp_id = 1)& 然后回滚事务(SQL)


参数化语句

PREPARE myplan (int) AS SELECT * FROM employee where emp_id = $1;

// 创建参数化语句并在服务器上存储查询访问计划(SQL)

EXECUTE myplan(2);
 emp_id | emp_name | emp_ssn | emp_salary | emp_dept_id 
--------+----------+---------+------------+-------------
      2 | Rohit    | 1234    |    5000.00 |           1
(1 row)

// 根据存储的访问计划执行查询,为参数提供值(例如 $1=2)(SQL)

参数化语句是编写查询的有效方法,无论提供运行时值如何,这些查询都使用相同的访问计划。像 Java 这样的应用程序使用 JDBC API 来创建这样的参数化语句

Int emp_id = 2;
con = getDBConnection();  // get database connection
PreparedStatement pstmt = con.prepareStatement("select * from employee where emp_id = ?"); // prepare parameterized statement
pstmt.setInt(1, emp_id); // provide runtime value
pstmt.execute();  // execute query