SQL --数据查询功能 数据更改功能
数据查询
1. 查询语句的基本结构
select子句 和 from子句 是不可缺少的 其他子句都是可选的
2. 单表查询
1. 选择表中若干列
2. 选择表中若干元组
注意: sname 列 定义的是 非Unicode定长,即char(10) ,因此可以分配10个字节的空间,不足的部分用空格补齐。即对'王敏'实际存储的是'王敏'后边加6个空格---称为尾随空格。
在进行like 字符串匹配的时候,系统并不会自动去掉尾随空格,空格是一个字符,也满足_通配符,因此会出现二个字的情况
其功能是去掉指定列中尾随的空格,返回没有尾随空格的数据。例如,将例子中的语句改为:
sleelct Sname from Student where RTRIM(Sname) like '王__'
3. 排序 ORDER BY ---ASC DESC
4. 使用计算函数汇总数据
SELECT Sname FROM Student WHERE Sage =MAX(Sage)
正确的写法为后面的 子查询:SELECT Sname FROM Student where Sage=(select MAX(Sage) from Student)
5. 对查询结果进行分组统计 GROUP BY
1) 使用group by 语句
2) 使用where子句
3) 使用having 语句
主要用于对分组后的结果进行筛选,作用于组而不是单个记录 having一般与group by 一起使用
意思是having 条件多了费资源 where好点 不能无脑having
第二种写法比第一种写法执行效率高,因为where子句在group by 子句之前执行,因此参与的分组的数据较少。
6 多表连接查询
1. 内连接
注意:当表取了别名后,在其他用到表名的地方都要用到别名,而不能再使用原表名
2. 自连接
要去掉可以模仿例48 ---- and C1.Cname !='数据结构'
3. 外连接
注意:左外连接的含义是 限制表2中的数据必须满足条件,而不管表1中的数据是否满足连接条件,均输出表1中的内容
右外连接的含义是 限制表1中的数据必须满足条件,而不管表2中的数据是否满足连接条件,均输出表2中的内容
图中圈起来的二个学生,明明没选课,他们不满足连接条件,但是是左连接student表可以不用满足条件,全列出来
7 使用TOP限制结果集
在查询时候,有时候只希望列出结果集中的前几行结果,而不是全部结果,比如竞赛的成绩前三名
如果有 distinct的话 ,则在distinct之后,查询列表的前面select distinct top 3 数据
8 子查询
还记得上面讲到where后面不能跟计算函数SUM COUNT 等的问题吗?可以使用()子查询来实现
由此也可以看到,同一个查询可以用不同的方式来实现。总体来说,多表连接查询的效率比子查询的效率要高(因为查询优化器可以对多表连接查询进行更多的优化)。