SQL notebook

1

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

select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end) 胜, SUM(case when Win='负' then 1 else 0 end) 负 from result group by Date

2

使用group by时,SELECT 子句中只能存在以下三种元素:
a.常数
b.聚合函数
c.GROUP BY子句中指定的列名(也就是聚合键)

3

distinct用于返回唯一不同的值

4

where后面不能接聚合函数,where在分组前过滤,having在分组后过滤,两者之间不冲突。

5

order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名

6

group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
注意:聚合函数是---sum()、count()、avg()等都是“聚合函数”

7

SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。
防止SQL注入,需要注意以下几个要点:
b.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
c.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
d.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
e.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
f.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
g.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

8

在MySql中进行数据查询时,如果要对查询结果的列名重新命名,将sno列重新命名为学号

select sno as 学号 from T

9

having子句必须与group by 子句同时使用,不能单独使用

10

数据查询语言(DQL):是由SELECT子句,FROM子句,WHERE子句组成的查询块
数据操纵语言(DML): SELECT(查询) INSERT(插入) UPDATE(更新) DELETE(删除) 数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
数据定义语言(DDL):CREATE(创建数据库或表或索引)ALTER(修改表或者数据库)DROP(删除表或索引) 用于定义SQL模式、基本表、视图和索引的创建和撤消操作。
数据控制语言(DCL):GRANT(赋予用户权限) REVOKE(收回权限) DENY(禁止权限) 包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。
事务控制语言(TCL):SAVEPOINT (设置保存点)ROLLBACK (回滚) COMMIT(提交) 涉及到SQL语句嵌入在宿主语言程序中使用的规则。

11

ORDER BY子句

12

drop是完全删除表,包括表结构
delete是删除表数据,保留表的结构,而且可以加where,只删除一行或者多行
truncate 只能删除表数据,会保留表结构,而且不能加where

13

写法顺序:select--from--where--group by--having--order by
执行顺序:from--where--group by--having--select--order by
就是select要放后面,如果有order by,则order by放最后,因为order by 是对结果进行排序

14

db_accessadmin 可以添加、删除用户的用户
db_datareader 可以查看所有数据库中用户表内数据的用户
15

理解datediff(dd,RDDATE,getdate())==0含义,即返回以日为单位(dd),和当前日期(getdate)相差为0日的RDDATE。
这里用这个函数的意义在于,RDDATE包括日期和时间,这里因为有时间,和getdate不能直接比较,所以用datediff转换为范围。

16

All:对所有数据都满足条件,整个条件才成立;
Any:只要有一条数据满足条件,整个条件成立;
Some的作用和Any一样

17

INSERT INTO & SELECT INTO
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

18

19

修改表test_tbl字段i的缺省值为1000,可以使用SQL语句( )

ALTER TABLE test_tbl ALTER i SET DEFAULT 1000;

CHANGE 用来修改字段名字以及类型
modify 用来修改字段类型
alter table 表名 alter column 字段名 set default 默认值 用来修改字段数据

20

处理效率:drop>trustcate>delete
drop删除整个表;trustcate删除全部记录,但不删除表(只删除表的数据不删除表的结构);delete删除部分记录
delete不影响所用extent,高水线保持原位置不动;trustcate会将高水线复位。

21

所有的统计函数都会忽略空值(null)。
A :统计所有学生的平均分,就算成绩为空的学生,最后计算count()时也作为分母基数,计算得到所有学生的平均分。
B :与A一样,因为id主键非空,count(id)所得分母基数是所有学生。
C : 与B一样,非空属性sno。
D :由于score字段的值可能是空,空值在统计时忽略,所以count(score)和sum(score)统计的只是score不为空的学生,计算得到的平均分也只是有成绩的学生的平均分,无法计算所有学生的平均分。
E: count(1)与count(
)一样。
F:avg(score)会忽略空值,故计算结果为有成绩的学生的平均分。

posted @ 2021-07-21 20:33  zydeyu  阅读(154)  评论(0编辑  收藏  举报