单表查询SQL

来源:互联网 发布:人工智能创新发展专项 编辑:程序博客网 时间:2024/04/28 08:31

1.单表查询

(1)基本查询。

Q0. 使用查询分析器从Employee表中检索出所有员工的姓名。

SELECT * FROM EMPLOYEE


Q1. 使用查询分析器从Employee表中检索出员工的FNAME、LNAME、SSN、BDATE、SALARY等字段,并分别加上“名”、“姓”、“社会保险号”、“生日”、“工资”的标题。员工的排序规则为:首先按工资的降序排列,然后按FNAME的字母升序排列。

SELECT FNAME 名,LNAME 姓,SSN 社会保险号,BDATE 生日,SALARY 工资
FROM EMPLOYEE
ORDER BY SALARY DESC,FNAME

Q2. 查询不重复的员工工资值。

SELECT DISTINCT SALARY FROM EMPLOYEE


Q3. 查询没有直接上司的员工姓名。

SELECT FNAME,LNAME FROM EMPLOYEE WHERE SUPERSSN IS NULL


(2) 基于WHERE子句进行数据查询。

1)基于比较条件。

Q4. 从Employee表中查询出工资大于等于40000的员工资料。

SELECT * FROM EMPLOYEE WHERE SALARY>=40000

2)基于BETWEEN子句的查询。

Q5. 从Employee表中查询出1960年——1970年之间出生的员工资料。

SELECT * FROM EMPLOYEE
WHERE BDATE BETWEEN '1960-1-1' AND '1969-12-31'

3)基于IN子句的查询。

Q6. 从Employee表中查询出部门号为4或者5的员工资料。

SELECT * FROM EMPLOYEE
WHERE DNO IN(4,5)

4)基于LIKE子句的查询。

Q7. 从Employee表中查询出LNAME中含有字母o的员工资料。

SELECT * FROM EMPLOYEE
WHERE LNAME LIKE '%O%'


(3) 使用计算列查询。

Q8. 从Employee表中检索出员工的FNAME、LNAME、SSN、SALARY等字段(其中SALARY需换算成人民币,汇率假定为1美元=8人民币元),并分别加上“名”、“姓”、“社会保险号”、“人民币工资”的标题。

SELECT FNAME,LNAME,SSN,SALARY*8 人民币工资

FROM EMPLOYEE



2. 多表连接查询(使用JOIN)

Q9. 查询所有为Research部门工作的员工姓名及地址。

SELECT FNAME,LNAME,ADDRESS
FROM EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER
WHERE DNAME='RESEARCH'



Q10.对于所有位于Stafford的项目,查询项目的编号、项目负责部门编号以及该部门经理的姓、地址、生日。

SELECT PNUMBER,DNUMBER,FNAME,LNAME,ADDRESS,BDATE
FROM PROJECT JOIN DEPARTMENT ON DNUM=DNUMBER
JOIN EMPLOYEE ON MGRSSN=SSN
WHERE PLOCATION='Stafford'



Q11. 查询有两个或以上家属的员工姓名

SELECT FNAME,LNAME
FROM EMPLOYEE JOIN DEPENDENT ON SSN=ESSN
GROUP BY ESSN,FNAME,LNAME
HAVING COUNT(*)>=2



Q12. 查询在ProductX项目上每周工作时间超过10小时的部门5的员工姓名。

SELECT FNAME,LNAME
FROM EMPLOYEE JOIN WORKS_ON ON ESSN=SSN
JOIN PROJECT ON PNO=PNUMBER
WHERE HOURS>10 AND DNO=5 AND PNAME='ProductX'



Q13. 对于每个项目,列出项目名称以及所有员工在此项目上工作的总时间。

SELECT PNAME,SUM(HOURS)
FROM WORKS_ON JOIN PROJECT ON PNO=PNUMBER
GROUP BY PNUMBER,PNAME



Q14. 对于每个部门,列出部门名称以及此部门员工的平均工资。

SELECT DNAME,AVG(SALARY)
FROM EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER
GROUP BY DNO,DNAME




Q15. 对于每个员工,查询其姓名以及他/她的直接上司的姓名。

SELECT YG.FNAME,YG.LNAME,SS.FNAME,SS.LNAME
FROM EMPLOYEE YG LEFT JOIN EMPLOYEE SS ON YG.SUPERSSN=SS.SSN



Q16. 查询Company数据库中所有员工SSN与DNAME(部门名称)的组合。

SELECT SSN,DNAME
FROM EMPLOYEE CROSS JOIN DEPARTMENT



Q17. 查询有两个或以上“工资大于等于30000员工”的部门名称。

SELECT DNAME
FROM EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER
WHERE SALARY>=30000
GROUP BY DNO,DNAME
HAVING COUNT(*)>=2


3.嵌套查询(子查询)

Q18.查询没有参与任何部门5控制项目的员工姓名。

SELECT FNAME,LNAME FROM EMPLOYEE WHERE SSN NOT IN(
SELECT ESSN FROM WORKS_ON WHERE PNO IN(
SELECT PNUMBER FROM PROJECT WHERE DNUM=5))



Q19. 查询工资超过部门5所有员工工资的员工姓名。

SELECT FNAME,LNAME FROM EMPLOYEE WHERE SALARY>(
SELECT MAX(SALARY) FROM EMPLOYEE WHERE DNO=5)


Q23. 查询至少有一个家属的部门经理姓名。

SELECT FNAME,LNAME FROM EMPLOYEE WHERE SSN IN(
SELECT MGRSSN FROM DEPARTMENT WHERE MGRSSN IN(
SELECT ESSN FROM DEPENDENT))


Q25.查询有两个或以上家属的员工姓名。

SELECT FNAME,LNAME FROM EMPLOYEE WHERE SSN IN(
SELECT ESSN FROM DEPENDENT GROUP BY ESSN HAVING COUNT(*)>=2)


4.集合查询

Q26. 查询符合以下任意条件的员工:

(1) SUPERSSN为‘123456789’的员工;

(2) SUPERSSN不为‘123456789’的员工。

SELECT * FROM EMPLOYEE WHERE SUPERSSN='123456789'
UNION
SELECT * FROM EMPLOYEE WHERE SUPERSSN!='123456789'


Q27. 查询符合以下任意条件的员工:

(1) SSN为‘123456789’的员工;

(2) SSN不为‘123456789’的员工。

SELECT * FROM EMPLOYEE WHERE SSN='123456789'
UNION
SELECT * FROM EMPLOYEE WHERE SSN!='123456789'


5.使用Transact-SQL语句对表添加、修改、删除数据(如果出错,分析出错原因)

(1) 向EMPLOYEE表添加一行数据:

FNAME:ZHANG,MINIT:D,LNAME:SAN,SSN:111111111,

BDATE:1995-5-5,ADDRESS:XINDU,SEX:F,SALARY:20000,

SUPERSSN:123456789,DNO:1

INSERT EMPLOYEE

VALUES('ZHANG','D','SAN','111111111','1995-5-5','XINDU','F',20000,'123456789',1)

(2) 向EMPLOYEE表添加一行数据:

FNAME:ZHANG,MINIT:D,LNAME:SAN,SSN:222222222,BDATE:1995-5-5,ADDRESS:XINDU,SEX:F,SALARY:20000,SUPERSSN:123456789,DNO:6

INSERT EMPLOYEE

VALUES('ZHANG','D','SAN','222222222','1995-5-5','XINDU','F',20000,'123456789',6)


(3) 向EMPLOYEE表添加一行数据:

FNAME:ZHANG,MINIT:D,LNAME:SAN,SSN:333333333,BDATE:1995-5-5,ADDRESS:XINDU,SEX:F,SALARY:20000,SUPERSSN:444444444,DNO:1

INSERT EMPLOYEE

VALUES('ZHANG','D','SAN','333333333','1995-5-5','XINDU','F',20000,'444444444',1)

(4) 修改数据:将所有女性员工的工资加1000。

UPDATE EMPLOYEE SET SALARY=SALARY+1000 WHERE SEX='F'


(5) 修改数据:将所有有家属的员工的工资加1000。

UPDATE EMPLOYEE SET SALARY=SALARY+1000

WHERE SSN IN(SELECT ESSN FROM DEPENDENT)

(6) 删除数据:删除FNAME为JOHN的员工。

DELETE EMPLOYEE WHERE FNAME='JOHN'


(7) 删除数据:删除FNAME为JOHN的员工的家属。

DELETE DEPENDENT
WHERE ESSN IN(SELECT SSN FROM EMPLOYEE WHERE FNAME='JOHN')

0 0
原创粉丝点击