SQL基础

一.distinct

加在字段前面去重

二.AND 和 OR 运算符

我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'

三.ORDER BY

以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
desc倒序
ASC顺序
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

order by 后面可以用逗号隔开 进行两层排序

四.TOP 

现在,我们希望从上面的 "Persons" 表中选取头两条记录。
我们可以使用下面的 SELECT 语句:
SELECT TOP 2 * FROM Persons
现在,我们希望从上面的 "Persons" 表中选取 50% 的记录。
我们可以使用下面的 SELECT 语句:
SELECT TOP 50 PERCENT * FROM Persons

四.模糊查询

mysql模糊查询 % , _ ,[], [^] 的区别
mysql模糊查询总结

1. % 表示任意0个或多个字符

2. _ 表示任意单个字符(有且仅有一个字符,可以是中文,也可以是英文,也可以是数字)

3. [] 表示其中的某一个字符

4. [^]  [!]表示除了其中的字符的所有字符

现在,我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'
现在,我们希望从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:

我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[!ALN]%'

四.group by

有成绩表如下,表名称是sc,字段s_id是学生编号,c_id是课程编号,score是课程成绩:

SQL基础_第1张图片

1.求每个人的平均

select s_id,avg(score) as 平均成绩 from sc group by s_id;

分组聚合的过程是怎样的?

1.首先是分组,分组字段是s_id,把s_id一样的数据分到一个组,根据s_id把sc表分成七份,效果如下

SQL基础_第2张图片

2.其次是聚合,聚合是由多变一的过程,就是每一个组变成一条记录,有聚合的取聚合的结果,没有聚合的取每个组的第一条记录,avg(score) 取每个组的成绩的平均成绩(avg是平均函数,属于聚合函数),s_id没有聚合,就取每个组的第一条记录,又因为每个组的s_id都一样,所以取一个是合理的。过程如下:

SQL基础_第3张图片

group by 对多个字段进行分组:

GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。

我们下面再接着要求统计出每门学科每个学期有多少人选择,应用如下SQL:

SELECT Subject, Semester, Count(*)
FROM Subject_Selection
GROUP BY Subject, Semester;

group by 的使用有一条原则,那就是select 后面的所有列中没有使用聚合函数到必须出现在group by 后面。(因为不在group by 后面会直接去分组的第一条)

SQL基础_第4张图片

where…group  by…having…order by (这里的group by 与 having 的位置可以调换,但是having放在后面效率高)

看一遍就理解:group by 详解 (baidu.com)

你可能感兴趣的:(java)