数据库-SQL

SQL语句

有些可能需要有个临时表的,就(select……)as 表名。

有些题目看起来难,但是可以换一个角度想,然后把各个部分分开来想,各个部分拆开来分别写

  • 就比如说要找各部门工资最高的三个人,也就可以想成在相同部门中工资更高的工资数不超过三
  • 第二高的薪水:比最高的薪水小的所有薪水中最高的那一个

要记得利用各种聚集函数、分类什么的,不要什么都重新用语句来做。

左外连接、右外连接

​ 哪边需要全都有的就哪边外连接。例如 person 连 address,不管 address 有没有,person 信息都要有的:from Person left outer join Address on (Person.PersonId = Address.PersonId)


char 和 varchar
  • char的长度固定,varchar的长度可变
  • char因为长度固定,每次修改的长度相同,效率更高;varchar修改的效率更低
  • char类型存储的时候是初始预计字符串再加上一个记录字符串长度的字节,占用空间较大;varchar类型存储的时候是实际字符串再加上一个记录字符串长度的字节,占用空间较小。

count(*),count(1) 和 count(列名)区别

从执行结果上看:

  • count( * )包含了所有的列,相当于行数
  • count(1)相当于只扫描第一列,也相当于行数
  • count(列名)只统计列名对应那列,且不包含空值,也就是该列为空的不计数
  • count( * )count(1)都不会过滤空值,但count(列名)会过滤空值。

从执行效率上看:

  • 如果列为主键,count(列名)会比count(1)快
  • 列名不为主键,count(1)会比count(列名)快 (不需要过滤空值)
  • 如果表中只有一列,则count(*)效率最优 (有优化)
  • 如果表中存在主键,count(主键列名)效率最优
  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)

Distinct
字符匹配
  • 用 like

  • %:任意长度字符串

  • _:任意单个字符

  • ESCAPE ’ \ ':\ 是换码字符,\ 后的通配符当成普通字符来用

NULL

要用 is NULL

group by、聚集函数

聚集函数只能用于 SELECT 和 GROUP BY 后的 HAVING

COUNT、SUM、MAX、MIN、AVG

group by: select 出来的只能是用聚集函数处理过的或者是用来分组的那列

分组后聚集函数作用于每一组,即给每个组一个值

对分组结果进行筛选要用 HAVING,且 HAVING 后的是聚集函数

例:找出平均分大于60的学生id (对学生ID进行group by,然后用avg算分平均分)


having、where
  • 区别在于作用对象不同:WHERE 作用于基本表或者视图,从中选择满足条件的元组;HAVING 作用于组,从中选择满足条件的组
  • WHERE 不能用聚集函数作为条件表达式,HAVING 只能用聚集函数作为条件表达式

order by

排序 DESC / ASC

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值