1、操作符
(1)>;<;<=;>=;=;!=;<>(比较运算)
【大于小于情况】
SELECT * FROM students WHERE age>20;
(2)AND,NOT,OR
【AND 与】
SELECT * FROM students WHERE age>20 AND age<30;
【OR 或】
SELECT * FROM students WHERE age>20 OR age<30;
(3)BETWEEN...AND...和NOT...BETWEEN...AND
【BETWEEN...AND...】
SELECT * FROM students WHERE age BETWEEN 20 AND 30;
(4)IS (NOT) NULL(空值判断)
【空(非空)判断】
SELECT * FROM students WHERE name IS NULL;
SELECT * FROM students WHERE name IS NOT NULL;
(5)LIKE,NOT LIKE(字符串匹配)及%和_通配符
【模糊查询】
【格式:like '%字符%'】
【%可以代替好几位,_只能代替一位】
SELECT * FROM students WHERE name LIKE '张%'
2、常用函数
(1)分组函数
COUNT;SUM;AVG;MAX;MIN
【得出年龄最小(大)的人】
SELECT MIN(age) FROM students;
SELECT MAX(age) FROM students;
【得出年龄平均值】
SELECT AVG(age) FROM students;
SELECT SUM(age)/COUNT(age) FROM students;
【得出年龄总和】
SELECT SUM(age) FROM students;
【统计有多少条记录】
SELECT COUNT(age) FROM students;
SELECT COUNT(1) FROM students;
SELECT COUNT(*) FROM students;
(2)其它函数(非SQL标准)
字符串;日期和时间;NVL
3、Select子句
(1)目标列
· 列名,或者星号
· 常数
· 函数以及列名等构成的表达式
· DISTINCT关键字
【去重】
SELECT DISTINCT sex FROM students;
(2)星号' * '表示所有的列
(3)可以为每一列指定别名
【字段别名】
SELECT SUM(age)/COUNT(age) AS avgs FROM students;
SELECT SUM(age)/COUNT(age) avgs FROM students;
4、From子句
(1)表名
(2)视图的名字
(3)另一个查询的结果
(4)可以指定别名
【给表更改别名(适用于多表联查)】
SELECT SUM(s.age)/COUNT(s.age) avgs FROM students s;
5、排序(Order By)
【排序,默认从小到大ASC,从大到小DESC】
SELECT * FROM students ORDER BY age;
SELECT * FROM students ORDER BY age ASC;
SELECT * FROM students ORDER BY age DESC;
【多字段排序(先按第一个字段排序,若第一字段有重复的部分,则重复部分按第二字段排序)】
SELECT * FROM students ORDER BY age,salary;
6、分组(Group By)
【分组,求各个组的对应个数】
【去重,类似DISTINCT】
SELECT age, COUNT(age) FROM students GROUP BY age;
SELECT sex, COUNT(sex) FROM students GROUP BY sex;
【求年龄最大的男女各是多少岁】
SELECT sex,MAX(age) FROM students GROUP BY sex;
【求男女各有多少人】
SELECT sex,COUNT(1) FROM students GROUP BY sex;
注意:使用GROUP BY时,SELECT子句只能由以下部分组成
(1)聚合函数
(2)Group by中出现的列名
(3)1和2通过函数和表达式的结果
7、HAVING
· 对汇总查询后的结果在此进行过滤
· HAVING智能跟随GROUP BY使用
· 注意和WHERE的区别
【求男生中年龄最大值】
SELECT sex,MAX(age) FROM students WHERE sex = '1' GROUP BY sex;
SELECT sex,MAX(age) FROM students GROUP BY sex HAVING sex = '1';
【求20-29年龄段有多少人】
SELECT age,COUNT(1) FROM students WHERE age BETWEEN 20 AND 29 GROUP BY age;
SELECT age,COUNT(1) FROM students GROUP BY age HAVING age BETWEEN 20 AND 29;
8、多表关联
【笛卡尔积】
SELECT * FROM students,object;
【两张表关联,一定要添加两个表对应条件,不然会出现笛卡尔积】
SELECT s.*,o.* FROM students s,object o WHERE o.user_id = s.id; (内连接)
SELECT s.*,o.* FROM students s INNER JOIN object o ON o.user_id = s.id; (内连接)