qq群关系数据库查询.docx

上传人:b****7 文档编号:9027697 上传时间:2023-02-02 格式:DOCX 页数:11 大小:20.32KB
下载 相关 举报
qq群关系数据库查询.docx_第1页
第1页 / 共11页
qq群关系数据库查询.docx_第2页
第2页 / 共11页
qq群关系数据库查询.docx_第3页
第3页 / 共11页
qq群关系数据库查询.docx_第4页
第4页 / 共11页
qq群关系数据库查询.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

qq群关系数据库查询.docx

《qq群关系数据库查询.docx》由会员分享,可在线阅读,更多相关《qq群关系数据库查询.docx(11页珍藏版)》请在冰豆网上搜索。

qq群关系数据库查询.docx

qq群关系数据库查询

qq群关系数据库查询

篇一:

数据库简单与复杂查询

例5.1部门的编号、名称和位置

select*fromdepartment//星号“*”可以在select子句中表示“所有的属性”

例5.2部门的编号、名称和位置

selectdept_no,dept_name,locationfromdepartment

例5.3查询位于Dallas的部门编号和名称

selectdept_no,dept_name

fromdepartment

WHERElocation=Dallas

例5.4查询预算额的0.51倍大于60000的项目名称

SELECTproject_name

FROMproject

WHEREbudget*0.51>60000

例5.5查询在部门编号为d1的部门工作且职员编号为25348或职工名称为‘Matthew’的雇员信息。

SELECT*

FROMemployee

WHEREemp_no=25348ORemp_fanme=Matthew

ANDdept_no=d1

例5.6查询不在部门编号为d1的部门工作的职员编号和姓名

SELECTemp_no,emp_lname

FROMemployee

WHERENOTdept_no=d1

例5.7获取编号既不是10102也不是9031的职员的所有列。

SELECT*

FROMemployee

WHEREemp_noNOTIN(10102,9031)

例5.8获取预算在$95000~$120000之间的所有项目的名称和预算。

SELECTproject_name,budget

FROMproject

WHEREbudgetBETWEEN95000AND120000

例5.9获取预算小于$95000和大于$120000之间的所有项目的名称。

SELECTproject_name

FROMproject

WHEREbudgetNOTBETWEEN95000AND120000

例5.10获取为项目2工作的,具有未知工作的所有职员的职员编号和相应的项目编号。

SELECTemp_no,project_no

FROMworks_on

WHEREproject_no=‘p2ANDjobISNULL

系统函数ISNULL允许在显示时用指定的数值来替代NULL

SELECTemp_no,ISNULL(job,’Jobunknowntask’)

FROMworks_on

WHEREproject_no=‘p2ANDjobISNULL

例5.11找出所有姓是以字母J开头的职员的名字和编号。

SELECTemp_fname,emp_lname,emp_no

WHEREemp_lnameLIKE‘j%’

例5.12找出所有名中第二个字母是a的职员的名字和编号。

SELECTemp_fname,emp_lname,emp_no

FROMemployee

WHEREemp_fnameLIKE‘_a%’

例5.13获取所在地名从C到F的字母打头的所有部门的详细资料。

SELECT*

FROMDEPARTMENT

WHERELOCATIONLIKE‘[C-F]%’

例5.14获取姓的打头字母不是J,K,L,M,N,O,并且名的开头字母是E或者Z的所有职员的编号和名字。

SELECT*

FROMEMPLOYEE

WHEREEMP_LNAMELIKE[^J-O]%AND

emp_fnameLIKE[EZ]%

例5.15所有被方括号括起来的通配符(%,_,[,],^)都表示本来的意思。

SELECTproject_no,project_name

FROMproject

WHEREproject_NAMELIKE‘%[_]%’

例5.16获取在研究部门工作的所有职员的名和姓。

SELECTemp_fname,emp_lname

FROMemployee

WHEREdept_no=

(SELECTdept_no

FROMDEPARTMENT

WHEREdept_name=research)

例5.17获取职员moser参与的项目编号。

SELECTDISTINCTproject_no

FROMworks_on

WHEREemp_no=

(SELECTemp_no

FROMemployee

WHEREemp_lname=moser)

例5.18获取部门位于Dallas的所有职员的详细信息。

SELECT*

FROMemployee

WHEREdept_noin

(SELECTdept_no

FROMdepartment

WHERElocation=Dallas)

例5.19获取为Apollo项目工作的所有职员的姓。

SELECTemp_lname

FROMemployee

(SELECTemp_no

FROMworks_on

WHEREproject_noin

(selectproject_no

fromproject

whereproject_name=Apollo)

例5.20获取不是在项目上花费了最多时间的所有职员的编号、项目编号和工作名称。

SELECTDISTINCTEMP_NO,PROJECT_NO,JOB

FROMworks_on

WHEREenter_date>any

(SELECTenter_date

FROMworks_on

例5.21获取为项目p1工作的所有职员的名和姓。

SELECTDISTINCTemp_fname,emp_lname

FROMemployee

WHEREemp_no=any

(SELECTemp_no

FROMworks_on

whereproject_no=p1

例5.22选择编号大于等于10000的所有职员的名字。

SELECTDISTINCTemp_fname,emp_lname

FROM(SELECT*

FROMemployee

WHEREemp_no>=10000)ASemp_no10000

例5.23使用项目编号和工种对所有职员分组。

SELECTproject_no,job

FROMworks_on

GROUPBYproject_no,job

例5.24看如下的查询例子,分析正确与否

SELECTemp_lname,MIN(emp_no)

FROMemployee

例5.25获取最小的职员编号

SELECTMIN(emp_no)min_employee_number

FROMemployee

例5.26获取最小的职员编号和姓

SELECTemp_no,emp_lname

FROMemployee

WHEREemp_no=

(SELECTMIN(emp_no)min_employee_number

FROMemployee)

例5.26获取表WORKS_ON中进入时间最晚的经理的职员编号

SELECTemp_no

FROMWORKS_ON

WHEREenter_date=

(SELECTMAX(enter_date)

FROMWORKS_ON

WHEREjob=Manager

例9.27计算所有项目预算的总和

SELECTSUM(BUDGET)SUM_OF_BUDGETS

FROMPROJECT

例5.28计算每个项目中不同工种的数目

SELECTproject_no,COUNT(DISTINCTjob)job_count

FROMworks_on

groupbyproject_no

例5.29每个项目中有多少职员为其工作

SELECTproject_no,COUNT(*)emp_count

FROMworks_on

groupbyproject_no

例5.30获取招募的总人数少于4个的项目

SELECTproject_no

FROMworks_on

groupbyproject_no

havingcount(*)4

例5.31获取职员的名字和职员编号,以职员编号升序排列

SELECTemp_no,emp_fname,emp_lname

FROMemployee

ORDERBYemp_noasc;//desc表示降序,asc表示升序。

Groupby默认使用升序

5.32获取编号小于2000的职员所在的部门和其编号,并以姓和名升序排列

SELECTemp_fname,emp_lname,dept_no

FROMemployee

whereemp_no20000

ORDERBYemp_fname,emp_lname

5.33对于每个项目编号,取得其所有的项目编号以及职员数量,以职员数量降序排列。

SELECTproject_no,COUNT(*)emp_quantity

FROMworks_on

groupbyproject_no

ORDERBY2DESC

5.34获取属于部门D1或者参加项目的时间早于1998年1月1日的所有职员的编号,并以升序排列。

SELECTemp_noFROMemployeewheredept_no=d1

UNION

SELECTemp_noFROMworks_onWHEREenter_date01.01.1998

ORDERBY1

--建库与建表

/*Department(dept_no,dept_name,location)

Employee(emp_no,emp_fname,emp_lname,dept_no)

Project(project_no,project_name,budget)

Works_on(emp_no,project_no,job,enter_date)*/

CREATEDATABASEBranch

ONPRIMARY(

NAME=Branch,

FILENAME=D:

\Web信息系统2\database\branch.mdf,

SIZE=100MB,MAXSIZE=200,FILEGROWTH=20)

LOGON(

NAME=branchlog1,

FILENAME=D:

\Web信息系统2\database\branchlog.ldf,

SIZE=100MB,MAXSIZE=200,FILEGROWTH=20)

useBranch

go

CREATETABLEDepartment(

dept_namevarchar(50)NOTNULL,

dept_novarchar(8)NOTNULL,

locationvarchar(20),

CONSTRAINTprim_DepartmentPRIMARYKEY(dept_no),

CREATETABLEEmployee(

emp_fnamevarchar(50)NOTNULL,

emp_lnamevarchar(50)NOTNULL,

emp_novarchar(8)NOTNULL,

dept_novarchar(8)NOTNULL,

CONSTRAINTprim_EmployeePRIMARYKEY(emp_no),

CONSTRAINTforeign_DepartmentFOREIGNKEY(dept_no)REFERENCESDepartment(dept_no)

CREATETABLEProject(

project_namechar(50)NOTNULL,

project_nochar(8)NOTNULL,

citychar(20),

budgetfloat,

CONSTRAINTprim_ProjectPRIMARYKEY(project_no),

CONSTRAINTC_NAMECHECK(budget>=0)

篇二:

数据库查询操作详解

一、数据查询-----单表查询

(1)查询语句格式

Select[all|distinct]目标列表达式>[,目标列表达式>]?

?

From表名或视图>[,表名或视图>]?

?

[where条件表达式>]

[groupby列名1>[having条件表达式>]]

[orderby列名2>[asc|desc]];

注:

[all|distinct]中all为缺省值,取消结果中的重复列则用distinct;

[asc|desc]中asc为缺省值,表示按照升序排列。

对于空值,若按照升序排,则含空值的元组显示在最后面;若按降序排,则空值的元组最先显示。

(2)查询指定列

a)查询部门表dept中所有部门的详细信息,并且列名用汉字表示。

selectDNO,DNAME,ADDR

fromdept;

b)查询部门表dept中人力资源部的部门编号。

selectDNO

fromdept

whereDNAME=人力资源部;

目标列表达式>中各个列的先后顺序可以与表中的顺序不一致.

(3)查询全部列

查询全体学生的详细记录

Select*

FromStudent;

(4)将查询结果的列名用别名显示

查询部门表dept中所有部门的详细信息,并且列名用汉字表示。

selectDNO部门编号,DNAME部门名称,ADDR部门地址

fromdept;(5)在查询的结果中插入新的一列用来显示指定的内容

SelectSnameNAME,’YearofBirth:

’BIRTH,SbirthBIRTHDAY,SdeptDEPARTMENT

FromStuent;

则显示的结果中,每个元组的第二列均为”YearofBirth:

”,此列在原数据库中是不存在的.

(6)查询经过计算的值

Select子句的目标列表达式>不仅可以是表中的属性列,也可以是表达式。

例:

查询全体学生的姓名及其出生年月

SelectSname,2022–Sage/*当时年份减去年龄为出生年月

FromStufent;(7)设置查询显示的字母全为大写(或小写)

SelectSname,’YearofBirth:

’,2022–Sage,LOWER(Sdept)

FromStudent;

此时Sdept显示的结果全为小写

SelectSname,’YearofBirth:

’,2022–Sage,UPPER(Sdept)

FromStudent;

注:

要设置查询表中的属性列名的大小写可以用LOWER,UPPER。

(8)消除取值重复的行

a)查询雇员表empl中出现的所有部门编号,要求无重复。

selectdistinctDNO

fromEMPL;

b)查询项目表proj中所有项目名称。

selectPNAME

fromPROJ

等价于selectallPNAME

fromPROJ

(9)查询满足条件的元组

注:

Between后是范围的下限,and后是范围的上限.查询结果中包含上下限的结果.a)查询成绩不及格的学生的学号

SelectdistinctSno

FromSC

WhereGrade60;

b)查询年龄在20到30(包含20及30)之间的学生的姓名、系别和年龄

SelectSname,Sdept,Sage

FromStudent

WhereSagebetween20and30;

c)查询计算科学系(CS),数学系(MA),信息系(IS)学生的姓名和性别

SelectSname,Ssex

FromStudent

WhereSdeptin(‘CS’,’MA’,’IS’);(10)含通配符”%”的查询

%(百分号):

代表任意长度(长度可以为0)的字符串,例如a%b代表以a开头且以b结尾的任意长度的字符串,acb,afdsagasdsab,ab都满足。

例:

查询雇员表empl中姓名以“伟“字结尾的员工信息。

select*

fromEMPL

whereENAMElike%伟;(11)含通配符”_”的查询

_(下划线):

代表任意单个字符,例a_b代表以a开头且以b结尾的长度为3的字符串。

例:

查询姓“欧阳”且全名3个汉字的学生的姓名

SelectSname

FromStudent

WhereSnamelike‘欧阳__’;

注:

一个汉字占两个字符的位置(12)字符串本身含通配符的查询

使用使用escape‘换码字符>’。

查询以”DB_”开头,且倒数第三个字符为i的课程的详细情况。

Select*

FromStudent

WhereCnamelike‘DB\_%i__’escape‘\’;

注:

escape‘\’表示”\”为换码字符,则第一个”_”是普通的字符,后两个”_”表示通配符。

(13)涉及空值的查询

例:

查询所有有成绩的学生的学号

SelectSno

FromSC

WhereGradeISNULL;

注:

此处“IS”不能用”=”替代

(14)带排序的查询

查询工作表job中的工作信息,结果按工作天数升序排列。

select*

fromJOB

orderbyDAYSasc;

等价于

select*

fromJOB

orderbyDAYSasc;

查询雇员表empl中所有员工的详细信息,结果按员工姓名降序排列。

select*

fromEMPL

orderbyENAMEdesc;(15)含聚集函数的查询

聚集函数主要有:

Count([distinct|all]*)

Count([distinct|all]列名>)

Sum([distinct|all]列名>)

Avg([distinct|all]列名>)

Max([distinct|all]列名>)

Min([distinct|all]列名>)//统计元组个数//统计一列中值的个数//计算一列值的总和(此列必须是数值型)//计算一列值的平均值(此列必须是数值型)//求一列值中的最大值//求一列值中的最小值

注:

[distinct|all]缺省时为all.

在聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值.

例:

查询1号课程的学生的最高分数

Selectmax(Grade)

FromSC

WhereCno=‘1’;(16)到GROUPBY子句的查询

a)求各个课程号及相应的选课人数

selectCno,count(Sno)

fromSC

groupbyCno;

b)查询选修了3们以以上的课程的学生的学号

selectSno

fromSC

croupbySno

havingcount(*)>3;

注:

where子句与having子句短语的区别在于作用对象不同。

Where子句作用于基本表或视图,从中选择满足条件的元组;having子句作用与组,从中选择满足条件的组。

二、数据查询-----连接查询

若一个查询同时设计两个以上的表,则称之为连接查询。

(1)等值与非等值连接查询

格式如下:

[表名1>.]列名1>比较运算符>[表名2>.]列名2>

其中主要的比较运算符有:

=,>,,>=,=,!

=(或>)等.

此外连接谓词还可以有如下的形式:

[表名1>.]列名1>between[表名2>.]列名2>and[表名2>.]列名2>

当连接运算符为=时,称为等值连接,否则称为非等值连接。

注:

当属性列在查询的所有表中是唯一的时候则可以去掉前面的表名,否则必须加上表名。

例:

查询每个学生及其选修课程的情况.

SelectStudent.*,SC.*

FromStudent,SC

WhereStudent.Sno=SC.Sno;

(2)自身连接

例:

查询每一门课程的间接先修课(即先修课的先修课)

分析:

此时为Course表的自身连接,故要为Course表去两个别名,一个是first,一个是second。

Selectfirst.Cno,second.Cno

FromCoursefirst,Coursesecond

Wherefirst.Cpno=second.Cno;

(3)外连接

在上例中,没有显示202215123和202215125两个学生的信息,原因在于他们没有选课。

有时想以Student表为主体列出每个学生的基本情况及其选课情况,则需要使用外连接。

用外连接做上面的例题:

SelectStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Cgrade

FromStudentLEFTJOINSCON(Student.Sno=Sc.Sno);

/*也可以用USING来去掉上面结果中的重复值:

FromStudentLEFTJOINSCUSING(Sno);*/

注:

做链

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1