加在字段前面去重
我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
以字母顺序显示公司名称(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 后面可以用逗号隔开 进行两层排序
现在,我们希望从上面的 "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]%'
有成绩表如下,表名称是sc,字段s_id是学生编号,c_id是课程编号,score是课程成绩:
1.求每个人的平均
select s_id,avg(score) as 平均成绩 from sc group by s_id;
分组聚合的过程是怎样的?
1.首先是分组,分组字段是s_id,把s_id一样的数据分到一个组,根据s_id把sc表分成七份,效果如下
2.其次是聚合,聚合是由多变一的过程,就是每一个组变成一条记录,有聚合的取聚合的结果,没有聚合的取每个组的第一条记录,avg(score) 取每个组的成绩的平均成绩(avg是平均函数,属于聚合函数),s_id没有聚合,就取每个组的第一条记录,又因为每个组的s_id都一样,所以取一个是合理的。过程如下:
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 后面会直接去分组的第一条)
where…group by…having…order by (这里的group by 与 having 的位置可以调换,但是having放在后面效率高)
看一遍就理解:group by 详解 (baidu.com)