一.#查询结果限制返回行数#
1.使用LIMIT限制结果集
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果只给定一个参数,它表示返回最大的记录行数目。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。
初始记录行的偏移量是 0(而不是 1)。
例1.检索记录行 6-10
1 |
|
例6.检索记录行 11-last
1 |
|
例7.检索前 5 个记录行
1 |
|
2.top不适用于所有的数据库语言。
(1)SQL SERVER里可以使用。使用方式如下:
1 |
|
(2)在MySQL就不适用。在MySQL中使用的是limit。在Oracle使用ROWNUM。
二、 #将查询后的列重新命名#
1.起别名关键字 as
(
1
)as写不写都可
(2)别名加不加引号(单双)都可
//加引号:别名就是引号内的内容。
//不加引号:别名如果为小写,会解析为大写,别名实际为大写。
//以上两点在调用别名时要注意,易报错:找不到对应的列(大小写对应的是不同的列)
2.列名 | 表达式 [ AS ] 新列名 或 新列名=列名 | 表达式
例:SELECT 姓名, year(getdate())-year(出生日期) AS 年龄 FROM 学生表
三、#使用索引覆盖效率提升80%#
覆盖索引的原理:就是查询字段在 二级索引中全部找到,不需要回表查询
覆盖索引只是特定于具体select语录而言的联合索引。也就是说一个联合索引对于某个select语句,通过索引可以直接获取查询结果,而不再需要回表查询啦,就称该联合索引覆盖了这条select语句。
四、#sql内部的执行流程#
from join > where > group by > avg/sum 等聚合函数 > having > select > order by >limit
五、 #查找某个年龄段的用户信息#
两种方式
1.between 在列值得某与某之间
例:WHERE age between 20 and 23
2.用and的来连接条件范围
例:WHERE age >= 20 and age<=23
六、#确定集合#
用来查找属性值属于指定集合的元组。
格式为:
1 |
|
IN:当列中的值与IN中的某个常量值相等时,则结果为True,表明此记录为符合查询条件的记录。
NOT IN:当列中的值与某个常量值相等时,结果为False,表明此记录为不符合查询条件的记录。
七、#用where过滤空值练习#
解法一:select device_id,gender,age,university from user_profile where age is not NULL;
解法二:select device_id,gender,age,university from user_profile where age !='';
八、#多重条件查询#
在WHERE子句中可以使用逻辑运算符AND和OR来组成多条件查询。
使用AND谓词的语法格式如下:
1 |
|
只有当全部的布尔表达式均为真时,整个表达式的结果才为真,只要有一个布尔
表达式的结果为假,则整个表达式结果即为假。
使用OR谓词的语法格式如下。
1 |
|
表示只要其中一个布尔表达式为真,则整个表达式的结果即为真;只有当全部布
尔表达式的结果均为假时,整个表达式结果才为假。
例1.查询所有系号大于1且班名以“电子 ” 开头的班号和班名。
1 2 |
|
例2.查询11212P和11214D班所有男生的学号、姓名、性别和班号。
1 2 |
|
也可写为:
1 2 3 |
|
九、#字符匹配#
一般形式为:
列名 [NOT ] LIKE
匹配串中可包含如下四种通配符:
_:匹配任意一个字符;
%:匹配0个或多个字符;
[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
[^ ]:不匹配[ ]中的任意一个字符。
如果把姓名列的类型改为nchar(20),在SQL Server 2012中执行没有结果。原因是姓名列的类型是char(20),当姓名少于20个汉字时,系统在存储这些数据时自动在后边补空格,空格作为一个字符,也参加LIKE的比较。可以用rtrim()去掉右空格。
1 |
|
十、#GROUP BY子句之后使用Having子句#
GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
select子句中的列名必须为分组列或列函数,列函数对于group by子句定义的每个组返回一个结果。
可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。因此,在GROUP BY子句后面包含了一个HAVING子句。HAVING类似于WHERE(唯一的差别是WHERE过滤行,HAVING过滤组)AVING支持所有WHERE操作符。
十一、#求平均值#
1.使用ROUND()函数,ROUND返回一个数值,舍入到指定的长度或精度
例子:select count(gender) as male_num,round(avg(gpa),
1
) as avg_gpa from user_profile
where gender=
'male'
;
2.
avg函数
分组字段不能是聚合函数