MySQL速学篇第二课

一、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;

原文地址:https://www.cnblogs.com/cynthia006/p/6872219.html