SQL单表查询部分记录(一)

SQL单表查询部分记录(一)

建立表:

create table Student
(Sno char(9) primary key,
Sname char(20)  UNIQUE,
Ssex char(2),
Sage smallint,
Sdept char(20)
);
create table Course
(Cno char(4) primary key,
Cname char(40),
Cpno char(4),
Ccredit smallint,
-- FOREIGN KEY (Cpno) REFERENCES Course (Cno)
)
create table SC
(Sno char(9),
Cno char(4),
Grade smallint,
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES Student (Sno),
FOREIGN KEY (Cno) REFERENCES Course (Cno)
);

image

image

image

1.选择表中的若干列

--例:查寻Student表中的学生的学号和姓名
SELECT Sno,Sname FROM Student;
--各个列的顺序可以和表中的顺序不一致,代码中的顺序即为查询结果的显示顺序

image-20210329104134053

2.查询表中的全部记录

SELECT * FROM Student;

image

3.查询经过计算的值

SELECT 子句的目标列表达式不仅仅可以是属性列,也可以是表达式

例如:查询学生的姓名和出生年份

SELECT Sname,2014-Sage From Student;

image

不仅仅可以是算术表达式还可以是字符串常量,函数等

SELECT Sname,'Year of Birth:',2014-Sage,LOWER(Sdept) FROM Student;

image

可以指定别名来改变查询结果的列标题

SELECT Sname,'Year of Birth' BIRTH:,2014-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM Student;

image

选择表中的若干元组

1.剔除重复的行(投影到指定的列上后)

SELECT DISTINCT Sno FROM Student;
--如果没有DISTINCT ,默认为ALL
--即为
SELECT ALL Sno FROM Student;

image

2.查询满足条件的元组(WHERE)

1.比较大小

(1)例:查询专业为CS的学生

SELECT Sname FROM Student
WHERE Sdept='CS';

image

(2)查询年龄小于20的学生

SELECT Sname FROM Student
WHERE Sage<20;

image

查询的过程:

扫描全表,取出每个元组看该元组的某列的值是不是满足WHERE中的条件,如果满足则取出相应的SELECT 中的列输出



2.确定范围(查询一个范围内的)

--使用BETWEEN...AND... 或 NOT BETWEEN...AND...查询属性值在或不在某一范围内的元组
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;--(包括20,23)

image

3.查询属性值在某一集合中的元组

例如:查询在CS,MA,IS专业中的学生的姓名和性别

IN/NOT IN

SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ('CS','MA','IS');

image

4.字符匹配

[NOT] LIKE '<串>' [ESCAPE '换码字符(\)']

例:查询所有姓刘的学生

SELECT Sname,Ssex,Sno
FROM Student
WHERE Sname LIKE '刘%';

image

%号代表任意长度,比如:满足a%b的字符串:aaab,asdasdab等

_代表任意单个字符,例如a_b为以a开头,b结尾的长度为3 的字符串

LIKE后的串中不含%或_,即可使用=取代LIKE,用!=或<>取代NOT LIKE

使用换码字符:

查询DB_Dd:
SELECT Cno
FROM
WHERE Cname LIKE 'DB\_Dd' ESCAPE'\'

5.空值查询

这里的IS不能用=取代

SELECT Sno,Cno
FROM Student
WHERE Grade IS NULL;

SELECT Sno,Cno
FROM SC
WHERE Grade IS NOT NULL;

image

6.多重条件查询

使用AND 和 OR

AND 优先级大于 OR

SELECT Sname
FROM Student
WHERE Sdept='CS' AND Sage<20;

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值