SELECT语句
SELECT 列名 FROM 表名 WHERE --> GROUP BY --> HAVING --> ORDER --> LIMIT;
1、查询语句的执行顺序
当一条查询语句中包含所有子句,执行顺序如下
1)from
从左向右,从前向后,依次执行。数据量较大的表最后放在后面。
2)where
从右向左,从下往上,将可以过滤掉最多数据的条件放在where语句中,可以提高查询效率
3)group by
从左向右,从前向后,依次执行。
注意:如果select语句中包含group by分组,select只能查询被分组列和聚合函数。
4)having
5)order by
从左向右,消耗资源较大
6)limit
2、条件查询
1)where语句中可使用运算如
= 、!= 、<>(不等于) 、< 、> 、<= 、>= 、+ 、- 、* 、/
2)where语句中可使用英文表示运算符
BETWEEN...AND
IN
IS NULL
AND
OR
NOT
3、模糊查询
LIKE %(任意n个字符)_(任意一个字符)
SELECT * FROM [user] WHERE u_name LIKE '%三%'
//结果:唐三 唐三藏 三德子...
SELECT * FROM [user] WHERE u_name LIKE '_三_'
//结果:唐三藏
4、字段控制查询
1)DISTINCT去重
SELECT DISTINCT sal FROM emp;
2)求和 两列类型相同就可以做加运算
SELECT * sal + comm FROM emp;
3)IFNULL如果为null值则选择后一个值
SELECT * sal + IFNULL(comm,0) FROM emp;
4)别名 AS as可省略
SELECT * sal + IFNULL(comm,0) (AS) total FROM emp;
5、排序
ORDER BY age 默认升序
ORDER BY age ASC 升序
ORDER BY age DESC降序
ORDER BY age ASC,empno DESC按age升序如果age相同按empno降序
6、聚合函数
COUNT()记录查询结果条数
MAX()最大值
MIN()最小值
AVG()平均值
SUM()和
7、分页
SELECT * FROM emp LIMIT 0,5;
limit后面第一个值开始显示条数的下标,从0开始
第二个值是每一页显示条数。
8、关联查询
将两个或以上的表或视图相连接的查询叫关联查询,例如:
SELECT t1.empno,t2.empno
FROM t1,t2
WHERE t1.empno=t2.empno;
或
SELECT t1.empno,t2.empno
FROM t1 JOIN t2
ON (t1.empno=t2.empno);
内联查询
SELECT t1.empno,t2.empno
FROM t1 (INNER) JOIN t2
ON (t1.empno=t2.empno);
9、笛卡尔积
笛卡尔积是指做关联的每个表的每一行都与其他表的每一行做组合。
SELECT t1.empno,t2.empno FROM t1,t2
10、等值连接
最常见的一种,通常在有主外键关联关系的表中。
SELECT t1.empno,t2.empno
FROM t1,t2
WHERE t1.empno=t2.empno;
11、子查询
1)where型子查询,把内层查询的结果当作外层查询的条件
SELECT * FROM t_student WHERE student_subject='C语言' AND student_score>=ALL (SELECT student_score FROM t_student WHERE student_subject='C语言') ;
2)from型子查询
select * from(select * from t_student where student_subject='C语言') t
3)select型子查询
SELECT s.student_id,s.student_name,(SELECT class_name FROM t_class c WHERE c.class_id=s.class_id) FROM t_student s GROUP BY s.student_id;