1,一个完整的SELECT语句包括6个子句,其中前面的2个子句是必不可少的,其他子句可以省略。
SELECT 语句的完整格式如下:
SELECT [DISTINCT] 目标列名序列-----要查看的列
FROM 表名或视图名------------------数据来源
[WHERE 条件表达式]----------------查询条件
[GROUP BY + 列名] --------------------分组依据
[HAVING + 组条件表达式] ---------分组条件
[ORDER BY + 列名 + [ASC|DESC]序列]----排序依据
2,不要写select * from table;
计算机在识别的时候会将*对应的列名依次转换,效率低,且不方便阅读,*只有自己知道指的是什么。
3,查询多列时,需要去重只留下唯一的部分时需要用到,distinct.
select distinct +列名 from table;
4,使用LIMIT限制结果集
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果只给定一个参数,它表示返回最大的记录行数目。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。
初始记录行的偏移量是 0(而不是 1)。
例.检索记录行 6-10
1 |
|
例.检索记录行 11-last
1 |
|
例.检索前 5 个记录行
1 |
|
5,涉及到多表的查询
多表查询 - 多表连接
若一个查询同时涉及两个或两个以上的表,则称之为连接查询。
连接查询是关系数据库中最主要的查询。
连接查询包括内连接、外连接和交叉连接等。
连接查询中用于连接两个表的条件称为连接条件或连接谓词。
一般格式为:
内连接
内连接语法如下:
1 2 3 4 |
|
例39.查询每个学生及其班级的详细信息。
1 2 |
|
结果中有重复的列:班号。
例40.去掉例39中的重复列。
1 2 |
|
例41.查询重修学生的修课情况,要求列出学生的名字、所修课的课程号和成绩。
1 2 3 4 |
|
执行连接操作的过程
首先取表1中的第1个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,
找到后就将表1中的第1个元组与该元组拼接起来,形成结果表中的一个元组。 表2全部查找完毕后,再取表1中的第2个元组,然后再从头开始扫描表2, …
重复这个过程,直到表1中的全部元组都处理完毕为止。
表别名
可以为表提供别名,其格式如下:
<源表名> [ AS ] <表别名>
使用别名时例41可写为如下形式:
1 2 3 4 |
|
注:如果为表指定了别名,则查询语句中其他所有用到表名的地方都要使用别名
例42.查询所有学生的姓名、班名和系名。
1 2 3 4 |
|
例43.查询软件工程系所有学生的情况,要求列出学生姓名和所在的系。
1 2 3 4 5 |
|
例44.有分组的多表连接查询。查询每个班的学生的考试平均成绩。
1 2 3 4 5 |
|
例45.有分组和行过滤的多表连接查询。查询21226P班每门课程的选课人数、平均成绩、最高成绩和最低成绩。
1 2 3 4 5 6 7 8 |
|