数据库sql语句

data types

  • INTEGER
  • DECIMAL
    • 可以用来保存具有小数点而且数值确定的数值。而不像是float或者real保存近似值。
    • 声明方式decimal[(p[,s])]。例如decimal(10,3)表示共有七位整数3位小数,精度为10位。
  • SERIAL
    • 自动递增的integer
  • VARCHAR
  • TIMESTAMP
  • BOOLEAN
  • ENUM
  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • DEFAULT
  • CHECK
    • 约束
    • e.g. CHECK(id>0)

Basic Operations

Creating a table:

 CREATE TABLE flights (
      id SERIAL PRIMARY KEY,
      origin VARCHAR NOT NULL,
      destination VARCHAR NOT NULL,
      duration INTEGER NOT NULL
  );

Inserting data into a table:

INSERT INTO flights
      (origin, destination, duration)
      VALUES ('New York', 'London', 415);

注意没有id这个field是因为id是SERIAL类型,自动递增。

Reading data from a table:

  SELECT * FROM flights;
  SELECT origin, destination FROM flights;
  SELECT * FROM flights WHERE id = 3;
  SELECT * FROM flights WHERE origin = 'New York';
  SELECT * FROM flights WHERE duration > 500;
  SELECT * FROM flights WHERE destination = 'Paris' AND duration > 500;
  SELECT * FROM flights WHERE destination = 'Paris' OR duration > 500;
  SELECT AVG(duration) FROM flights WHERE origin = 'New York';
  SELECT * FROM flights WHERE origin LIKE '%a%';
  SELECT * FROM flights LIMIT 2;
  SELECT * FROM flights ORDER BY duration ASC;
  SELECT * FROM flights ORDER BY duration ASC LIMIT 3;
  SELECT origin, COUNT(*) FROM flights GROUP BY origin;
  SELECT origin, COUNT(*) FROM flights GROUP BY origin HAVING COUNT(*) > 1;

COUNT(*)返回行数

LIMIT 设置了返回数据的行的最大值

ORDER BY 排序,默认升序排序(ASC),降序排列(DESC)

GROUP BY 分组

HAVING 限制GROUP BY,作用与WHERE类似

数据库查询语句模板:

select
from
where
group by
having
order by

updating data in a table:

  UPDATE flights
      SET duration = 430
      WHERE origin = 'New York'
      AND destination = 'London';

deleting data from a table:

      DELETE FROM flights
      WHERE destination = 'Tokyo'

Relating Tables and Compound Queries

demonstrating tables related by foreign keys:

CREATE TABLE passengers (
      id SERIAL PRIMARY KEY,
      name VARCHAR NOT NULL,
      flight_id INTEGER REFERENCES flights
  );

querying simultaeously:

  SELECT origin, destination, name FROM flights JOIN passengers ON passengers.flight_id = flights.id;
  SELECT origin, destination, name FROM flights JOIN passengers ON passengers.flight_id = flights.id WHERE name = 'Alice';
  SELECT origin, destination, name FROM flights LEFT JOIN passengers ON passengers.flight_id = flights.id;

JOIN 使得flights和passengers两个表可以同时被查询

JOIN:inner join 只有两个表中的行都存在时才能被连接

LEFT JOIN:返回左表中所有的行,即使右表中没有匹配

RIGHT JOIN:返回右边表中所有的行,即使左表没有匹配

FULL JOIN:只要其中某个表存在匹配,就会返回行

Nested queries:

 SELECT * FROM flights WHERE id IN
  (SELECT flight_id FROM passengers GROUP BY flight_id HAVING COUNT(*) > 1);

补充知识


select * from table limit 2,1;
//跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据


select * from table limit 2 offset 1;
//从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值