一、GROUP BY
若我们需算出每个学生的总成绩,则步骤为筛选出姓名和总成绩,其次是根据姓名进行分组显示总成绩;
语法为
SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1";
二、HAVING
对函数进行设定条件,
HAVING 的语法如下:
SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"
HAVING (函数条件);
请注意: GROUP BY 子句并不是一定需要的。
三、AS(别名)--alias
select 字段 as 别名
select 字段 别名
select 别名=字段
在sqlserver中这三种显示结果都是一模一样的,但是我们不推荐后两种写法,只推荐第一种写法;
四、两张表联合查询-join
用法例如:
select a.name, b.class ,sum(a.score)
from mytest as a ,s_info as b
where a.name = b.name
group by a.name
五、外连接-OUTER JOIN:
外连不但返回符合连接和查询条件的数据行,还返回不符合条件的数据行,外连接分三类:左外连接(LEFT JOIN),右外连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN);
共同点:返回符合连接条件和查询条件(即内连接)的数据行,
不同点:
1)左连接:返回左表中不符合连接条件但符合查询条件的数据行;
2)右连接:返回右表中不符合连接条件但符合查询条件的数据行;
3)全连接:是左右连接的数据集合(去重复),即全外=左外 UNION 右外;
说明:OUTER关键字可以省略;
例子:比如学生信息表(info)和成绩表(mytest),要找出所有学生的考试成绩,这个时候就需要把成绩为空,即没有参加考试的学生的信息也要查找出来;
select b.name,b.class,sum(a.score) from mytest as a
right join grade as b on a.name-b.name
group by b.name;
六、子查询(subquery)
我们可以在一个SQL语句中放入另一个SQL语句,当我们在WHERE字句或HAVING字句中插入另一个SQL语句时,就有一个subquery架构;
作用:
被用来连接表格,另外,有的时候它是唯一能够连接两个表格的方式;
语法:
SELECT "栏位1"
FROM "表格"
WHERE "栏位2" [比较运算素]
(SELECT "栏位1"
FROM "表格"
WHERE "条件");
比较运算符:<>,<=,>=,=,或文字运算符,如like,在上个查询中,如果只查询某一般学生的成绩,可以这样写:
select name,sum(score) from mytest where name in (select name from info where class='一班')
group by name;
七、INSERT INTO
到目前为止,我们学到了如何把资料从表格中取出,如何将数据插入表格中,这就要讨论INSERT INTO和UPDATE;
第一种:一次输入一笔资料:insert into 表格名(“栏位1”,“栏位2”...) values('值1',‘值2’...);
第二种:INSERT INTO可以输入多笔资料,唯一和第一种不同的是,用select指令来输入表格的资料,这个时候你可能说那数据就是从另一张表来的,没错!
依次输入多笔资料的语法为:
INSERT INTO 表格1 (“栏位1”,“栏位2”...) SELECT “栏位3”,“栏位4”...FROM 表格2;
以上的语法是最基本的,这整句SQL可以含有WHERE,HAVING,GROUP BY等,以及表格连接及别名等;
八、UPDATE
指令的语法是:
UPDATE "表格名"
SET "栏位1" = [新值]
WHERE "条件";
九、DELETE
只是删除表中的一些资料,语法如下:
DELETE FROM "表格名"
WHERE "条件";
十、UNION
目的是将两个SQL语句的结果合并起来,从这个角度来看,它和JOIN有点类似,但UNION的限制是两个SQL语句所产生的栏位需要是同样的种类,另外,当我们
用UNION这个指令时,我们只会看到不同的资料值(类似:DISTINCT);
语法如下:
SQL语句1
UNION
SQL语句2;
例如:查询所有学生(name)和编号(number);
select name,number from mytest
union
select name,number from info;