3.sql进阶文档(知识点)

CASE

在数据库中,对数据进行比对,

两种用法

第一种,不对任何列进行case 条件判断

SELECT

Sid,English
AS
en,

CASE

WHEN
English
>=60 THEN
‘及格‘

WHEN
English
<60 THEN
‘不及格‘

END
AS
jige

FROM
dbo.Score

从case开始:开始判断,判断什么?不知道,,当when开始的时候才知道判断什么东西

?

如果在判断一个列的值的时候,满足多个条件(when),就先满足谁就执行谁

类洗浴c#中的 if else if else if else if else if else if else if.........else

SELECT

Sid,English
AS
en,

CASE

WHEN
English
>60 THEN
‘英语及格‘

WHEN
Math
>60 THEN
‘数学及格‘

ELSE
‘都不及格‘

END
AS
jige

FROM
dbo.Score

?

?

?

第二种 直接case列 值判断

?

SELECT

CASE
ptId

WHEN 1 THEN
‘家人‘

WHEN 2 THEN
‘同事‘

WHEN 3 THEN
‘同学‘

END

FROM
dbo.PhoneType

从case开始,一开是就知道要判断ptid的值,如果这个值是1就输出"家人"

?

相当于c#中的switch(age) case

?

例1:

SELECT
id,Name,

(CASE
Gender

WHEN 0 THEN
‘女‘

WHEN 1 THEN
‘男‘

END) AS
Gender,Salary

FROM
dbo.Teacher

在结果集中,可以包含两个列,列名完全相同的,

?

在Ado中,如果我们习惯了用列名来取数据,这样就会出问题了,

最终,会取出哪个数据呢?

?

例2:

SELECT

Sid,English
AS
en,

CASE

WHEN
English
>60 THEN
‘及格‘

WHEN
English
<60 THEN
English

END
AS
jige

FROM
dbo.Score

说明:多个then后面的所有数据类型都必须相同

SELECT

Sid,English
AS
en,

CASE

WHEN
English
>60 THEN
‘及格‘

WHEN
English
<60 THEN
CAST(English
AS
NVARCHAR(10))

END
AS
jige

FROM
dbo.Score

如果多个then后面的数据类型不相同可以做数据类型转换

?

子查询

在一个查询中,有另外一个查询,这个查询就叫做主查询的子查询

?

?

SELECT
*
FROM
dbo.Student
WHERE
CId =
(SELECT
id
FROM
dbo.Classes
WHERE
Name=‘四期班‘)

把小括号里面的查询的结果给cid,然后主查询继续执行

?

SELECT
*
FROM
dbo.Student
WHERE
CId =
(SELECT * FROM
dbo.Classes
WHERE
Name=‘四期班‘)

Error:在选择列表中只能指定一个表达式。

小括号内的查询返回的是多个列,然后cid去看一下,就不知道到底是用哪一个列,然后就报错了

?

一般子查询都是用在where条件后面的,

?

--要查出所有九期班以后的所有学员

--1.先查出所有九期班以后的班级,只取id

--2.根据id查找所有符合条件的学员

SELECT
*
FROM
dbo.Student
WHERE
CId IN
(

SELECT
id
FROM
dbo.Classes
WHERE
id>(

SELECT
id
FROM
dbo.Classes
WHERE
Name =‘九期班‘

)

)

?

只有子查询返回的结果集是一行一列的才能当做值来用,才能用等值判断

?

In 是判断一个值,是否在后面的所有值里面出现过,

Not in是判断一个值,是否在后面的所有值里面没有出现过,

?

?

EXISTS

SELECT
*
FROM
dbo.Student
WHERE EXISTS
(SELECT * FROM
dbo.Classes
WHERE
dbo.Classes.id=dbo.Student.CId)

?

SELECT
*
FROM
dbo.PhoneNum
WHERE EXISTS
( SELECT
‘xxxx‘
FROM
dbo.PhoneType
WHERE
dbo.PhoneNum.pTypeId=dbo.PhoneType.ptId )

?

EXISTS是引用了主查询的数据进行子查询的一种方式,子查询中,只做条件判断,不做任何列的输出,

?

?

分页查询

AS
t 可以吧结果集当成一张表,t就是这张表的表名,我们可以对这张表做任何查询操作

?

SELECT
*
FROM

(SELECT
TOP 10 * FROM
dbo.Area
WHERE
ar_id NOT
IN
(SELECT
TOP 10 ar_id
FROM
dbo.Area)
ORDER
BY dbo.Area.ar_id
ASC)

AS
t
ORDER
BY
t.ar_id
DESC

?

--第二种分页方式

SELECT
*
FROM

(SELECT *,ROW_NUMBER()
OVER(ORDER
BY
ar_id)
AS nrows
FROM
dbo.Area)
AS t

WHERE
t.nrows BETWEEN 11 AND 20

ROW_NUMBER()会在结果集的基础上加上了一列,这一列从1开始,中间不会有间断的

然后配合between and使用,效率比较高

?

JOIN

把两张表或多张表的数据行,按照指定的规则连接在一起,

--1:查询所有学生的姓名、年龄及所在班级

SELECT
dbo.Student.Name,Age,dbo.Classes.Name
FROM
dbo.Student

JOIN
dbo.Classes
ON
dbo.Classes.id=Student.CId

Join 连击多张表的数据时,会筛选要满足所有连接条件的数据才会留下来,其中任何一个条件不满足都不会出现数据

LEFT JOIN

--4:查询所有学生(参加及未参加考试的都算)及成绩

SELECT
*
FROM
dbo.Student

LEFT
JOIN
dbo.Score
ON
dbo.Student.id =dbo.Score.Sid

在普通的join基础上,优先显示左边的表的数据,如果能满足连接条件,就显示连接之后的右表的数据,如果不满足连接条件,还是会显示左表数据,右表数据部分就是null(不知道)

?

RIGHT JOIN

在普通join的基础上,优先显示右表的数据,如连接条件满足,就显示左表的数据,如果不满足就显示为null

--5:请查询出所有没有参加考试

SELECT
*
FROM
dbo.Student
WHERE

id
NOT
IN
(

SELECT
dbo.Student.id

FROM
dbo.Student

RIGHT
JOIN
dbo.Score
ON
dbo.Student.id = dbo.Score.Sid

WHERE
dbo.Student.id IS
NOT
NULL

)

Join配合子查询

?

?

INNER JOIN

其实就是join,我们在用join的时候,系统就默认识别为innerjoin了

?

CROSS JOIN

会得出两张表的乘积行

?

?

视图

视图其实就是一个虚拟表,这张虚拟表的数据,其实是来自于一个查询,这个查询查询了其他一个或者多个表的数据,

当我们查询一个视图的时候,其实就是在查询"视图的查询的结果集",这个结果集里面有什么列,就只能显示什么列,

?

可以做修改

?

--用sql语句创建一个视图

CREATE
VIEW
view_phone

AS

SELECT
pId,pName,pCellPhone,pHomePhone,ptName
FROM
dbo.PhoneNum

JOIN dbo.PhoneType
ON
dbo.PhoneNum.pTypeId = dbo.PhoneType.ptId

?

SELECT
*
FROM
View_Phone

INSERT
INTO
View_Phone
VALUES(‘貂蝉‘,‘13546869526‘,‘010-5264879‘,‘同事‘)

Insert语句报错:视图或函数 ‘View_Phone‘ 不可更新,因为修改会影响多个基表。

Insert语句在不会影响多张表的前提下,可以用的,(只影响一张表)

?

在做增改的时候,如果没有视图没有吧原始表,不能为空的字段显示出来,那么,新增是不成功的,

?

修改的时候,

UPDATE
View_Phone
SET
pName=‘张三‘
WHERE
pId=15

这样可以,因为,视图显示了pName字段,我们也只修改了一个字段,也就是一张表

UPDATE
View_Phone
SET
pName=‘张三‘,ptName=‘朋友‘
WHERE
pId=15

这样是错误的,因为修还了两张表的数据

?

?

视图只用来做查询,一次增改操作只能针对一张表,新增进去的数据,还不能违的反原始表约束

?

删除是一定会影响多多张表的数据,所以是绝对不可以的

?

索引:

  1. 模糊查询不能在参数位置添加%....
  2. 非聚集索引:相反
  3. 唯一索引:唯一约束?!

?

临时表

4.局部临时表--#--,类似局部变量的作用域。在连接断开,或者存储过程调用完后删除。

5.全局临时表--##--,作用域

6.临时数据表存在tempdb数据库

?

?

时间: 2024-11-13 03:58:43

3.sql进阶文档(知识点)的相关文章

Oracle、pl/sql安装文档

oracle10g.pl/sql安装文档 Oracle在各种管理系统项目中是不可或缺到,pl/sql也是非常好用的图形化管理工具.初学者(我自己就是证明了)经常在这两个工具上消磨宝贵到时间.趁今天有闲,整理下oracle和plsql到安装方式(后附oracle和plsql到安装包),以备后用及方便他人.个人笔记本是win7 64位,实测win8可用. 下载并解压oracle安装包如下图: 右键单击setup.exe,在菜单中选择兼容性疑难解答,弹出新窗口. 选择尝试建议到设置,在跳转到页面中启动

Azure 文档 (SQL 数据仓库, Azure SQL 数据库文档)

Azure 文档: https://docs.azure.cn/zh-cn/#pivot=products&panel=databases SQL 数据仓库文档:https://docs.azure.cn/zh-cn/sql-data-warehouse/ 了解如何使用 SQL 数据仓库,其结合了 SQL Server 关系数据库与大规模并行处理. 教程和其他文档介绍了如何将数据加载到数据仓库,并分析.管理和导出数据. Azure SQL 数据库文档: https://docs.azure.cn

Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简介 SpringData  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的find的操作,我们上一篇介绍了基本文档的查询,我们今天介绍分页查询,分页查询是返回到匹配文档的游标,可以随意修改查询限制.跳跃.和排序顺序的功能. 我

4.sql进阶02(知识点)

条件表达是里面,可以使用一个只有一行一列的查询作为判断的一个根据 IF( (SELECT COUNT(id) FROM dbo.Student) >10) BEGIN PRINT '好多人啊' END ELSE begin PRINT '人好少啊' END ? ? 输出参数 ALTER PROC usp_GetStu @iid INT = 2,--有默认值的参数可以不传 @name nvarchar(10), --对于没有写默认值的参数,在调用的时候必须传递参数, --在存储过程的参数被定义的时

php文档知识点整理(函数、方法、文件加载)

函数: 函数定义形式: function  函数名 (形参1,形参2,.... ){ } 函数参数:(2种) 形参: 1,形参一定是一个变量名! 2,该变量名只能是在该函数中有效的变量名: 3,而且只在该函数调用并执行时有效,函数结束,通常这些变量也就"销毁". 实参: 实参就是一个"实际数据", 该数据可以是一个"直接数据"(比如5,"abc"),也可以是一个变量中存储的数据. 实参的作用是将其数据"赋值给&quo

EBS取Web字段SQL操作文档

1)  安全性—>责任-à定义 在这个路径下,输入责任名称,可以查询这个责任的请求组的名称 2)  organization_id 和 org_id的功能 3)  查找网页上的字段 Navigate: System Administrator > Profiles > System 2. Query Profile Name = FND: Diagnostics and set it to 'Yes' at the site level. Log out of the applicati

第一百一十四节,JavaScript文档对象,DOM进阶

JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容

linux命令:脚本编程知识点${#VARNAME} ${VARNAME#* } . FILENAME 读取文档内容

脚本编程知识点: * FILE=/usr/local/src TEST=${FILE#*/}:$TEST结果为usr/local/src, 以/为关键字,删除从左边数第一个/及关键字/左边的所有字符串. DEST=${FILE##*/}:$DEST结果为src,以/为关键字,删除最后一个关键字/及关键字/左边的所有字符串. 从左往右时,*号需在关键字左边 DOTEST=${FILE%/*}:$DOTEST结果为/usr/local,以/为关键字,删除从右边数第一个/及关键字/右边的所有字符串.

关于SQL Server 2012 手动安装帮助文档

大家以为安装帮助文档很简单,但是其实不然,这其中还有那么一点点道道.今天我就来给大家演示一下! 首先到microsoft官网上下载Microsoft SQL Server 2012 产品文档,然后将.exe文件解压. http://www.microsoft.com/zh-CN/download/confirmation.aspx?id=347 重点的重点:找到其中的HelpContentSetup.msha文件,使用editplus(或是其他文档编辑软件)打开这个文件,将zh-zn 改为 zh