标签:
select语句可以从一个或者多个表中选取特定的行和列,结果通常是生成一个临时表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到一个临时的表中,这就是实现选择和投影运算的一个形式。
语法格式
select ****
from 子句
where 子句
group BY 子句
having 子句
order by 子句
limit 子句
使用as子句来更改查询结果的别名
语法格式
select columnName as column_alias
替换结果中的数据
select 学号,姓名,
(case
when 总学分 is null then “尚未选择”
when 总学分 < 50 then “不及格”
when 总学分 >= 50 and 总学分 < 60 then “及格”
when 总学分 >= 60 and 总学分 < 80 then “良好”
when 总学分 >= 80 and 总学分 < 100 then “优秀”
else “满分"
end as 等级
from xs
where 专业 = ”计算机“;
)
用于统计族中满足条件的行数或者总行数,
count(expression)
expression中值为空时,会不会跳过?会的,会被跳过,不计入总数
分别用于求表达式中所有值项的总和与平均值
sum与group by 一起,求各组的和
连接的第一种方式就是将各个表用逗号分隔,这样就是指定了全连接。新表是每个表的每个行都与其他表中的每行交叉可以产生所有的可能组合,也就是笛卡尔积
这样可能得到的行数可能为每个表中行数之积,
在全连接的前提下,用where子句设置条件来将结果集减少为易于管理的大小,这样即为等值连接。
内连接是系统默认的,和等值连接是一样的。
高级
show profile for query num,查看每条数据的执行时间
分页查询
select * from tableName limit(offset ,size);
eg.
select * from tb_stu limit(10000,10);
左连接,结果表中除了匹配行外,还包括左表有但是右表中不匹配的行,对于这样的行,从右表被选择的列设置为null
右连接,与列连接类似,相反
操作同一张表时,为了避免出现A1中的索引B1中没有,B1 中有的索引而A1中没有
所以可以用一个只查询所有索引的临时表来left joinA1和B这样就不会出现索引不全的问题了
senior
select * from tb_stu where id>10000 limit(10);
在百万级数据分页时优选,但是这种做法有个前提是数据的完整性,数据的id必须都在,但实际是由的会被物理删除,对应的解决办法是不物理删除,执行逻辑删除,设置一个is_delete关键字
延迟关联技巧
select tb_stu.id ,name ,age from tb_stu inner join (select id from tb_stu from tb_stu limit(100000,10)) as tmpTable on tmpTable.id = tb_stu.id;
利用索引提高百万级数据的分页效果
标签:
原文地址:http://www.cnblogs.com/rocky-AGE-24/p/4862587.html