数据库sql语句查询补充
- 0.前言
- 1.Like谓语
- 2.带有Having当中的分组查询
- eg. 例题:
- 错题重做:
- 3.内连接
- 例题
0.前言
数据库期末复习,对自己做错的题进行知识总结和梳理
1.Like谓语
like谓语主要有两个操作
- %:百分号,表示任意长度的字符串
- _:下划线,表示任意单个字符
like谓语的语法格式如下:
LIke谓语容易出现的难点:需要在查询的内容当中本身带有’_‘或者’%’
此时要使用到换码字符
eg:
插叙开头为’DB_'的课程情况
对应的sql查询语句:
SELECT *
FROM S
WHERE SNAME LIKE 'DB\_' ESCAPE '\'
意思也就是在’_‘的前面要添加相应的换码符号,然后在后面进行一个逃脱ESCAPE,需要注意到的是,’‘可以进行多种符号更改,比如可以更改成’@',那么对应查询语句如下:
SELECT *
FROM S
WHERE SNAME LIKE 'DB@_' ESCAPE '@'
2.带有Having当中的分组查询
最终只输出满足指定条件的组
eg. 例题:
在SC表当中查询选修了2门以上课程的学生学号
对应的Sql语句
Select SNO
FROM SC
GROUP BY SNO
HAVING COUNT(CNO)>2
可以通过添加DIstinct
避免输出的结果重复
错题重做:
在spj表当中,查询使用3种以上零件的工程号
这道题和同学沟通了一下,发现了自己的问题,我理解成是多表查询了,但是其实不是的,应该是先进行按照JNO的组队,然后在通过HAVING进行一定条件的限制,正确的sql语句如下
SELECT JNO
FROM SPJ
GROUP BY JNO
HAVING COUNT(DISTINCT PNO)>3
3.内连接
主要是在需要同时使用到两次同一个表的情况下如何进行书写,那么此时就要对该表进行一个内连接的操作
例题
至少选修了课程号为0121和0125两门课的学生学号
那么此时关键次有’至少’并且要求的操作是在同一个表当中同一列的不同数据的一个查询
对应的sql语句如下:
SELECT A.SNO--这里也可以写成B.SNO
FROM SC a join SC b ON a.SNO=b.SNO--给同一个表设定不同的名称
AND a.CNO='0121'
AND b,CNO='0125'