SQL语句使用01----where常用等
来源:互联网 发布:droid4x mac 安装失败 编辑:程序博客网 时间:2024/06/06 03:55
这一章开始正式的SQL语句使用,先贴出数据库表的结构
Student(Sid,Sname,Sage,Ssex) 学生表
Course(Cid,Cname,Tid) 课程表
SC(Sid,Cid,score) 成绩表
Teacher(Tid,Tname) 教师表
下面以案例的形式来分析:
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
- 涉及到表SC,只需要在SC表中比对即可
方法一:(隐性连接,在where中直接连接,逐渐被淘汰)
select a.Sid from (select score,Sid from SC where Cid='001') a,(select score,Sid from SC where Cid='002') b where a.score>b.score and a.Sid=b.Sid;
方法二:(显式连接,推荐,之后的例句都尽量会使用显式连接)
select a.Sid from (select score,Sid from SC where Cid='001') a inner join (select score,Sid from SC where Cid='002') b on a.Sid=b.Sid where a.score>b.score;
如图所示,两种方法查询的结果一致
这里大概把where中常用的查询语句讲解一下,以student表为例
1.算术运算符
+ - * / %
select * from student where Sage+40>100;
//这个就不用解释了吧,算数运算~~
2.比较运算符
= < <= =(等于) <>(不等于)
select * from student where Sage>60;
3.逻辑运算符:
与: and
或: or
非: not
select * from student where Sage>60 and Sage<80;select * from student where Sage>60 or Sid>1010;
//非不好解释,可以理解为熊孩子,要反着来
select * from student where not(Sage>60 or Sid>1010);select * from student where not Sage>60;
4.is运算符
只用于对特殊的几个数据进行判断,有如下几个:
xx字段 is true
xx字段 is false
xx字段 is null
xx字段 is not null
select * from student where Sage is true;select * from student where Sage is null;
5.between运算符
形式:XX字段 between 值1 and 值2;
含义:用于判断所指定的字段的值,是否在给定的2个值之间(含该两个值);
其可以用如下形式替换:
XX字段 >= 值1 and XX字段 <= 值2;
select * from student where sage between 60 and 80;
6.in运算符:
形式:XX字段 in (值1,值2,….)
含义:表示该字段的值如果等于in后面括号中所给定的其中任何一个值,就算满足了条件。
select * from student where sage in(10,20,30);
//我们可以在其中包含子查询
select sage from student where sid>1010;select * from student where sage in(select sage from student where sid>1010);
//第一个查询获得一个结果集,第二次匹配是否在里面
7.like运算符——模糊查找
形式:XX字段 like ‘要查找的字符’
含义:用于对一个字符类型的字段进行某种给定字符的模糊查找;
% :用于表示任意个数的任意字符;
_ :用于表示“一个”任意字符;
select * from student where sid like '10__';select * from student where sid like '10%';
//可以看出来,两个结果一样
2、查询“001”课程比“002”课程成绩高的所有学生的学号,姓名;
//这里就涉及的了两个表,一个是student,一个是SC表。
方法一://很好理解,先把学号查出来,再与student中的学号对应。这是比较简单的一种方法。
select Sid,Sname from Student where Sid in (select a.Sid from (select score,Sid from SC where Cid='001') a inner join (select score,Sid from SC where Cid='002') b on a.Sid=b.Sid where a.score>b.score);
方法二:
//先把学号,名字,成绩查出来,再比较。。。。。太麻烦了
//一步步来,有助于我们分析数据库的查询方式
//一:连表。学生表和成绩表,查询其中001的成绩的学生的姓名,学号;
//仔细看这三个语句就可以发现,查询查询的字段分为我们要求显示的(*/student,Sname)和未显示的,未显示的我们同样可以使用。
select * from Student inner join sc on student.Sid=sc.Sid;select student.Sid,Sname from Student inner join sc on student.Sid=sc.Sid;select student.Sid,Sname from Student inner join sc on student.Sid=sc.Sid where cid='001';select student.Sid,Sname from Student inner join sc on student.Sid=sc.Sid where cid='002';
//仔细看着几步
//分别是连表查询所有——连表查询两个字段——连表查询两个字段加cid=001-连表查询两个字段加cid=002
//与上面不同的是,这里我们需要将score查询出来才能用,因为这里面用到了子查询这一个概念,我们用到的字段是子查询得到的字段,这里将只会得到我们之前查询显示出来的结果。
//与上面相同
select a.Sid,a.sname from (select student.Sid,Sname,score from Student inner join sc on student.Sid=sc.Sid where cid='001') a inner join (select student.Sid,Sname,score from Student inner join sc on student.Sid=sc.Sid where cid='002') b on a.sid = b.sid where a.score>b.score;
//错误代码:没有查询出score就直接使用:Unknown column ‘a.score’ in ‘where clause’
**select a.Sid,a.sname from (select student.Sid,Sname from Student inner join sc on student.Sid=sc.Sid where cid='001') a inner join (select student.Sid,Sname from Student inner join sc on student.Sid=sc.Sid where cid='002') b on a.sid = b.sid where a.score>b.score;**
- SQL语句使用01----where常用等
- SQL语句WHERE
- 使用WHERE语句对SQL进行基础性的优化
- SQL 中在WHERE里面使用Case语句
- SQL语句Where中使用别名作为判断条件
- SQL语句Where中使用别名作为判断条件
- SQL语句Where中使用别名作为判断条件
- sql语句中where 1=1和where 1= 0 的使用和区别
- 常用的sqlserver 使用sql语句格式化日期 数字格式等
- SQL语句教程(03) WHERE
- sql语句之where子句
- sql语句where条件优化
- SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等
- sql语句中的case、while等使用
- 格式化SQL语句之格式化where语句
- SQL select 和SQL where语句
- SQL语句使用大全,最常用的sql语句
- SQL语句使用大全,最常用的sql语句
- Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
- Android 加壳尝试(一)
- Less介绍及其与Sass的差异
- Android 持久化技术
- 4131:Charm Bracelet
- SQL语句使用01----where常用等
- 简易的XListView下拉加载和上拉刷新
- centos7安装MongoDB3.4 以及spring data mongodb的配置使用
- 简述request.getRequestDispatcher(url)与response.sendRedirect(url)的区别
- 矩阵乘法+快速幂——【模板】矩阵快速幂
- git使用
- PAT (Advanced) 1010. Radix (25)
- poj2559---Largest Rectangle in a Histogram(单调栈)
- 经典漫画讲解HDFS原理