qq群关系数据库查询Word文档下载推荐.docx
- 文档编号:22163829
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:11
- 大小:20.32KB
qq群关系数据库查询Word文档下载推荐.docx
《qq群关系数据库查询Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《qq群关系数据库查询Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
WHEREproject_no=‘p2ANDjobISNULL
系统函数ISNULL允许在显示时用指定的数值来替代NULL
SELECTemp_no,ISNULL(job,’Jobunknowntask’)
例5.11找出所有姓是以字母J开头的职员的名字和编号。
SELECTemp_fname,emp_lname,emp_no
WHEREemp_lnameLIKE‘j%’
例5.12找出所有名中第二个字母是a的职员的名字和编号。
WHEREemp_fnameLIKE‘_a%’
例5.13获取所在地名从C到F的字母打头的所有部门的详细资料。
FROMDEPARTMENT
WHERELOCATIONLIKE‘[C-F]%’
例5.14获取姓的打头字母不是J,K,L,M,N,O,并且名的开头字母是E或者Z的所有职员的编号和名字。
FROMEMPLOYEE
WHEREEMP_LNAMELIKE[^J-O]%AND
emp_fnameLIKE[EZ]%
例5.15所有被方括号括起来的通配符(%,_,[,],^)都表示本来的意思。
SELECTproject_no,project_name
WHEREproject_NAMELIKE‘%[_]%’
例5.16获取在研究部门工作的所有职员的名和姓。
SELECTemp_fname,emp_lname
WHEREdept_no=
(SELECTdept_no
FROMDEPARTMENT
WHEREdept_name=research)
例5.17获取职员moser参与的项目编号。
SELECTDISTINCTproject_no
WHEREemp_no=
(SELECTemp_no
FROMemployee
WHEREemp_lname=moser)
例5.18获取部门位于Dallas的所有职员的详细信息。
WHEREdept_noin
FROMdepartment
WHERElocation=Dallas)
例5.19获取为Apollo项目工作的所有职员的姓。
SELECTemp_lname
(SELECTemp_no
FROMworks_on
WHEREproject_noin
(selectproject_no
fromproject
whereproject_name=Apollo)
)
例5.20获取不是在项目上花费了最多时间的所有职员的编号、项目编号和工作名称。
SELECTDISTINCTEMP_NO,PROJECT_NO,JOB
WHEREenter_date>
any
(SELECTenter_date
例5.21获取为项目p1工作的所有职员的名和姓。
SELECTDISTINCTemp_fname,emp_lname
WHEREemp_no=any
(SELECTemp_no
whereproject_no=p1
例5.22选择编号大于等于10000的所有职员的名字。
FROM(SELECT*
WHEREemp_no>
=10000)ASemp_no10000
例5.23使用项目编号和工种对所有职员分组。
SELECTproject_no,job
GROUPBYproject_no,job
例5.24看如下的查询例子,分析正确与否
SELECTemp_lname,MIN(emp_no)
例5.25获取最小的职员编号
SELECTMIN(emp_no)min_employee_number
例5.26获取最小的职员编号和姓
(SELECTMIN(emp_no)min_employee_number
FROMemployee)
例5.26获取表WORKS_ON中进入时间最晚的经理的职员编号
SELECTemp_no
FROMWORKS_ON
WHEREenter_date=
(SELECTMAX(enter_date)
WHEREjob=Manager
例9.27计算所有项目预算的总和
SELECTSUM(BUDGET)SUM_OF_BUDGETS
FROMPROJECT
例5.28计算每个项目中不同工种的数目
SELECTproject_no,COUNT(DISTINCTjob)job_count
groupbyproject_no
例5.29每个项目中有多少职员为其工作
SELECTproject_no,COUNT(*)emp_count
例5.30获取招募的总人数少于4个的项目
SELECTproject_no
havingcount(*)4
例5.31获取职员的名字和职员编号,以职员编号升序排列
SELECTemp_no,emp_fname,emp_lname
ORDERBYemp_noasc;
//desc表示降序,asc表示升序。
Groupby默认使用升序
5.32获取编号小于2000的职员所在的部门和其编号,并以姓和名升序排列
SELECTemp_fname,emp_lname,dept_no
whereemp_no20000
ORDERBYemp_fname,emp_lname
5.33对于每个项目编号,取得其所有的项目编号以及职员数量,以职员数量降序排列。
SELECTproject_no,COUNT(*)emp_quantity
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,
\Web信息系统2\database\branchlog.ldf,
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部门地址
(5)在查询的结果中插入新的一列用来显示指定的内容
SelectSnameNAME,’YearofBirth:
’BIRTH,SbirthBIRTHDAY,SdeptDEPARTMENT
FromStuent;
则显示的结果中,每个元组的第二列均为”YearofBirth:
”,此列在原数据库中是不存在的.
(6)查询经过计算的值
Select子句的目标列表达式>
不仅可以是表中的属性列,也可以是表达式。
例:
查询全体学生的姓名及其出生年月
SelectSname,2022–Sage/*当时年份减去年龄为出生年月
FromStufent;
(7)设置查询显示的字母全为大写(或小写)
SelectSname,’YearofBirth:
’,2022–Sage,LOWER(Sdept)
此时Sdept显示的结果全为小写
’,2022–Sage,UPPER(Sdept)
要设置查询表中的属性列名的大小写可以用LOWER,UPPER。
(8)消除取值重复的行
a)查询雇员表empl中出现的所有部门编号,要求无重复。
selectdistinctDNO
fromEMPL;
b)查询项目表proj中所有项目名称。
selectPNAME
fromPROJ
等价于selectallPNAME
(9)查询满足条件的元组
注:
Between后是范围的下限,and后是范围的上限.查询结果中包含上下限的结果.a)查询成绩不及格的学生的学号
SelectdistinctSno
FromSC
WhereGrade60;
b)查询年龄在20到30(包含20及30)之间的学生的姓名、系别和年龄
SelectSname,Sdept,Sage
FromStudent
WhereSagebetween20and30;
c)查询计算科学系(CS),数学系(MA),信息系(IS)学生的姓名和性别
SelectSname,Ssex
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
WhereSnamelike‘欧阳__’;
一个汉字占两个字符的位置(12)字符串本身含通配符的查询
使用使用escape‘换码字符>
’。
查询以”DB_”开头,且倒数第三个字符为i的课程的详细情况。
WhereCnamelike‘DB\_%i__’escape‘\’;
escape‘\’表示”\”为换码字符,则第一个”_”是普通的字符,后两个”_”表示通配符。
(13)涉及空值的查询
查询所有有成绩的学生的学号
SelectSno
WhereGradeISNULL;
此处“IS”不能用”=”替代
(14)带排序的查询
查询工作表job中的工作信息,结果按工作天数升序排列。
fromJOB
orderbyDAYSasc;
等价于
orderbyDAYSasc;
查询雇员表empl中所有员工的详细信息,结果按员工姓名降序排列。
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)
WhereCno=‘1’;
(16)到GROUPBY子句的查询
a)求各个课程号及相应的选课人数
selectCno,count(Sno)
fromSC
groupbyCno;
b)查询选修了3们以以上的课程的学生的学号
selectSno
croupbySno
havingcount(*)>
3;
where子句与having子句短语的区别在于作用对象不同。
Where子句作用于基本表或视图,从中选择满足条件的元组;
having子句作用与组,从中选择满足条件的组。
二、数据查询-----连接查询
若一个查询同时设计两个以上的表,则称之为连接查询。
(1)等值与非等值连接查询
格式如下:
[表名1>
.]列名1>
比较运算符>
[表名2>
.]列名2>
其中主要的比较运算符有:
=,>
,>
=,=,!
=(或>
)等.
此外连接谓词还可以有如下的形式:
.]列名1>
between[表名2>
and[表名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);
*/
做链
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- qq 关系 数据库 查询
![提示](https://static.bdocx.com/images/bang_tan.gif)