关系数据库SQL数据查询(超全的查询案例)数据查询
⼀、单表查询
1.查询仅涉及⼀个表,选择表中的若⼲列
⽤到的数据——>
查询指定列
[例1] 查询全体学⽣的学号与姓名。
SELECT Sno,Sname
FROM Student;
[例2] 查询全体学⽣的姓名、学号、所在系。
SELECT Sname,Sno,Sdept
FROM Student;
查询全部列
选出所有属性列:
在SELECT关键字后⾯列出所有列名
将<⽬标列表达式>指定为 *
[例3] 查询全体学⽣的详细记录
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student;
或
SELECT *
FROM Student;
查询经过计算的值
SELECT⼦句的<⽬标列表达式>不仅可以为表中的属性列,也可以是表达式
[例4] 查全体学⽣的姓名及其出⽣年份。
SELECT Sname,2014-Sage /*假设当时为2014年*/
FROM Student;
输出结果:
Sname 2014-Sage
李勇 1994
刘晨 1995
王敏 1996
张⽴ 1995
使⽤列别名改变查询结果的列标题:
SELECT Sname NAME,'Year of Birth:' BIRTH,
2014-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student;
输出结果:
NAME BIRTH BIRTHDAY DEPARTMENT
李勇 Year of Birth: 1994 cs
刘晨 Year of Birth: 1995 cs
王敏 Year of Birth: 1996 ma
张⽴ Year of Birth: 1995 is
distinct查询2.选择表中的若⼲元组
消除取值重复的⾏
如果没有指定DISTINCT关键词,则缺省为ALL
[例5] 查询选修了课程的学⽣学号。
SELECT Sno FROM SC;
等价于:
SELECT ALL Sno FROM SC;
执⾏上⾯的SELECT语句后,结果为:
Sno
201215121
201215121
201215121
201215122
201215122
指定DISTINCT关键词,去掉表中重复的⾏
SELECT DISTINCT Sno
FROM SC;
执⾏结果:
Sno
201215121
201215122
常⽤的查询条件:
1. ⽐较⼤⼩:
[例6] 查询计算机科学系全体学⽣的名单。
SELECT Sname
FROM Student
WHERE Sdept=‘CS’;
[例7]查询所有年龄在20岁以下的学⽣姓名及其年龄。 SELECT Sname,Sage
FROM Student
WHERE Sage < 20;
[例8]查询考试成绩有不及格的学⽣的学号。
SELECT DISTINCT Sn
FROM SC
WHERE Grade<60;
2. 确定范围:
谓词: BETWEEN … AND …
NOT BETWEEN … AND …
[例9] 查询年龄在20~23岁(包括20岁和23岁)之间的学⽣的姓名、系别和年龄
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
[例10] 查询年龄不在20~23岁之间的学⽣姓名、系别和年龄
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
3. 确定集合:
谓词:IN <;值表>, NOT IN <;值表>
[例11]查询计算机科学系(CS)、数学系(MA)和信息系(IS)学⽣的姓名和性别。 SELECT Sname, Ssex
FROM Student
WHERE Sdept IN ('CS','MA’,'IS' );
[例12]查询既不是计算机科学系、数学系,也不是信息系的学⽣的姓名和性别。
SELECT Sname, Ssex
FROM Student
WHERE Sdept NOT IN ('IS','MA’,'CS' );
4. 字符匹配:
谓词: [NOT] LIKE ‘<;匹配串>’ [ESCAPE ‘ <;换码字符>’] <;匹配串>可以是⼀个完整的字符串,也可以含有通配符%和 _
% (百分号) 代表任意长度(长度可以为0)的字符串
例如a%b表⽰以a开头,以b结尾的任意长度的字符串_ (下横线) 代表任意单个字符。
例如a_b表⽰以a开头,以b结尾的长度为3的任意字符串
匹配串为固定字符串
[例13] 查询学号为201215121的学⽣的详细情况。
SELECT *
FROM Student
WHERE Sno LIKE ‘201215121';
等价于:
SELECT *
FROM Student
WHERE Sno = ' 201215121 ';
匹配串为含通配符的字符串
[例14] 查询所有姓刘学⽣的姓名、学号和性别。
SELECT Sname, Sno, Ssex
FROM Student
WHERE Sname LIKE '刘%';
[例15] 查询姓"欧阳"且全名为三个汉字的学⽣的姓名。
SELECT Sname
FROM Student
WHERE Sname LIKE '欧阳__';
使⽤换码字符将通配符转义为普通字符
[例16] 查询DB_Design课程的课程号和学分。
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE '\ ' ;
[例17] 查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。
SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%i_ _' ESCAPE '\ ' ;
ESCAPE '\' 表⽰“ \” 为换码字符
5. 涉及空值的查询:
谓词: IS NULL 或 IS NOT NULL
“IS” 不能⽤ “=” 代替
[例18] 某些学⽣选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学⽣的学号和相应的课程号。
SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL
[例19] 查所有有成绩的学⽣学号和课程号。
SELECT Sno,Cno
FROM SC
WHERE Grade IS NOT NULL;
6.多重条件查询
逻辑运算符:AND和 OR来连接多个查询条件
AND的优先级⾼于OR
可以⽤括号改变优先级
[例20] 查询计算机系年龄在20岁以下的学⽣姓名。
SELECT Sname
FROM Student
WHERE Sdept= ‘CS’ AND Sage<20;
3.ORDER BY⼦句
ORDER BY⼦句
可以按⼀个或多个属性列排序
升序:ASC;降序:DESC;缺省值为升序
对于空值,排序时显⽰的次序由具体系统实现来决定
[例21]查询选修了3号课程的学⽣的学号及其成绩,查询结果按分数降序排列。
SELECT Sno, Grade
FROM SC
WHERE Cno= ' 3 '
ORDER BY Grade DESC;
[例22]查询全体学⽣情况,查询结果按所在系的系号升序排列,同⼀系中的学⽣按年龄降序排列。
SELECT *
FROM Student
ORDER BY Sdept, Sage DESC;
4. 聚集函数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论