首页新萄京手机版官网 › 数据库多表查询

数据库多表查询

要哪些把a表的原则跟b表的原则构成起来查询在那之中a表中的特定新闻。如基于系名查询课时超越300的教授名字。当中等教育师名字在a,b表都有,只是命名不一致,而系名在b表,课时在a表

三、总结

此次整理了SQL数据查询中关于单表查询的顺序,个中应特别在意

  • 字符相称中 % 和 _ 的区别。
  • ESCAPE 的 换码操作。
  • 聚焦函数只可以用来 SELECT子句 和 GROUP BY子句 中的 HAVING 子句。

 

 2.内三番一回查询,<又分为:自然连接,等值连接,不等值连接二种>

大器晚成、SQL数据查询的近似格式

数量查询是数据库的主干操作。SQL提供了SELECT语句进行数量查询,其相近格式为:

SELECT [ALL | DISTINCT]<目标列表达式>[,<目标列表达式>]···
FROM<表名或视图名>[,<表名或视图名>···] | (SELECT语句>)[AS]<别名>
[WHERE<条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC | DESC]];

万事SELECT语句的意义是,依据WHERE子句的条件表明式从FROM子句钦点的基本表、视图或派生表中寻找满意条件的元组,再按SELECT子句中的指标列表明式选出元组中的属性值产生结果表

如若有GROUP
BY子句,则将结果按<列名1>的值举行分组,该属性列值相等的元组为叁个组。经常会在每组中功用聚焦函数。倘诺GROUP
BY子句带HAVING短语,则独有满足钦赐条件的组才予以输出。

借使有OHighlanderDE奥迪Q7 BY子句,则结果还要按<列名2>的值的升序或降序排序。

SELECT语句既可以够成功轻便的单表查询,也得以产生复杂的一而再查询和嵌套查询。

 

同一时间还包蕴左表(左外连接时卡塔尔(قطر‎、右表(右外连接时卡塔尔国或多少个边接表(全外连接卡塔尔中的全部数据行。

二、SQL单表查询(仅涉及三个表的查询)

假假设在连接条件上协作的元组,则另贰个表再次回到相应值,不然另一个表再次来到空值。

1.选项表中的若干列

(1)查询钦赐列

查询全体学子的学号与姓名

SELECT Sno,Sname
FROM Student;

 

查询全部学子的人名、学号、所在系

SELECT Sname,Sno,Sdept
FROM Student;

 

(2)查询任何列

询问全部学生的事必躬亲笔录

    SELECT *
    FROM Students;
等价于
    SELECT Sno,Sname,Ssex,Sage,Sdept
    FROM Student;

 

(3)查询经过计算的值

查询全部学子的姓名及其出生年份

SELECT Sname,2014-Sage  //查询结果的第2列是一个 算术表达式
FROM Student;

小心:用当下的年份(若是为二零一五年)减去学子的年纪,那样所得的便是学子的出世年份。

 

询问全部学子的全名、出生年份和内地的院系,要求用小写字母表示系名

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

 

   select x.* from sclass x,sclass y  

3.ORDER BY 子句

客商能够用O途观DER
BY子句对查询结果依照二个或多个属性列的升序(ASC)或降序(DESC)排列,默许值为升序。

询问选修了3号课程的学子的学号及其成绩,查询结果按分数的降序排列

SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC;

 

询问全部学生情形,查询结果按所在系的系号升序排列,同生机勃勃系中的学子按年龄降序排列

SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;

 

  1. 汇聚函数

为了越发方便顾客,加强行检查索作用,SQL提供了大多成团函数,首要有:

COUNT(*)

统计元组个数

COUNT([DISTINCT|ALL]<列名>)

统计一列中值的个数

SUM([DISTINCT|ALL]<列名>)

计算一列值的总和(此列必须是数值型)

AVG([DISTINCT|ALL]<列名>)

计算一列值的平均值(此列必须是数值型)

MAX([DISTINCT|ALL]<列名>)

求一列值中的最大值

MIN([DISTINCT|ALL]<列名>)

求一列值中的最小值

假定钦点 DISTINCT 短语,则代表在测算时要注销钦点列中的重复值。

比方不钦点 DISTINCT 短语或内定 ALL
短语(ALL为默许值),则意味着不废除重复值。

 

查询学子总人数

SELECT COUNT(*)
FROM Student;

 

查询选修了学科的上学的小孩子人数

SELECT COUNT(DISTINCT Sno)
FROM SC;

 

计量选修1号课程的学员平均战表

SELECT AVG(Grade)
FROM SC
WHERE Cno='1';

 

查询选修1号课程的学员最高分数

SELECT MAX(Grade)
FROM SC
WHERE Cno='1';

 

询问学子二〇一三15012选修课程的总学分数

SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno='201215012' AND SC.Cno=Course.Cno;

 注意:WHERE
子句中是无法用聚焦函数作为条件表明式的。集中函数只可以用于SELECT子句和GROUP
BY中的HAVING子句。

 

外连接分为:

2.精选表中的若干组

(1)消弭取值重复的行

询问选修了学科的上学的小孩子学号

SELECT DISTINCT Sno
FROM SC;

 

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

询问满足钦点条件的元组能够由此WHERE子句达成。WHERE子句常用的查询条件如下表所示

查询条件

谓词

比较

=,>,<,>=,<=,!=,<>,!>,!<; NOT+上述比较运算符

确定范围

BETWEEN AND,NOT BETWEEN AND

确定集合

IN,NOT IN

字符匹配

LIKE,NOT LIKE

空值

IS NULL,IS NOT NULL

多重条件(逻辑运算)

AND,OR,NOT

 

询问Computer科学系全体学子的花名册

SELECT Sname
FROM Student
WHERE Sdept='CS'

 

查询所有年龄在20岁以下的学习者姓名及其年龄

SELECT Sname,Sage
FROM Student
WHERE Sage<20;

 

询问考试成绩不过关的上学的小孩子的学号

SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;

 

查询岁数在20~贰十三岁以内的学习者的人名、系别和岁数

SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23

 

询问年龄在20~贰十三岁以内的学子的姓名、系别和年龄

SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23

 

询问计算机科学系(CS)、数学系(MA)和音信系(IS)学子的全名、系别和年龄

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

 

询问学号为二零一一15121的学子的详细情状

    SELECT *
    FROM Student
    WHERE Sno LIKE '201215121'
等价于
    SELECT *
    FROM Student
    WHERE Sno='201215121'

此处介绍下字符相称

谓词LIKE能够用来开展字符串的相配。其貌似语法格式如下:

[NOT] LIKE'<匹配串>' [ESCAPE '<换码字符>']

 

其意义是索求钦赐的属性列值与<相称串>相相配的元组。<相称串>能够是一个安然无事的字符串,也足以包蕴通配符
% 和 _
。其中:

  • %(百分号)代表私行长度(长度可感觉0)的字符串。比如:a%b
    表示以a起先,以b结尾的随便长度的字符串。如acb、addgb、ab等。
  • _(下划线)代表私自单个字符。比如:a_b表示以a开始,以b结尾的尺寸为3的自便字符串。如acb、agb等。

 

查询全数姓刘的上学的小孩子的人名、学号和性别

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

 

询问姓“欧阳”且全名叫八个汉字的学习者的人名

SELECT Sname
FROM Student
WHERE Sname LIKE '欧阳_'

瞩目:数据库字集为ASCII时叁个汉字需求多少个_;当字符集为GBK时只须要二个。

 

询问名字中第二个字为“阳”的学子的姓名和学号

SELECT Sname,Sno,
FROM Student
WHERE Sname LIKE '_阳%';

 

询问全部不姓刘的学子的姓名、学号和性别

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

 若是顾客要询问的字符串本身就隐含通配符%或_,这个时候就要动用 ESCAPE
'<换码字符>' 短语对通配符实行转义了。

 

查询DB_Design 课程的课程号和学分

SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB \ _Design' ESCAPE '\';

 ESCAPE '\' 表示 “\” 为换码字符。那样相配串中紧跟在 “\”
前边的字符“_”不再具有通配符的意义,转义为平时的“_”字符。

 

查询以“DB_”开始,且最后多少个第八个字符为i的科目标详细情况

SELECT *
FROM Course
WHERE Cname LIKE 'DB \_%i__'ESCAPE '\';

 

或多或少学子选修课程后不曾插手考试,所以有选课记录,但未有考试战绩。查询缺少成绩的上学的小孩子的学号和相应的教程号

SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL;  /*分数Grade是空值*/

 注意:这里的“IS”不能够用等号(=)代替。

 

查全体有成绩的上学的儿童学号和课程号

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

 

查询计算机科学系年龄在20岁以下的学员姓名

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

 

   将身处三个互相交叉的多寡群集中重叠部分以内的那个数据行连接起来.

新萄京手机版官网,5.GROUP BY子句

将查询结果按某一列或多列的值分组,值拾壹分的为意气风发组。

 

求各类科目号及相应的选课人数

SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;

 

查询选修了三门上述课程的学员学号

SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3;

 

询问平均战表超乎等于90分的学子学号和平均成绩

    SELECT Sno,AVG(Grade)
    FROM SC
    WHERE AVG(Grade)>=90 (错误!)
    GROUP BY Sno;
因为WHERE子句中是不能用聚集函数作为条件表达式的,正确的查询语句应该是:
    SELECT Sno,AVG(Grade)
    FROM SC
    GROUP BY Sno;    
    HAVING AVG(Grade)>=90;

 

外接连是对内连接的扩张,除了将五个数据集结中重叠部分以内的那个数据行连接起来之外,

任凭哪类连接都不能够对text、ntext和image数据类型列进行直接连接,

即数据汇总的每意气风发行都要与另一表每豆蔻梢头行组成一个新的行.

WHERE (dbo.kb.jc = 1) OR

  select 表1.字段名,表2.字段名,...

还能依照须求回到侧边或左边手数据集结中国和南美洲相当多寡或任何的数据.

在接纳UNION
运算符时,应保险每种一块查询语句的筛选列表中有周围数量的表达式,

INNER join sclass y on x.sno=y.sno where x.sclass=''95文秘1''

外接连再次来到的结果聚焦的生机勃勃部分数据看起来和内接连重回的数目完全风度翩翩致,

UNION [ALL] selectstatement

UNION的语法格式为:

在结果表中富含三个表中满意条件的具备记录。

(1)

断断续续连接不行使其余连接条件来界定结果集合,将各表的笔录以“笛Carl”积的措施结合起来,

SELECT a.*?p.pub_id?p.pub_name?p.country

一只查询时,查询结果的列标题为率先个查询语句的列标题。

select a.学号,a.姓名,b.课程代号,b.课程战绩,c.课程名称,d.教授代号

例:

其间selectstatement为待联合的SELECT查询语句。

 

    三个表 自身 与 本人创建 连接 称为自连接或自身连接。

(1卡塔尔(قطر‎查询全数学子的sno,cname,degree列:

在等值连接中清除重复列正是理所必然连接。

select replybody,posttime from bbs_reply

接连查询分类:

那个运算符包蕴>、>=、<=、<、!>、!<和<>。

    例:

from 学生表 INNER JOIN 成绩表

在自行调换时,对于数值类型,系统将低精度的数据类型转变为高精度的数据类型。

ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(dbo.kb.jc = 11)

 

 

select 学子表.学号,学子表.姓名,成绩表.课程代号,战绩表.课程战表

    进行自连接宛就像是多个分别的表
同样,可以把三个表的某生龙活虎行与同等表中的另风度翩翩行连接起来。

例如:


相符查询条件的数目行数。

中装有适合查找条件的数据行。

在包涵多少个查询的UNION语句中,其实行各种是自左至右,使用括号能够更改那黄金年代奉行顺序。

六。复杂查询

例,

连年条件的行。而使用外接连时,它回到到查询结果集结中的不仅仅满含切合连接条件的行,

四。交叉连接:

五。联合查询

dbo.bj ON dbo.kb.bh = dbo.bj.bh INNER JOIN

select topicbody,posttime from bbs_topic

where x.sno!=y.sno

被联合查询结果集结中的重复行将只保留黄金时代行。

on 学生表.学号=成绩表.学号

2。右外连接(PAJEROIGHT OUTE景逸SUV JOIN或君越IGHT JOIN卡塔尔(قطر‎:

时有时无连接(CROSS JOIN卡塔尔国未有WHERE
子句,它回到被接连的多个表全数数据行的笛Carl积,

ON a.sno=b.sno

      查询选学“101”课程的大成超越“9505201”号学子战表的全体学生记录
并按成绩高低 排列

右外连接(瑞虎IGHT OUTELAND JOIN卡塔尔(英语:State of Qatar);

on 学生表.学号=成绩表.学号

注: 外连接强以使不满意条件的笔录也出今后结果聚焦。

from 学生表 right outer join 成绩表

则下列交叉连接检索到的记录数将等于6*8=48行。

from student x,score y

外连接语法:

1。左外连接(LEFT OUTE路虎极光 JOIN或LEFT JOIN卡塔尔:

语法:

转载本站文章请注明出处:新萄京娱乐网址2492777 http://www.cdhbjs.com/?p=5129

上一篇:

下一篇:

相关文章