视图
视图是从一个或几个基本表(或视图)导出的表。它是一个虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的表中。比如我们有个“个人资料”的视图,就是由“账号”表的“个人账号”+“个人描述”表里的“个人说明”、“故乡”、“所在地”构成(因为在记录条数上亿或更多的情况时,如果都放在一张表里,表里字段很多,使用InnoDB时在查询时会花费很多时间,InnoDB的读性能并不是很好,而且在分布式数据库中,如果单表字段过多,记录条数又多,可能会导致仅仅一个表就会拆分在多个服务器上,会增加数据库读写时间)。
数据库查询
1、用户可以通过指定别名来改变查询结果的列标题:
SELECT Sname NAME,‘Year of Birth:’ BIRTH, 2016-Sage BIRTHDAY,
LOWER(Sdept) DEPARTMENT
FROM Student;
2、谓词IN
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN (’QQ‘,'wechat');
3、谓词LIKE,%表示任意长度,_表示任意单个字符:
SELECT Sname
FROM Student
WHERE Sname NOT LIKE '王%';//找出所有不姓王的学生姓名
4、使用ESCAPE对%_转义,例查询DB_Design课程详情:
SELECT *
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE '\'; //表示\为换码字符
5、查询以DB_开头,且倒数第三个字符为w的课程详情:
SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%w__' ESCAPE '\';
6、涉及空值的查询:
SELECT *
FROM SC
WHERE Grade IS NULL;//查询选了课,却没参加考试的选课信息
注意:这里的 IS 不能用=代替。
7、查询全体学生情况,查询结果按系号升序,同一系中学生按年龄降序排列:
SELECT *
FROM Student
ORDER BY Sdept, Sage DESC; //缺省值为ASC升序
对于空值,若按升序排,含空值的元祖在最后显示,DESC则相反。
8、查询选修了课程的学生人数:
SELECT COUNT( DISTINCT Sno)
FROM SC;
9、查询学号为201620301的学生的总学分:
SELECT SUM( Ccredit)
FROM SC, Ccourse
WHERE Sno='201620301' AND SC.Cno=Ccourse.Cno;
10、求各个课程号及对应的选课人数:
SELECT Cno, COUNT(Sno)
FROM SC
GROUP BY Cno;//Cno相同的为一组
11、查询选修了3门以上课程的学生学号:
SELECT Sno
FROM SC
GROUP BY Sno HAVING COUNT( *) >3;