Sql Server查询语句

雨点打透心脏的1/2处 2022-09-28 13:06 489阅读 0赞

一、查询语句格式

  1. SELECT \[ALL|DISTINCT\] \[表名.\]\{\*|列名|表达式\[AS 新列名\]\}
  2. \[INTO :主变量\[,:主变量\]\]
  3. FROM 表名\[表别名\],
  4. \[WHERE 条件表达式|子查询\]
  5. \[GROUP BY 列名,
  6. \[HAVING 分组表达式\]\]
  7. \[\{UNION|INTERSECT |EXCEPT\}SELECTFROM\]
  8. \[ORDER BY 列名|列序号\[ASC|DESC\], \]

二、单表查询

  1. Where 子句——运算符
  2. 比较:<、<=、>、>=、=、<>、not \+ ~
  3. 确定范围:
  4. Between A and BNot Between A and B
  5. 确定集合:INNOT IN
  6. 字符匹配:LIKENOT LIKE
  7. 空值:IS NULLIS NOT NULL
  8. 多重条件:ANDORNOT
  9. 1----
  10. SELECT Sname NAME, 'Year of Birth:' BIRTH,
  11. 2003\-sage BIRTHDAY, LOWER(Sdept) DEPARTMENT
  12. FROM Student;
  13. 2--- 选择表中的行
  14. 消除重复行: DISTINCT (缺省为ALL)
  15. SELECT DISTINCT Sno FROM student
  16. 3--- BETWEEN AND
  17. 求年龄在~ (含, 22)之间的学生名及年龄(或不在~之间)
  18. SELECT Sname, Sage FROM Student
  19. WHERE Sage BETWEEN 18 AND 22 (WHERE Sage>=18 AND Sage<=22);
  20. 4--- IN or NOT IN
  21. SELECT \* FROM Student
  22. WHERE Sdept IN (‘IE’, CS’, MA’);(WHERE Sdept=‘IEOR Sdept=‘CSOR Sdept=‘MA’)
  23. 5--- Like
  24. 格式:
  25. \[NOT\] LIKE ‘匹配串’\[ESCAPE ‘换码字符’\]
  26. %: 表示任意长度(≥)的任意字符
  27. \_: 表示单个的任意字符
  28. ESCAPE ‘换码字符’: 匹配串中‘换码字符’(转义符)之后的字(%,\_\_),被定义为普通字符(不作通配符用)
  29. 列出课程名称中带有‘\_’的课号及课名:
  30. Select cno cnameFrom Course Where cname LIKE ‘%"\_%’escape ‘"
  31. 求以‘DATA\_BASE’开头且倒数第五个字符为’S’的课程名
  32. SELECT Cname FROM Course WHERE Cname LIKE DATA"\_BASE%S\_ \_ \_ \_’ESCAPE’"’;
  33. 6--- NULL
  34. SELECT Sno, Cno FROM SC WHERE Grade IS NULL;
  35. 7--- 分组与组函数
  36. 只有出现在Group By子句中的属性,才可出现在Select子句中
  37. 组函数的使用:
  38. COUNT(\[DISTINCT|ALL\] \*|列名)
  39. SUM(\[DISTINCT|ALL\] 列名)
  40. AVG(\[DISTINCT|ALL\] 列名)
  41. MAX(\[DISTINCT|ALL\] 列名)
  42. MIN(\[DISTINCT|ALL\] 列名)
  43. 组函数可用于SELECT子句中的目标列表中,或在HAVING子句的分组表达式中用作条件。
  44. 对分出的每一组用HAVING进行筛选,筛选条件要用到组函数。
  45. Having Where的区别:
  46. Where 决定哪些元组被选择参加运算,作用于关系中的元组
  47. Having 决定哪些分组符合要求,作用于分组
  48. 例:统计各系学生的人数。
  49. Select sdeptcount(\*) as stu\_count
  50. From Student
  51. Group By sdept
  52. 例:求选修了课程的学生人数
  53. SELECT COUNT(DISTINCT Sno) FROM SC
  54. 例:求选修各门课的人数及平均成绩
  55. SELECT Cno, COUNT(Sno), AVG(GR) FROM SC GROUP BY Cno
  56. 例:求选修课程在2门以上且都及格的学生号及总平均分
  57. SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno HAVING COUNT(Cno)>2 AND MIN(Grade)>=60
  58. 8--- 排序
  59. ORDER BY子句对查询结果按照一个或多个列的值进行升/降排列输出,升序为ASC;降序为DESC,空值将作为最大值排序

连接查询

  1. 多表连接查询、单表连接查询(自连接)、外连接查询、复合条件连接查询.
  2. 示例数据表:
  3. 学生信息表Student; 课程信息表Course; 选课情况表SC,教师信息表teacher
  4. 1--- 单表连接(自连接)
  5. 用表别名把一个表定义为两个不同的表进行连接。
  6. 2--- 左连接、右连接、全外连接
  7. 求各部门名及职工名,要求输出无职工的部门(职工以空值出现)
  8. SELECT DNAMETNAME FROM department Dteacher T
  9. WHERE D.DNO = T.DNO(\*);(有\*则,别表示该列可以为空 Left join )
  10. 求各部门名及职工名,要求输出无职工的部门和未分配部门的职工
  11. SELECT DNAMETNAME FROM department Dteacher T
  12. WHERE D.DNO (\*) = T.DNO(\*);(Full join )
  13. 3--- 复合条件连接

嵌套查询

  1. SELECT FROM WHERE语句结构的;
  2. WHERE子句中可嵌入一个SELECT语句块;
  3. 其上层查询称为外层查询或父查询;
  4. 其下层查询称为内层查询或子查询;
  5. SQL语言允许使用多重嵌套查询;
  6. 在子查询中不允许使用ORDER BY子句;
  7. 嵌套查询的实现一般是从里到外,即先进行;
  8. 子查询,再把其结果用于父查询作为条件。
  9. 1--- 返回一组值得子查询
  10. 求选修‘C6‘课程且成绩超过分的学生
  11. SELECT \* FROM student
  12. WHERE sno IN ( SELECT sno FROM SC WHERE Cno='C6' AND Grade>);
  13. 求比计算机系中某一学生年龄小的其他系的学生
  14. SELECT \* FROM student
  15. WHERE sdept!=’CSAND sage ANY( SELECT Sage FROM Student WHERE Sdept=‘CS’);

带有EXISTS的相关子查询

  1. 不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询。
  2. 相关子查询:子查询的查询条件依赖于外层父
  3. 查询的某个属性值的称为相关子查询(Correlated Subquery),带EXISTS的子查询就是相关子查询
  4. EXISTS表示存在量词,带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值‘True ’或‘False
  5. 例:求所有选修了‘C1’课程的学生名。
  6. 不相关子查询
  7. SELECT Sname FROM student
  8. WHERE sno IN ( SELECT sno FROM SC WHERE Cno = 'C1' );
  9. 相关子查询
  10. SELECT Sname FROM student
  11. WHERE EXISTS
  12. (
  13. SELECT \* FROM SC
  14. WHERE student.sno=SC.sno AND Cno='C1'
  15. );
  16. 先在外层查询中取student表的第一个元组(记录),用该记录的
  17. 相关的属性值(在内层WHERE子句中给定的)处理内层查询,若
  18. 外层的WHERE子句返回‘TRUE’值,则此元组送入结果的表中。然
  19. 后再取下一个元组;重复上述过程直到外层表的记录全部遍历一次为止。
  20. 不关心子查询的具体内容,因此用SELECT \* Exists \+ 子查询用来判断该子查询是否返回元组
  21. 当子查询的结果集非空时,Exists'True' 当子查询的结果集为空时,Exists'False'
  22. NOT EXISTS :若子查询结果为空,返回‘TRUE’值,否则返回‘FALSE
  23. 例:列出没有选C1课程的学生的学号、姓名
  24. SELECT Sname FROM student
  25. WHERE NOT EXISTS
  26. (
  27. SELECT \* FROM Course
  28. WHERE student.sno=SC.sno AND Cno='C1'
  29. );
  30. 例:查询选修了所有课程的学生的姓名
  31. SELECT Sname FROM student
  32. WHERE NOT EXISTS
  33. (
  34. SELECT \* FROM Course
  35. WHERE NOT EXISTS
  36. (
  37. SELECT \* FROM SC
  38. WHERE student.sno=SC.sno AND Course.Cno=SC.Cno
  39. )
  40. ); /\*该学生不存在于 所有课都选的学生的集合之中\*/
  41. 例:名查询至少选修了S1所选的全部课程的学生
  42. SELECT Sname FROM student
  43. WHERE NOT EXISTS
  44. (
  45. SELECT \* FROM SC SCX
  46. WHERE SCX.sno='s1' AND NOT EXISTS
  47. (
  48. SELECT \* FROM SCSCY
  49. WHERE student.sno=SCY.sno AND SCX.Cno=SCY.Cno
  50. )
  51. ); /\*该学生不存在于 S1所有课都选的学生的集合之中\*/

注意细节

  1. FROM语句中使用子查询,对查询结果定义表名及列名
  2. SELECTSno, AVG\_G
  3. FROM (
  4. SELECTSno,AVG(Grade) FROM SC
  5. GROUP BY Sno
  6. ) AS RA(Sno,AVG\_G)
  7. WHERE AVG\_G>80;

发表评论

表情:
评论列表 (有 0 条评论,489人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SQL Server SQL语句

     在很多情况下,可以用CREATE TABLE语句创建数据表、使用ALTER TABLE语句修改表结构、使用DROP TABLE语句删除表;   可以使用CREATE DAT