postgresql基础(2)

120 阅读1分钟
  1. 方便的函数
    1. * length -- 字符长度
    2. * concat -- 字符连接
    3. * alias -- 别名
    4. * substring -- 切割子字符串
    5. * random -- 随机数
    6. 例子
      1. > select player, length(player) from users;
      2. > select player, concat(player, '/', team) from users;
      3. > select player, concat(player, '/', team) as "球员信息" from users;
        1. 更改了列名
      4. > select substring(team, 1, 1) as "球队首文字" from users;
      5. > select concat('我', substring(team, 1, 1)) as "球队首文字" from users;
      6. > select random();
      7. > select * from users order by random();
        1. 随机打乱排序
      8. > select * from users order by random() limit 1;
        1. 抽奖
  2. 变更表结构
    1. alter table [tablename] ...
      1. 选择修改的表
    2. alter column_name ...
      1. 选择修改表的那一部分
    3. create index ...
      1. 添加索引
    4. drop index ...
      1. 删除索引
    5. 例子
      1. alter table users add fullname varchar(255);
    1. alter table users drop fullname;
    2. alter table users rename player to nba_player;
    3. alter table users alter nba_player type varchar(100);
    4. create index nba_player_index on users(nba_player);
    5. drop index nba_player_index;
  3. 多表查询,联合
    1. where
      1. select users.player, twitters.content from users, twitters where users.id = twitters.user_id;
      2. select u.player, t.content from users as u, twitters as t where u.id = t.user_id;
      3. select u.player, t.content from users as u, twitters as t where u.id = t.user_id and u.id = 1;
      4. 注意:having 一般与 group by 合用
    2. join ... on
      1. 连接两张表变成一张新表(通过 on 生成一个 组合表)
      2. SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
    3. union
      1. 将两个查询结果合并成一个结果(union 两个 select 语句)
      2. SELECT country FROM Websites UNION ALL SELECT country FROM apps ORDER BY country;
        1. 会显示不同的结果
      3. SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country;
        1. 只显示一个结果
  4. 视图(定义为一个select语句)
    1. select u.player, t.content from users as u, twitters as t where u.id = t.user_id and u.id = 1;
    2. create view curry_twitters as select u.player, t.content from users as u, twitters as t where u.id = t.user_id and u.id = 1;
    3. \dv
    4. \d curry_twitters
    5. select * from curry_twitters;
    6. drop view curry_twitters;
    7. \dv
  5. 事务
    1. > select * from users;
    2. > begin;
    3. > update users set score = 50 where player = '库里';
    4. > update users set score = 60 where player = '哈登';
    5. > commit;
    6. > select * from users;
    7. > begin;
    8. > update users set score = 0 where player = '库里';
    9. > update users set score = 0 where player = '哈登';
    10. > rollback;
    11. > select * from users;