赞
踩
SELECT DISTINCT<Select_list>
FROM <left_table> <join_type>JOIN<right_table> ON<join_condition>
WHERE<where_condition>
GROUP BY<group_by_list> WITH {CUBE|ROLLUP} HAVING<having_condtion>
ORDER BY<order_by_list>
LIMIT<limit_number>
(1) FROM <left_table>
(2) ON<join_condition> (3) <join_type>JOIN<right_table>
(4) WHERE<where_condition>
(5) GROUP BY<group_by_list> (6) WITH {CUBE|ROLLUP} (7) HAVING<having_condtion>
(8) SELECT (9)DISTINCT<Select_list>
(10) ORDER BY<order_by_list>
(11) LIMIT<limit_number>
关键词 distinct用于返回唯一不同的值。
on跟在join后面作为各种连接(例如:内连接,左外连接)的连接条件
作用于一组数据,并对一组数据返回一个值
注意:
-- 这样写是错误的 学生学号有很多个,统计的学生个数count只有一个 ----其他聚合函数类似
SELECT stu.sno,COUNT(stu.sno) count
FROM student stu
例子:
求SCORE成绩表中编号为1的所有学生平均成绩
SELECT AVG(score) AS 平均分
FROM score
WHERE subid = 1
例子:
统计参加了科目编号为1考试的学生编号
SELECT COUNT(*) 考试人数
FROM score
WHERE subid = 1
求SCORE 成绩表中科目编号为2 的学生最高成绩和最低成绩
SELECT MAX(score),MIN(score)
FROM score
WHERE subid = 2
求SCORE成绩表中所有学生成绩的总和
SELECT SUM(score)
FROM score
1. where后面写的是数据库字段名,不能使用别名,聚合函数
2. 联表查询时,where提供连接条件 一个表的外键连接另一个表的主键
3.where后面使用比较运算符
操作符 | 含义 |
---|---|
= | 等于(不是 ==) |
> | 大于 |
>= | 大于,等于 |
< | 小于 |
<= | 小于,等于 |
<> 或 != | 不等于 |
4. 其他操作符
例子:
查询在1995-07-13到1995-07-15之间出生的学生信息
select * from student
where birthday BETWEEN '1995-07-13' AND '1995-07-15'
例子:
查询班级编号是1或者是2的学员信息
SELECT * FROM student
WHERE cid IN(1,2)
查询班级编号不是1或者是2的学员信息
SELECT * FROM student WHERE cid NOT IN(1,2)
LIKE 模糊查询
% 代表任意个字符
_ 代表一个字符
例子:
查询姓张的学员信息
SELECT * FROM student
WHERE name LIKE '张%'
5.逻辑运算
操作符 | 含义 |
---|---|
AND | 逻辑并 |
OR | 逻辑或 |
NOT | 逻辑否 |
group by 可以对一张表自定义的分成若干组,这样就可以分组统计数据
例子:
统计出各学科平均成绩
SELECT subid,AVG(score)
FROM score
GROUP BY subid
where和having的区别
1.因为where后面只能写数据库原始的字段名,不能写别名,聚合函数
2.having后面不能写数据库原始的字段名,只能写别名,聚合函数
3.where针对表中的列发挥作用,查询数据。。having针对查询结果的列发挥作用,筛选数据。
4.where在group by 之前,,having在group by之后
例子: 这个例子不是很规范知识说明
-- 错误的 WHERE后面不能写别名 SELECT cs.sno,cs.cj+5 AS jw FROM cs WHERE jw < 80 -- 正确的 SELECT cs.sno,cs.cj+5 AS jw FROM cs HAVING jw < 80 -- 当然这样写似乎更好 只有学号不带分数 SELECT cs.sno FROM cs WHERE cs.cj+5 < 80 -- 错误的 HAVING后面不能写数据库原始的字段名 SELECT cs.sno FROM cs HAVING cs.cj+5 < 80
-- 不太恰当 携带成绩 SELECT cs.sno,cs.cj+5 AS jw FROM cs WHERE cs.cno = 4 HAVING jw < 85 -- 错误的 WHERE后面不能写别名 SELECT cs.sno,cs.cj+5 AS jw FROM cs WHERE cs.cno = 4 AND jw < 85 -- 错误的 HAVING后面不能写数据库原始的字段名 SELECT cs.sno,cs.cj+5 AS jw FROM cs HAVING jw < 85 AND cs.cno = 4 -- 这样似乎好点 只查询出学号 SELECT cs.sno FROM cs WHERE cs.cno = 4 AND cs.cj+5 < 85
SELECT subid,AVG(score)
FROM score
GROUP BY subid HAVING AVG(score) >= 70
Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序、Desc 降序,默认升序
ORDER BY 不能用在子查询中
例子:
查询学生信息并按照班级编号升序
SELECT * FROM student
ORDER BY cid
例子:
查询年龄最大的五名学生的信息
SELECT * FROM student
ORDER BY birthday
LIMIT 0, 5
查询学生表中第十名后面所有学生的信息
SELECT * FROM student
LIMIT 9, -1
待完成:联表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。