use jun;
#create table t_jun(
# id int primary key auto_increment,
#name varchar(10),
#group_id int
#);
1.Order by按照字段值进行排序,默认升序(asc)。校对规则决定排序关系。order by 字段 升序|降序(asc|desc),Order by允许多字段排序。
指的是,先按第一个字段排序,如果不能区分,才使用第二个字段,以此类推。
select * from test order by group_id asc,id desc;
2.SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对<表列中存在>相同的数据进行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
注意:如果是分组,则应该使用对分组字段进行排序的。
select * from test group by group_id order by group_id;
3.SQLite 的 LIMIT 子句用于限制由 SELECT 语句返回的数据数量。带有 LIMIT 子句的 SELECT 语句的基本语法如下:
select *from t_jun limit 6;#取前六行数据
在某些情况下,可能需要从一个特定的偏移开始提取记录。下面是一个实例,从第三位开始提取 3 个记录:select *from t_jun limit 3 offset 2;#
偏移2个行,总共取到3个行
4. distinct 明显的;独特的;清楚的;有区别的。
select distinct group_id from t_jun; #筛选出列中不同的数据
5.union SQL UNION 操作符合并两个或多个 SELECT 语句的结果。将多条select语句的结果,合并到一起,
称之为联合查询。 使用union关键字联合两个select语句。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注意:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
union使用:
(select * from t_jun where name='jason' order by group_id desc )
union
(select * from t_jun where name='jason' order by id desc ); #输出所有
union all使用:
(select * from t_jun where name='jason' order by group_id desc )
union all
(select * from t_jun where name='jason' order by id desc ); #输出去掉重复主键(id)的行
6.子查询分类:不同的分类,会有不同的使用方式。 分类标准:子查询出现的位置及子查询的返回值形式。
返回值分类:
单一值,
一列,
多列,
表(多行,多列)
出现位置分类:
where型
from型
exists型
################################
如何使用子查询?
单一值(标量):获得一个值之后,使用关系运算符,进行判断。> < = >= <= !=
select * from test where id < (select max(id) from test);
列子查询:获得一列,通常是多个行的一列值。注意一定是一列。
select name from test where group_id=4;
select id,name,group_id from test where
name in (select name from test where group_id=5);
一定是同集合类的操作符来完成(in| not in)。
其他的集合操作符:
any (集合) –>集合中的任何一个
=any (集合)–>等于集合中的任何一个即可,等同于in。
all (集合)–>集合中的所有元素
!=all(集合) –>不等于集合中的所有元素,等用于not in。
some(集合–>集合中的一些,语法上与any相同。
select id,name,group_id from test where
name =any (select name from test where group_id=5);
select id,name,group_id from test where
name !=all (select name from test where group_id=5);
#############################
IN 操作符允许您在 WHERE 子句中规定多个值,in中可以有某列的多个值。
select * from t_jun where name in('ll','jason');#可以有多个值
IN 与 = 的异同
相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义
不同点:IN可以规定多个值,等于规定一个值
:
select * from test
where exists(select * from class where test.id=class_id);
:
select * from test
where id in(select class_id from class);1
上面的两个语句完成的是同样的事情,但是解决思路是不一样的。
exists: 先获得test表的数据,然后获得id字段,然后去class表内查找对应值,找到,说明符合条件。
in: 先获得class表中所有的class_id的可能性,再在检索test表数据时,判断当前的class_id是否在id集合中。
#create table t_jun(
# id int primary key auto_increment,
#name varchar(10),
#group_id int
#);
1.Order by按照字段值进行排序,默认升序(asc)。校对规则决定排序关系。order by 字段 升序|降序(asc|desc),Order by允许多字段排序。
指的是,先按第一个字段排序,如果不能区分,才使用第二个字段,以此类推。
select * from test order by group_id asc,id desc;
2.SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对<表列中存在>相同的数据进行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
注意:如果是分组,则应该使用对分组字段进行排序的。
select * from test group by group_id order by group_id;
3.SQLite 的 LIMIT 子句用于限制由 SELECT 语句返回的数据数量。带有 LIMIT 子句的 SELECT 语句的基本语法如下:
select *from t_jun limit 6;#取前六行数据
在某些情况下,可能需要从一个特定的偏移开始提取记录。下面是一个实例,从第三位开始提取 3 个记录:select *from t_jun limit 3 offset 2;#
偏移2个行,总共取到3个行
4. distinct 明显的;独特的;清楚的;有区别的。
select distinct group_id from t_jun; #筛选出列中不同的数据
5.union SQL UNION 操作符合并两个或多个 SELECT 语句的结果。将多条select语句的结果,合并到一起,
称之为联合查询。 使用union关键字联合两个select语句。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注意:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
union使用:
(select * from t_jun where name='jason' order by group_id desc )
union
(select * from t_jun where name='jason' order by id desc ); #输出所有
union all使用:
(select * from t_jun where name='jason' order by group_id desc )
union all
(select * from t_jun where name='jason' order by id desc ); #输出去掉重复主键(id)的行
6.子查询分类:不同的分类,会有不同的使用方式。 分类标准:子查询出现的位置及子查询的返回值形式。
返回值分类:
单一值,
一列,
多列,
表(多行,多列)
出现位置分类:
where型
from型
exists型
################################
如何使用子查询?
单一值(标量):获得一个值之后,使用关系运算符,进行判断。> < = >= <= !=
select * from test where id < (select max(id) from test);
列子查询:获得一列,通常是多个行的一列值。注意一定是一列。
select name from test where group_id=4;
select id,name,group_id from test where
name in (select name from test where group_id=5);
一定是同集合类的操作符来完成(in| not in)。
其他的集合操作符:
any (集合) –>集合中的任何一个
=any (集合)–>等于集合中的任何一个即可,等同于in。
all (集合)–>集合中的所有元素
!=all(集合) –>不等于集合中的所有元素,等用于not in。
some(集合–>集合中的一些,语法上与any相同。
select id,name,group_id from test where
name =any (select name from test where group_id=5);
select id,name,group_id from test where
name !=all (select name from test where group_id=5);
#############################
IN 操作符允许您在 WHERE 子句中规定多个值,in中可以有某列的多个值。
select * from t_jun where name in('ll','jason');#可以有多个值
IN 与 = 的异同
相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义
不同点:IN可以规定多个值,等于规定一个值
:
select * from test
where exists(select * from class where test.id=class_id);
:
select * from test
where id in(select class_id from class);1
上面的两个语句完成的是同样的事情,但是解决思路是不一样的。
exists: 先获得test表的数据,然后获得id字段,然后去class表内查找对应值,找到,说明符合条件。
in: 先获得class表中所有的class_id的可能性,再在检索test表数据时,判断当前的class_id是否在id集合中。