SQL知识点集锦

一.#查询结果限制返回行数#

1.使用LIMIT限制结果集

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果只给定一个参数,它表示返回最大的记录行数目。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。
初始记录行的偏移量是 0(而不是 1)。

例1.检索记录行 6-10

1

SELECT FROM table LIMIT 5,5

例6.检索记录行 11-last

1

SELECT FROM table LIMIT 10,-1

例7.检索前 5 个记录行

复制代码

1

SELECT FROM table LIMIT 5

2.top不适用于所有的数据库语言

(1)SQL SERVER里可以使用。使用方式如下:

1

select top number/percent column(s) from user-profile;

(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

列名 [NOTIN(常量1, 常量2,…常量n)

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

布尔表达式1 AND 布尔表达式2 AND … AND 布尔表达式n

只有当全部的布尔表达式均为真时,整个表达式的结果才为真,只要有一个布尔
表达式的结果为假,则整个表达式结果即为假。

使用OR谓词的语法格式如下。

1

布尔表达式1 OR 布尔表达式2 OR … OR 布尔表达式n

表示只要其中一个布尔表达式为真,则整个表达式的结果即为真;只有当全部布
尔表达式的结果均为假时,整个表达式结果才为假。

例1.查询所有系号大于1且班名以“电子 ” 开头的班号和班名。

1

2

SELECT 班号,班名 FROM 班级表

WHERE 系号>1 AND 班名 LIKE '电子%’

例2.查询11212P和11214D班所有男生的学号、姓名、性别和班号。

1

2

SELECT 学号,姓名,性别,班号 FROM 学生表

WHERE (班号= ‘ 11212P ’ OR 班号= ‘ 11214D ’) AND 性别=‘男’

也可写为:

1

2

3

SELECT 学号,姓名,性别,班号 FROM 学生表

WHERE 班号 IN( ‘ 11212P ’ , ‘ 11214D ’)

AND 性别=‘男’

九、#字符匹配#

一般形式为:

列名 [NOT ] LIKE

匹配串中可包含如下四种通配符:
_:匹配任意一个字符;
%:匹配0个或多个字符;
[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
[^ ]:不匹配[ ]中的任意一个字符。

如果把姓名列的类型改为nchar(20),在SQL Server 2012中执行没有结果。原因是姓名列的类型是char(20),当姓名少于20个汉字时,系统在存储这些数据时自动在后边补空格,空格作为一个字符,也参加LIKE的比较。可以用rtrim()去掉右空格。

1

SELECT FROM 学生表 WHERE rtrim(姓名) LIKE '张__'

十、#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函数

分组字段不能是聚合函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值