数据库简单查询和复杂查询.docx
《数据库简单查询和复杂查询.docx》由会员分享,可在线阅读,更多相关《数据库简单查询和复杂查询.docx(10页珍藏版)》请在冰豆网上搜索。
![数据库简单查询和复杂查询.docx](https://file1.bdocx.com/fileroot1/2023-4/18/82323fde-6cb6-4a60-a69e-d2b484b1e1c4/82323fde-6cb6-4a60-a69e-d2b484b1e1c41.gif)
数据库简单查询和复杂查询
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)/*5.1部门的编号、名称和位置*/selectdept_no,dept_name,locationfromDepartment
/*5.2部门的编号、名称和位置*/selectdept_no,dept_name,location
fromDepartment
/*5.3查询位于Dallas的部门编号和名称*/selectdept_no,dept_namefromDepartmentwherelocation='Dallas'
/*5.4查询预算额的0.51倍大于60000的项目名称
*/selectproject_name
fromProject
wherebudget*0.51>60000
25348或职
/*5.5查询在部门编号为d1的部门工作且职员编号为工名称
为‘Matthew'的雇员信息*/
selectemp_no,emp_fname,emp_lname,dept_nofromEmployee
wheredept_no='d1'and(emp_no='25348'oremp_fname='Matthew')/*例5.6查询不在部门编号为d1的部门工作的职员编号和姓名*/
selectemp_no,emp_fname,emp_lname
fromEmployee
wheredept_no!
='d1'
/*例5.7获取编号既不是10102也不是9031的职员的所有列。
*/
select*
fromEmployee
whereemp_no!
='10102'andemp_no!
='9031'
/*例5.8获取预算在$95000~$120000之间的所有项目的名称和预算。
*/
selectproject_name,budget
fromProject
wherebudgetbetween9031and95000
/*例5.9获取预算小于$95000和大于$120000之间的所有项目
的名称
*/
selectproject_name
fromProject
wherebudgetbetween95000and120000
/*5.10获取为项目2工作的,具有未知工作的所有职员的职员编号和相应的项目编号。
*/selectEmployee.emp_no,project_nofromEmployee,Works_onwhereEmployee.emp_no=Works_on.emp_noandproject_no='2'andjob='NULL'
/*例5.11找出所有姓是以字母J开头的职员的名字和编号。
*/
selectemp_fname,emp_no
fromEmployeewhereemp_lnamelike'J%'
/*例5.12找出所有名中第二个字母是a的职员的名字和编号。
*/
selectemp_fname,emp_no
fromEmployee
whereemp_fnamelike'_a%'
/*例5.13获取所在地名从C到F的字母打头的所有部门的详细资料。
*/
select*
fromDepartment
wherelocationlike'C%'orlocationlike'D%'orlocationlike'E%'orlocationlike'F%'
/*例5.14获取姓的打头字母不是J,K,L,M,N,O,并且名的开头字母是E或者Z的所有职员的编号和名字。
*/
selectemp_no,emp_fname
fromEmployee
where(emp_lnamenotlike'J%'andemp_lnamenotlike'K%'andemp_lnamenotlike'L%'and
emp_lnamenotlike'M%'andemp_lnamenotlike'N%')andemp_fnamelike'E%'
oremp_fnamelike'Z%'
/*例5.15
*/
SELECTproject_no,project_name
FROMproject
WHEREproject_NAMELIKE'%[_]%'
/*例5.16获取在研究部门工作的所有职员的名和姓。
*/selectemp_fname,emp_lnamefromEmployeewheredept_noin(selectdept_nofromDepartmentwheredept_name='Reserch')/*例5.17获取职员moser参与的项目编号。
*/selectproject_nofromWorks_onwhereemp_noin(selectemp_nofromEmployeeasEwhereemp_fname='moser')/*例5.18获取部门位于Dallas的所有职员的详细信息。
*/select*fromEmployeewheredept_noin(selectdept_nofromDepartmentwherelocation='Dallas')/*例5.19获取为项目工作的所有职员的姓。
*/selectemp_lname
fromEmployeewhereemp_noin(selectemp_nofromWorks_onwhereproject_no!
='NULL')
/*例5.20获取不是在项目上花费了最多时间的所有职员的编号、项目编号和工作名称。
*/selectemp_no,project_no,jobfromWorks_onwhereenter_date>all(selectMIN(enter_date)fromWorks_on)
/*例5.21获取为项目p1工作的所有职员的名和姓。
*/selectemp_fname,emp_lnamefromEmployeewhereemp_noin(selectemp_nofromWorks_onwhereproject_no='p1')
/*例5.22选择编号大于等于10000的所有职员的名字。
selectemp_fnamefromEmployeewhereemp_no>=10000
/*例5.23使用项目编号和工种对所有职员分组。
*/
selectproject_no,count(emp_no)fromWorks_ongroupbyproject_no,job
/*例5.25获取最小的职员编号
*/
selectMIN(emp_no)
fromEmployee
/*例5.26(0)获取最小的职员编号和姓
*/selectemp_no,emp_lnamefromEmployeewhereemp_noin(selectMIN(emp_no)fromEmployee)
/*例5.26
(1)获取表WORKS_ON中进入时间最晚的经理的职员编号
*/selectemp_nofromWorks_onwhereenter_datein(selectmax(enter_date)fromWorks_on)
/*例9.27计算所有项目预算的总和*/
selectSUM(budget)
fromProject
/*例5.28计算每个项目中不同工种的数目*/
selectproject_no,COUNT(job)fromWorks_ongroupbyproject_no
/*例5.29每个项目中有多少职员为其工作*/
selectproject_no,COUNT(emp_no)fromWorks_ongroupbyproject_no
/*例5.30获取招募的总人数少于4个的项目
selectproject_nofromWorks_ongroupbyproject_nohavingCOUNT(emp_no)<4
/*例5.31获取职员的名字和职员编号,以职员编号升序排列*/selectemp_fname,emp_no
fromEmployee
orderbyemp_noasc
/*5.32获取编号小于2000的职员所在的部门和其编号,并以姓和名升序排列
*/selectdept_name,emp_nofromDepartmentasD,EmployeeasEwhereD.dept_no=E.dept_noandemp_no<2000orderbyemp_fnameasc
/*5.33对于每个项目编号,取得其所有的项目编号以及职员数量,以职员数量降序排列。
*/selectproject_no,COUNT(emp_no)ascountOfEmp_nofromWorks_on
groupbyproject_no
orderbycountOfEmp_nodesc
/*5.34获取属于部门D1或者参加项目的时间早于1998年1月1日的所有职员的编号,并以升序排列。
*/
selectE.emp_nofromWorks_onasW,EmployeeasEwhereW.emp_no=E.emp_noand(E.dept_no='d1'orenter_date<'1998-01-0100:
00:
00.000')
orderbyemp_noasc
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)
/*1.获取每个职员的详细信息;也就是说除了职员的编号、名和姓、相应的部门编号以外,还要获取所在部门的名字和坐落地点。
*/
select*fromEmployeeasE,DepartmentasD
/*2.获取为Gemini项目工作的所有职员的全部详细信息
*/selectemp_no,emp_fname,emp_lname,dept_no,dept_name,location
fromEmployeeasE,DepartmentasD
fromWorks
whereproject_no
in(selectproject_nofromProjectwhereproject_name='Gemini'))
/*3获取每个职员的详细信息;也就是说除了职员的编号、名和姓、相应的部门编号以外,还要获取所在部门的名字和坐落地点。
*/select
fromEmployeeasE,DepartmentasD
/*4获取每个职员的详细信息;也就是说除了职员的编号、名和姓、相应的部门编号以外,还要获取所在部门的名字和坐落地点。
*/select
fromEmployeeasE,DepartmentasD
/*5获取年月日加入项目的所有职员的部门编号。
*/
selectdept_no
fromDepartment
wheredept_noin(selectdept_nofromEmployee
whereemp_noin(selectemp_nofromWorks_on
whereenter_date='1998-10-15'))
/*6获取会计部门中的职员所工作的项目名称(冗余重复元组删去)*/
selectdistinctproject_name
fromProject
whereproject_noin(selectproject_nofromWorks_on
whereemp_noin(selectemp_nofromEmployee
wheredept_noin(selectdept_nofromDepartment
wheredept_name='会计')))
/*7获取与至少一个其它的部门拥有相同所在地的所有部门的全部详细信息。
*/
selectfromDepartmentasD1
wherenotexists(select*fromDepartmentasD2
andnotexists(select*fromDepartmentasD3
andD3.location=D2.location))
select*
fromDepartmentasD1
asD2
wherelocationin(selectlocationfromDepartment
whereD2.dept_name!
=D1.dept_name)
/*8获取为项目P3工作的所有职员的姓。
*/
selectemp_lname
fromEmployee
whereemp_noin(selectemp_nofromWorks_on
whereproject_no='P3')
/*9获取为项目P1工作的所有职员的姓。
*/
selectemp_lname
fromEmployee
whereemp_noin(selectemp_nofromWorks_onwhereproject_no='P1')
/*10获取工作部门不在Seattle的所有职员的姓
*/
selectemp_lname
fromEmployee
wheredept_noin(selectemp_nofromDepartmentwheredept_name!
='Seattle')
/*11.求参加了全部工程的职员信息
*/
select*
fromEmployeeasEandw.project_no=P.project_no))
/*12.求没有使用科研处职员的所有项目信息
*/
select*
fromProject
whereproject_nonotin(selectproject_nofromWorks_onwhereemp_noin(selectemp_nofromEmployee
wheredept_noin(selectdept_nofromDepartmentwheredept_name='科研处')))
/*13获取参与项目的日期与表中最早的日期相等的所有职员的编号和参与日期。
*/
selectemp_no,enter_date
fromWorks_on
whereenter_date=(selectMIN(enter_date)fromWorks_on)
/*14获取在年月日加入项目的所有职员的编号,姓和工种。
*/
selectEmployee.emp_no,emp_lname,job
fromEmployee,Works_on
whereEmployee.emp_no=Works_on.emp_no
andenter_date='1998-10-15'