sql部分关键字理解

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集合中。










 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值