SQLite基础-8.子句(二)

SQLite子句(二)

1. GROUP BY子句

GROUP BY子句与SELECT语句一起使用,对数据进行分组。
位置:放在WHERE子句后,放在ORDER BY子句之前。

-- 语法
SELECT * FROM table_name
    WHERE [condition]
    GROUP BY column1,, column2,..
    ORDER BY column1 DESC;

-- 实例
select * from link_men
    where name = 'eric'
    group by address;

2. HAVING子句

HAVING 子句通常与GROUP BY子句联合使用,用来过滤由GROUP BY子句返回的分组结果。

-- 语法
SELECT * FROM table_name
    WHERE [condition] 
    GROUP BY column1
    HAVING [condition]
    ORDER BY column1 DESC;

--实例
SELECT * FROM table_name
    GROUP BY address
    HAVING count(address) < 2;

实例

语句 描述
WHERE SALARY LIKE '200%' 查找以 200 开头的任意值
WHERE SALARY LIKE '%200%' 查找任意位置包含 200 的任意值
WHERE SALARY LIKE '_00%' 查找第二位和第三位为 00 的任意值
WHERE SALARY LIKE '2_%_%' 查找以 2 开头,且长度至少为 3 个字符的任意值
WHERE SALARY LIKE '%2' 查找以 2 结尾的任意值
WHERE SALARY LIKE '_2%3' 查找第二位为 2,且以 3 结尾的任意值
WHERE SALARY LIKE '2___3' 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值

3. LIMIT 子句

LIMIT子句来限制SELECT语句返回的行数。

-- 语法
SELECT * FROM table_name
    [WHERE condition]
    [ORDER BY column1, column2,...] [ASC | DESC]
    LIMIT row_count
    OFFSET offset;
-- OFFSET 可选,偏移行。在约束行数之前,先跳过偏移行。

-- 实例
SELECT * FROM link_men
    ORDER BY salary
    LIMIT 10;

4. IF EXISTS 和 IF NOT EXISTS 子句

IF EXISTSIF NOT EXISTS子句表示如果当前创建的数据表名已经存在 和 如果当前创建的数据表名不存在,一般用在 CREATE和DROP语句中。
用于防止以下场景:

  • 当表存在时再次创建表或者视图,产生异常:Error: table link_men already exists
  • 当表或者视图不存在时删除表,产生异常:Error: no such table: link_men
-- 语法
CREATE TABLE IF NOT EXISTS table_name (
    column1 datatype PRIMARY KEY,
    ...
    columnN datatype,
);

DROP TABLE IF EXISTS table_name;

-- 实例
CREATE TABLE IF NOT EXISTS link_men(
    ID INT PRIMARY KEY NOT NULL,
    ...
);

DROP TABLE IF EXISTS link_men;

posted @ 2019-08-08 20:42  兰海涛  阅读(152)  评论(0编辑  收藏  举报