SQL sever 各种查询语句和建表语句Word格式文档下载.docx

上传人:b****1 文档编号:4380832 上传时间:2023-05-03 格式:DOCX 页数:21 大小:23.12KB
下载 相关 举报
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第1页
第1页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第2页
第2页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第3页
第3页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第4页
第4页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第5页
第5页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第6页
第6页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第7页
第7页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第8页
第8页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第9页
第9页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第10页
第10页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第11页
第11页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第12页
第12页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第13页
第13页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第14页
第14页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第15页
第15页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第16页
第16页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第17页
第17页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第18页
第18页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第19页
第19页 / 共21页
SQL sever 各种查询语句和建表语句Word格式文档下载.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SQL sever 各种查询语句和建表语句Word格式文档下载.docx

《SQL sever 各种查询语句和建表语句Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SQL sever 各种查询语句和建表语句Word格式文档下载.docx(21页珍藏版)》请在冰点文库上搜索。

SQL sever 各种查询语句和建表语句Word格式文档下载.docx

NULL

CONSTRAINTFK_Worker_Company

FOREIGNKEYREFERENCESCompany(CompanyID)

CREATETABLEProject

ProjectID 

CONSTRAINTPK_Project

ProjectName 

NVARCHAR(20)NOTNULL,

ProjectPlaceNVARCHAR(10)NULL

CREATETABLEEnroll

Job 

MonthCount 

MonthSalary 

CONSTRAINTPK_Enroll

PRIMARYKEY(WorkerID,ProjectID),

CONSTRAINTFK_Enroll_Worker

FOREIGNKEY(WorkerID)REFERENCESWorker(WorkerID),

CONSTRAINTFK_Enroll_Project

FOREIGNKEY(ProjectID)REFERENCESProject(ProjectID)

INSERTINTOCompany(CompanyID,CompanyName,CompanyAddress)

VALUES('

A01'

北京公司'

北京海淀区'

B24'

上海公司'

上海闵行区'

C13'

福建公司'

福建福州鼓楼区'

D00'

台湾%公司'

台北县台北市'

INSERTINTOWorker(WorkerID,WorkerName,WorkerSex,WorkerAge,WorkerJob,Salary,CompanyID)

A0101'

黄伟强'

33,'

工程师'

2100,'

A0102'

陈至'

 

'

36,'

高级工程师'

4300,'

B2424'

林发清'

43,'

5000,'

C1313'

陈华仁'

35,NULL,2500,'

C1315'

傅星'

23,'

助理工程师'

2000,'

X0001'

赵苑言'

NULL,NULL,3000,NULL)

INSERTINTOProject(ProjectID,ProjectName,ProjectPlace)

101'

国道'

四川成都'

202'

高速公路'

NULL)

303'

大桥'

天津南开区'

INSERTINTOEnroll(WorkerID,ProjectID,Job,MonthCount,MonthSalary)

项目经理'

18,1000)

NULL,12,800)

NULL,23,800)

NULL,17,650)

施工员'

14,800)

15,900)

监理'

20,1000)

--1.

SELECT*FROMWorker

--2.

SELECTWorkerNameAS姓名,SalaryFROMWorker

--3

SELECTWorkerID,Salary/22.5FROMWorker

SELECTWorkerID,Convert(Int,Salary/22.5)FROMWorker

SELECTWorkerID,CAST(Salary/22.5ASINT)FROMWorker

SELECTWorkerID,Salary/22.5ASDaySalaryFROMWorker

SELECTWorkerIDAS员工号,Salary/22.5AS日工资FROMWorker

SELECTWorkerID员工号,Salary/22.5日工资FROMWorker

SELECT员工号=WorkerID,日工资=Salary/22.5FROMWorker

SELECT[INT员"

工"

号]=WorkerID,Salary/22.5"

日[工]资"

FROMWorker

--4.

Select*FromEnroll

WhereMonthCount>

15

--5.

Select*

FromCompany

Where'

=CompanyID

--6

SelectProjectName

FromProject

WhereProjectPlace='

四川'

--7

FromWorker

WhereWorkerNameLIKE'

陈%'

--8

%言'

--9

张%言'

--10

WhereCompanyNameLIKE'

%司%'

%%%'

WhereWorkerIDLIKE'

_01_2'

陈__'

--11

[傅赵]%'

--12

[^傅赵]%'

WhereWorkerNameNOTLIKE'

WhereNOTWorkerNameLIKE'

--13

WhereCompanyAddressIN('

--13.5

%+%%'

ESCAPE'

+'

--14

WhereWorkerAgeBetween20And30

--15

WhereWorkerAgeNOTBetween20And30

WhereNOTWorkerAgeBetween20And30

--17

WhereWorkerAgeISNULL

WhereWorkerAgeISNOTNULL

--19

OrderBySalary

OrderBySalaryASC

--20

OrderBySalaryDESC

--21

OrderByCompanyID,SalaryDESC

--22

SelectTOP1*

OrderByWorkerAgeAsc

--23

SelectDistinctCompanyID

/****************************

*回顾

*

*索引的概念

*简单查询

选择全部、部分字段

计算字段

字段重命名

*选择查询WHERE

基本的比较条件>

<

=>

=<

>

!

<

=

多个条件的逻辑连接NOTANDOR

字符串的LIKE匹配%_[][^][acegh][A-Z]

IN和BETWEEN的范围比较

空值的判断IS[NOT]NULL

*结果排序

ORDERBY

TOPn[PERCENT](SQLServer)

LIMIT(mysql)

ROWID(Oracle)

****************************/

--ANSI:

yyyy-MM-ddHH:

mm:

ss.ttt

SELECTMONTH('

2009-9-2710:

24:

36.234'

*本次计划

*分组查询

聚合函数

GROUPBY子句

HAVING子句

混合使用

*连接查询

等值连接

不等值连接

自连接

/*

之前的查询,无论怎么过滤,都是针对原始数据的

假如要查询统计数据,则需要使用聚合函数

*/

--例:

查询工程师的平均年龄

SELECTWorkerAge

SELECTAVG(WorkerAge)ASAvgAge

查询工程师的最大、最小年龄

SELECTMAX(WorkerAge)ASMaxAge,MIN(WorkerAge)ASMinAge

查询在编号101的项目中工作的工程师人数

SELECTCOUNT(WorkerID)ASWorkerCount

FROMEnroll

WHEREProjectID='

聚合函数对符合条件的记录的指定字段进行统计查询

五个聚合函数:

MIN、MAX、COUNT、SUM、AVERAGE

注意各自的特点

可以先用WHERE进行记录选择

求工程师年龄的个数,和工程师个数

-- 

以及性别的种类数

SELECTCOUNT(WorkerAge)ASAgeCount,

COUNT(*)ASWorkerCount,

COUNT(DISTINCTWorkerSex)ASSexCount

注意观察:

聚合函数对空值(NULL)的处理

查询各个项目所发放的总工资

--思路,即将各工程师参加项目的月津贴乘以月份,再累加

SELECTSUM(MonthSalary*MonthCount)ASTotalSalary

假如要对不同类型的数据分别进行统计,怎么进行?

计算每个工程师参加的项目数量

SELECTWorkerID,COUNT(*)ASProjectCount

GROUPBYWorkerID

GROUPBY子句首先将记录根据指定的字段进行分组

然后对各个组分别计算汇总

查询每个项目参与的工程师数量,以及月工资总和

SELECTProjectID,COUNT(*)ASWorkerCount,

SUM(MonthSalary)ASSalarySum

GROUPBYProjectID

特别的,分组查询时,在SELECT中出现的字段只能是以下两种

分组字段

如:

SELECTWorkerNameFROMWorkerGROUPBYCompanyID

是非法的,为什么?

在进行聚合查询之前,可以用WHERE子句对记录进行选择

那么假如需要对聚合后的结果进行选择,用什么办法?

HAVING子句:

用于对分组后的结果进行筛选

查询公司人数超过2人的公司编号,以及平均工资

SELECTCompanyID,AVG(Salary)ASAvgSalary

GROUPBYCompanyID

HAVINGCOUNT(*)>

=2

注意HAVING和WHERE的区别

以上各种查询可以混合使用

查出拥有高级员工(指工资超过3000的工程师)

超过2人的公司

--并计算高级员工的人数、平均工资和最高工资

当包含多个子句进行查询时,各子句被执行的顺序是:

FROM-->

WHERE-->

GROUPBY-->

HAVING-->

SELECT-->

ORDER-->

TOP

连接查询

连接查询就是对多个表进行连接,将多个表的数据结合在一起

通常,连接的表都是有外键关系的表

连接查询就是关系连接运算的实现

连接运算是为了将设计时拆分的表组合起来

查询出每个工程师的信息,以及他工作的单位信息

SELECTWorker.WorkerName,Company.CompanyName

FROMWorkerINNERJOIN

CompanyONWorker.CompanyID=Company.CompanyID

连接查询的主要工作在FROM子句中

基本语法为:

FROM<

表1>

连接类型>

JOIN<

表2>

ON<

连接条件>

连接类型包括:

内连接、外连接、交叉连接等

下面叙述的主要针对内连接

连接条件,往往是两个表之间的关联字段,一般是等值比较

查询包括工程师信息的参加工作情况

对于连接查询而言,经过JOIN的两个表,构成了一个新表

我们在之前所讲述的所有查询手段,都可以应用于这个新表

查询工资超过3000的工程师的姓名和公司名称、电话

在连接查询中,字段可以用<

表名>

.<

字段名>

来引用

尤其对于两边同名的字段,必须加表名进行限定

对于重名的字段,往往需要用字段别名的方式在结果中加以区分

名称不重复的字段,可以不限定,但是建议限定

单表查询也可以在字段名前加表名进行限定,但是往往不需要

查询中为了简化书写,可以给表起别名

表>

[AS]<

别名>

哪怕是单表查询也可以加别名,但是没有太大意义

别名往往用简单的字母A、B、C等,但往往用表名的简称

用表别名的方式重写上面的例子

SELECTw.WorkerName,co.CompanyName

FROMWorkerwINNERJOIN

CompanycoONw.CompanyID=co.CompanyID

自然连接

在数据库的设计中,关联的字段(外键)往往会采取和主键表相同的命名

此时我们可以写成自然连接

语法:

外键表>

NATURALJOIN<

主键表>

不需要说明任何条件,自动找同名字段进行等值连接

但是:

SQLServer不提供本语法,以上语法在Oracle中提供

通常我们用INNERJOIN替代

在实际应用中,参与连接的表可以不止两个,可以为多个

多表连接,一般是分部进行的,以内连接为例,语法如下:

INNERJOIN<

条件>

表3>

我们可以理解为先连接前两个,形成一个新表,然后新表再连接第三个表

查询完整的参加工作情况,包括工程师、公司和工程项目信息

多表连接时,我们可以用括号指定连接顺序

对于内连接,因为满足交换律、结合律,因此都是等价的

查询在上海的公司中工资超过3000的工程师的人数、平均工资

预习

*自连接

*外连接

*嵌套查询(子查询)

Where

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2