SQL 专项训练刷题总结

1、where 筛选、group by 分组、order by 排序、having+group by 筛选分组

区块链:公有链(Public Blockchain)、私有链(Private Blockchain)、联盟链(Consortium Blockchain)三大类。

2、order by 排序,desc表示降序,asc表示升序,默认情况下是asc升序。

3、子查询必须是完整语句

检索所有比“王华“年龄大的学生姓名、年龄和性别。

select sn,age,sex,from s where age>(select age from s where sn="王华");

4、order by 排序 后面必须列出排序的字段名,可以是多个字段名

group by 分组 必须有”聚合函数“--sum()、count()、avg()等来配合使用,使用时至少需要一个分组标志字段

count()属于聚合函数,where后面不能接聚合函数,所以就有了having子句

having子句可以接聚合函数,筛选分组后的各组数据

5、having用在group by后面,筛选group by分组后的各组数据

6、SQL注入的关键是单引号的闭合,“ ”  “ --

7、删除表:delecte、drop、truncate

处理效率:drop>trustcate>delete

删除范围:drop删除整个表、trustcate删除全部记录,但不删除表、delect删除部分记录

delect不影响所用extent,高水线保持原位置不动,trustcate会将高水线复位

8、where子句 = 指定行所对应的条件 过滤行 在分组之前使用

having子句 = 指定组所对应的条件 过滤分组 在分组之后使用

实际上所有的where子句都可以用having代替,两者也可同时使用

grouping by 的作用是限定分组条件,而having则是对group by 中分出来的组进行条件筛选

所以用having就一定要和group by连用,且是先group by XXX 然后再having XXX,用group by 不一定有having,因为group by只是一个筛选条件

9、count(*) 包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL

count(1) 包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL

count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空

所有的统计函数都会忽略空值(null)

10、在子表元素大于1时,不能用 = 要用 in 

  in  (子表)

11、case......when.....then......else......end一个固定搭配

12、drop 是完全删除表,包括表结构

delete 是删除表数据,保留表的结构,而且可以加where,只删除一行或者多行

truncate 只能删除表数据,会保留表结构,而且不能加where

13、db_accessadmin    可以添加、删除用户的用户

db_datareader     可以查看所有数据库中用户表内数据的用户

14、修改表 字段的缺省值

alter table 表名 alter column 字段名 set default 默认值

15、存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。

它可以提高SQL的速度,存储过程是编译过的,如果某一个操作包含大量的SQL代码或分别被执行多次,那么使用存储过程比直接使用单条SQL语句执行速度快的多。

不带参数的存储过程:

create procedure proc_sql1  
as  
begin  
    declare @i int  
    set @i=0  
    while @i<26  
      begin  
         print char(ascii('a') + @i) + '的ASCII码是: ' + cast(ascii('a') + <a href="/profile/5" data-card-uid="5" class="js-nc-card" target="_blank">@i as varchar)   
         set @i = @i + 1  
      end  
end</a>

带参数的存储过程:

create proc proc_sql6  
@num1 int,  
@num2 int,  
@num3 int  
as  
begin  
   declare @max int  
   if @num1>@num2    
      set @max = @num1  
   else set @max = @num2  
     
   if @num3 > @max  
      set @max = @num3  
        
   print '3个数中最大的数字是:' + cast(<a href="/profile/20" data-card-uid="20" class="js-nc-card" target="_blank">@max as varchar)  
end</a>

16、MySQl是最好的RDBMS(Relational Database Management System,关系数据库管理系统)应用软件。

17、SQL语言类别:

DQL:数据查询语言
凡是带有select关键字的都是查询语句

select...

DML:数据操作语言
凡是对表当中的数据进行增删改的都是DML

insert delete update

insert 增、delete 删、update 改

这个主要是操作表中的数据data。

 DDL:数据定义语言
凡是带有create、drop、alter的都是DDL,DDL主要操作的是表的结构。不是表中的数据。

create:新建,等同于增

drop:删除

alter:修改

这个增删改和DML不同,这个主要是对表结构进行操作。

TCL:事务控制语言
事务提交:commit;

事务回滚:rollback;

DCL:数据控制语言。
例如:授权grant、撤销权限revoke....

18、编写顺序

   select 
        ...
    from
        ...
    where
        ...
    group by
        ...
    having
        ...
    order by
        ...
    
    以上关键字只能按照这个顺序来,不能颠倒。

    执行顺序?
        1. from
        2. where
        3. group by
        4. having
        5. select
        6. order by
19、distinct 用于返回唯一不同的值,去除重复行

20、DDL(Data Definition language):数据定义语言

用来定义数据库对象:数据库、表、列等。

关键字:create、drop、alter等

DML(Data Manipulation Language):数据操作语言

用来对数据库中的表进行增删改操作。

关键字:insert、delete、updata等

DQL(Data Query Language):数据查询语言

用来查询数据库中表的记录(数据)。

关键字:select、where等

DCL(Data Control Language):数据控制语言

用来定义数据库的访问控制权限和安全级别,及创建用户。

关键字:grant、revoke等

21、insert into 语句用于向表格中插入新的行

insert into table_name values(值1,值2.....)

指定所要插入数据的列:

insert into table_name(列1,列2....)

values(值1,值2....)

        select into 语句从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份附件或者用于对记录进行存档

把所有的列插入新表

select * into new_table_name [in externaldatabase] from old_tablename

只把希望的列插入新表

select column_name(s) into new_table_name [in externaldatabase] from old_tablename

22、charindex()用于判断一个字符串中是否包含另一个字符串

返回字符串中指定字符的起始位置,没有指定字符返回0

基本语法:

charindex(expressionToFind,expressionToSearch [,start_location])

expressionToFind:目标字符串,就是想要找到的字符串,最大长度为8000

expressionToSearch:用于被查找的字符串

start_location:开始查找的位置,为空时默认从第一位开始查找

数据库中字符串开头位置是1

len()获取字符串长度

23、求和用累加sum(),求行的个数用累计count()

24、< 对应 &lt;

        >对应 &gt;

case when 判断条件 then 成功结果 then 不成功结果 end

25、datediff()函数返回两个日期之间的时间

语法:datediff(datepart,startdate,enddate)

datepart缩写
yy,yyyy
季度qq,q
mm,m
年中的日dy,y
dd,d
wk,ww
星期dw,w
小时hh
分钟mi,n
ss,s
毫秒ms
微秒mcs
纳秒ns

getdate()得出的是当前日期+时间(精准到毫秒)

26、all:对所有数据都满足条件,整个条件才成立

any:只要一条 数据满足条件,整个条件成立

some的作用和any一样

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值