SQL的单表查询

本文介绍了SQL中的单表查询,包括查询语句结构、列用法、SELECT的限制、WHERE子句的各种条件(比较大小、范围、集合、字符串匹配、空值查询和逻辑运算),帮助读者理解基本的SQL查询操作。

单表查询

查询仅涉及一张表,是一种最简单的查询操作。

查询语句格式

Select A1,A2,…,An From R1,R2,…,Rn where   condition 

列用法

  • 查询全部列时,可以用 * 代表全部列

  • Sql Server 函数 1.getdate()可以获取此刻的时间    2.year()

        eg:查询学生出生年份 

Select year(getdate()) - sage from student

      如果用表达式作列名,将不会有列名,可以通过用列别名起名(as可以省略)

Select year(getdate()) - sage as birthyear from student

      如果列别名中有空格,如birth year  则需要加单引号。

  • SELECT只能查询,没有任何修改的功能。

  • SELECT语句不去重,若想去重在列名前加DISTINCT。

        DISTINCT短语的作用范围是所有目标列。若有多列名只需加一个

         eg:SELECT DISTINCT Cno,Grade From SC;

where用法

  • 选择运算通过 WHERE Condition 子句实现
 查询条件Condition
                                                   谓
比较大小
=,>,<,>=,<=,!=,<>,!>,!<; NOT+上述比较运算符
确定范围
BETWEEN…AND…, NOT BETWEEN…AND…
确定集合
IN, NOT IN
字符串匹配
LIKE, NOT LIKE
空值查询
IS NULL, IS NOT NULL
多重条件查询
AND , OR

1.比较大小

eg:查询计算机系全体学生的名单
SELECT Sname
FROM Student
WHERE Sdept = 'CS';

2.确定范围

使用谓词
‒ BETWEEN … AND …
‒ NOT BETWEEN … AND …
• BETWEEN后:范围的下限(即低值)
• AND后:范围的上限(即高值
eg:查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名 、系别和年龄
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23

3.确定集合

使用谓词
IN <值表>
NOT IN <值表>
– <值表>:用逗号分隔的一组取值
eg:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生 的姓名和性别
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ('IS','MA','CS' )
4.字符串匹配
使用谓词 LIKE或NOT LIKE
格式:
[NOT] LIKE '<匹配串>' [ESCAPE '<换码字符>']
–<匹配串>:指定匹配模板
匹配模板:固定字符串或含通配符的字符串
 当匹配模板为固定字符串时,可以用=运算符取代LIKE谓词 ,用 != 或 < >运算符取代NOT LIKE谓词
匹配模板为固定字符串
eg:查询学号为95001的学生的详细情况
SELECT *
FROM Student
WHERE Sno LIKE '95001';

等价于

SELECT * 
FROM Student 
WHERE Sno = '95001';

通配符

% (百分号) 代表任意长度(长度可以为0)的字符串
• 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb ,addgb,ab 等都满足该匹配串
_ (下横线) 代表任意单个字符
• 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如 acb,afb等都满足该匹配串
匹配模板为含通配符的字符串
eg:查询所有姓刘学生的姓名、学号和性别
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '刘%';

eg:查询姓"欧阳"且全名为三个汉字的学生的姓名

SELECT Sname
FROM Student
WHERE Sname LIKE '欧阳_ ';
ESCAPE 短语
当用户要查询的字符串本身就含有 % 或 _ 时, 要使用ESCAPE '<换码字符>' 短语对通配符进行转义
使用换码字符将通配符转义为普通字符
eg:查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况
SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%i_ _' ESCAPE ' \ ';

'/'在这里是换码字符,换码字符后的字符会从通配符转义为普通字符。

5.涉及空值的查询
使用谓词IS NULL或IS NOT NULL
“IS NULL” 不能用“= NULL” 代替
eg:某些学生选修课程后没有参加考试,所以有选课记录 ,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号
SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL;

6.多重条件查询

◆用逻辑运算符AND和OR来联结多个查询条件
– AND的优先级高于OR
– 可以用括号改变优先级
eg:查询计算机系年龄在20岁以下的学生姓名
SELECT Sname
FROM Student
WHERE Sdept= 'CS' AND Sage<20;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值