select Sname,2021-Sage --查询出生年份需要利用算术表达式(今年年份-学生年龄)
from Student
在这里第二行列名为空,但在标准SQL中会直接显示算术表达式。在【例3.20】会解决这个问题
select Sname,'Year of Birth:',2021-Sage,LOWER(Sdept)
from Student;
程序里的’Year of Birth:'可以用来增加表的易读性;
LOWER( ) 返回小写的字符串,UPPER( ) 返回大写的字符串
还有列名为空的问题怎么解决?方法如下
*方法一:
select Sname NAME,'Year of Birth:' BIRTH ,2021-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
from Student;
但这样似乎也有一些局限性,比如列名不能带空格,这时就需要用到方法二
*方法二
select Sname[Name],'Year of Birth:'[Year of Birth:],2021-Sage[2021-Sage],LOWER(Sdept)[LOWER(Sdept)]
from Student;
select Sno
from SC
如果想去掉结果中的重复行,必须指定DISTINCT,没有则默认为ALL
select DISTINCT Sno
from SC
首先列出常用的查询条件
查询条件 | 谓词 |
---|---|
比较 | =,<,>,<=,>=,!=,<>,!>,!<;NOT+上述比较运算符 |
确定范围 | BETWEEN AND; NOT BETWEEN AND |
确定集合 | IN, NOT IN |
字符匹配 | LIKE, NOT LIKE |
空值 | IS NULL, IS NOT NULL |
多重条件(逻辑运算) | AND, OR, NOT |
select Sname
from Student
where Sdept='CS';
select Sname,Sage
from Student
where Sage<20;
因为我的student表里面没有小于20岁的学生,可以改为<21再试试
select DISTINCT Sno
from SC
where Grade<60;
说明没有任何一门课程为不及格的学生
select Sname,Sdept,Sage
from Student
where Sage BETWEEN 20 AND 23;
select Sname,Sdept,Sage
from Student
where Sage NOT BETWEEN 20 AND 23;
说明没有符合标准的学生
select Sname,Ssex
from Student
where Sdept IN('CS','MA');
select Sname,Ssex
from Student
where Sdept NOT IN('CS','MA');
这里介绍一下LIKE的字符匹配语法:[NOT] LIKE ‘<匹配码>’ [ESCAPE ‘<换码字符>’]
匹配串可以是完整的字符串也可以含有通配符 % 和 _ 。 其中%为任意长度(可为0)字符串,_ 代表单个字符(在标准SQL中似乎不可为空,但T-SQL中可以)。
select *
from Student
where Sno LIKE '201911020'; --等价于 Sno='201911020'
因为之前student表里面数据比较少,在这里我又补充了一些数据。
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215121','李勇','男','CS',20);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215122','刘晨','女','CS',19);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215123','王敏','女','MA',18);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215125','张立','男','IS',19);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215128','陈冬','男','IS',20);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215129','欧阳询','男','IS',20);
select Sname,Sno,Ssex
from Student
where Sname LIKE '刘%';
select Sname
from Student
where Sname LIKE '欧阳_';
这里舍友出现了问题,用%可以,但_不可用。最后发现是表的设计上的问题,我们都是char(4)而他是nchar(4),而nchar和char的区别就是nchar是固定长度的。
select Sname,Sno
from Student
where Sname LIKE '_阳%';
select Sname,Sno,Ssex
from Student
where Sname NOT LIKE '_阳%';
select Cno,Ccredit
from Course
where Cname LIKE 'DB\_Design' ESCAPE'\'; --ESCAPE是对‘\’进行转义
在用编辑前200行插入数据时,记得按回车…
select *
from Course
where Cname LIKE 'DB\_%i__' ESCAPE'\' --是% 不是& c语言写多了...
select Sno,Cno
from SC
where Grade IS NULL
这里我在SC表多添加了一列,原本是空
select Sno,Cno
from SC
where Grade IS NOT NULL
select Sname
from Student
where Sdept= 'CS' AND Sage<20;
select Sno,Grade
from SC
where Cno='3'
ORDER BY Grade DESC;
select *
from Student
ORDER BY Sdept,Sage DESC;
首先介绍聚集函数的功能和实现:
功能 | 实现 |
---|---|
统计元组个数 | COUNT(*) |
统计一列中值的个数 | COUNT([DISTINCT或ALL] <列名>) |
计算一列值的总和 | SUM([DISTINCT或ALL] <列名>) |
计算一列值的平均值 | AVG([DISTINCT或ALL] <列名>) |
求一列中的最大值和最小值 | MAX([DISTINCT或ALL] <列名>) MIN([DISTINCT或ALL] <列名>) |
select COUNT(*)
from Student;
select COUNT(DISTINCT Sno)
from SC;
select AVG(Grade)
from SC
where Cno='1';
select MAX(Grade)
from SC
where Cno='1';
这里跟【例3.43】结果一样的原因是选修1号课的只有一人
select SUM(Ccredit)
from Course,SC
where Sno='201215121' AND Course.Cno=SC.Cno --这句要好好理解一下
select Cno,COUNT(Sno)
from SC
GROUP BY Cno;
select Sno
from SC
GROUP BY Sno
HAVING COUNT(*)>2;
最后这个例题做的也比较懵,这里HAVING的作用是指定筛选条件,一开始感觉和WHERE挺像,但是我后来理解的是后者是在from的表中做筛选,而前者是在GROUP后的每个小单元中做筛选。
最先下载FlashBuilder_4_7_LS10_win64.exe试了几个eclipse安装插件都没成功,包...
首先提出一个问题: 如何取得一个给定的字符串substr在另一个字符串str中出现的...
前言 上次咱们简单的学习了一下select的用法,一篇文章教会你进行Mysql数据库和...
文章目录 Java基础语法三——运算符 一、算术运算符 1.基本四则运算符 1练习 2注...
之前为了解决Windows 10一些版本出现的蓝屏和死机现象,微软曾推出了一些更新,...
IT之家 3月13日消息外媒 Neowin 报道,微软已经宣布,它正在改变 Edge 浏览器在 ...
利用条件编译控制 基本知识 #define 定义一个预处理宏#undef 取消宏的定义#if 编...
打开Upload.ASP文件 找到下面代码: 复制代码 代码如下: % sAllowExt=Replace(UCa...
html即超文本标记语言,现在大多网页都是html的格式。而所谓的html文件,其实就...
本文实例为大家分享了PHP实现倒计时功能的具体代码,供大家参考,具体内容如下 !...