SQL语句

准备数据

说明:

在schoolDB数据库下,在3张表:学生表tstudent、分数表tscore、课程表tsubject

一.简单语句

1、查询所有字段

*可以代表所有字段

示例:查询学生表中的所有学生信息

select studentied,sname,sex,cardid,birthday,email,class,entertime from fromtstudent; select * from tstudent;

回忆: 投影:从源表中选择符合条件的列(字段、属性)

选择:从源表中选择符合条件的行(记录、元组)

2、查询指定字段

a.查询单个字段

b.查询多个字段

示例:

查询学生表中的姓名、性别、邮箱?

select sname,sex,email from tstudent;--投影操作

3、查询指定记录

查询满足条件的元组(记录),使用where子句

示例:查询班级是java开发的学生的姓名、性别、邮箱和专业班级?

select sname,sex,email,class from tstudent where class ='java开发'; --投影 操作

4、带in关键字的查询

示例: 查询专业班级为java开发、大数据和网络与网站开发的学生的信息?

select * from tstudent where class in('java开发",'大数据','网络与网站开发'); select from tstudent where class='java开发'or class='大数据' or class ='网络与网站开发';

5、带between ... and ..关键字的范围查询

示例: 查询1983年至1987年之间出生的所有学生的信息?

select *from tstudent where birthday >='1983-1-1' and birthday<='1987-12-31'; select * from tstudent where birthday between'1983-1-1'and '1987-12-31';

6、like关键字

模糊查询

通配符:_表示任意1个字符

%表示任意多个字符示例:

查询学生表中所有姓“雷”的学生的信息?

select from tstudent where sname like '雷%';

查询姓名中有“军”这个字的学生的信息?

select from tstudent where sname like'%军%';

查询1985年出生的学生的信息?

select*from tstudent where birthday like "1985%';

7、空值查询

空值:nul值 不确定的值 空值不是0,也不是空字符串

示例:查询奖金或补助为空值的雇员信息?

select *from emp where comm is null; select *from emp where comm is not null;

8、and 并且

示例: 查询学号小于18的,且性别为男的,并且专业班级为java开发的学生的信息。

select * from tstudent where studentid<18 and sex='男'and class='java开发';

9、or 或者

示例: 查询姓名中含有“生"字的,或专业班级为'大数据"的学生的信息?

select * from tstudent where sname like%生%'or class='大数据'; select sname,sex,birthday,classfrom tstudent where class='大数据'or class='.net'or class='java开发'; select sname,sex,birthday,classfrom tstudent where class in(大数据,.net',java开发');

10、去掉重复值

distinct 去掉重复值

示例:查询学生表的专业班级有哪些?

select distinct class from tstudent;

11、使用limit限制查询结果的数量

limit[位置偏移量,]行数

功能:返回指定位置的指定条数条记录

示例:查询学生表中的前5名学生的信息?

select *from tstudent limit 5; select*from tstudent limit 4,6;-- 从第4+1条的位置开始取,取6条记录。

12、union合并查询结果

union集合的合并

要求第一个SQL语句返回的列和第二条SQL语句返回的列数相同

selectstudentid,sname,sex from tstudent where studentid='00013' union select studentid,sname,sex from tstudent where sname like '雷%';

13、为表和字段取别名

字段名 [as]别名

select studentid学号,sname as 姓名,birthday as 出生日期from tstudent;

表名 [as] 别名

select s.studentid学号,s.sname as姓名,s.birthday as 出生Efrom tstudent as s;

小结:用户感兴趣的数据来自于1个表

语法:select 字段名1 as 别名1,字段名2 别名2,….

from 表名[as]别名

where 条件

二、连接查询

1、内连接查询

inner join

父表:主关键字所在的表

子表:外部关键字所在的表

主关键字:学生表中的学号在一个表中至少应该有1个字段,这个字段所对应的值一不能有重复、二不能是空值,它能起到唯一标识这一条记录的作用

外部关键字:成绩表中的学号 在某一张表中某个字段它不是当前这个表的主关键字,但是它是另外一个表的主关键字。

注意:学生表与成绩表的关联字段 学号

示例: 查询学生的学号、姓名、科目和成绩?

select s.studentid,s.sname,sub.subjectname,sc.mark from tstudent s,tscore sc,tsubject sub where s.studentid = sc.studentid and sc.subjectid=subsubjectid;

补充:

SQL99标准语法:

表1 inner join 表2 on 连接条件

示例: 查询学生的学号、姓名、科目和成绩?

select s.studentid,s.sname,sub.subjectname,sc.mark from tstudent as s inner join tscore as sc on s.studentid=sc.studentid inner join tsubject as sub on sc.subjectid=sub.subjectid;

连接查询:去掉重复属性的等值相连

提示:“两个表都有的字段,一般要保留父表的"。

2.外连接查询

左连接(以左边的表为主)

右连接(以右边的表为主)

--左连接 select s.*,sc.* from tstudent s left join tscore scon s.studentid=sc.studentid; --右连接 select s.*,sc.* from tstudent s left join tscore scon s.studentid=sc.studentid;

3.自连接查询

插入15000条学生的记录。

call addstudent(15000);

查询学生表中同名的学生的学号和姓名?---使用自连接查询

select a.studentid,a.sname,b.studentid,b.sname from tstudent a inner join tstudent bon a.sname=b.snamewhere a.studentid<>b.studnetid; select a.studentid,a.sanem,b.studentid,b.sname from tstudent a,tstudent b where a.sname=b,sname and a.studentid<>b.studentid;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值