mysql单表查询、多表查询和子查询

1、单表查询
例子:
SELECT FROM tb_name;
SELECT field1,field2 FROM tb_nmae; –投影
SELECT [DISTINCT]
FROM tb_name WHERE condition; –选择,WHERE子句后面接的字段不一定是SELECT接的字段

where子句:
(1)符号匹配
=,!=,>,>=,<,<=
说明:等号也可以用来比较字符串,字符串需要加引号
(2)组合条件
&&:and
||:or
!:not
(3)模糊匹配
使用通配符
百分号(%):匹配任意长度的任意字符
下划线:匹配任意单个字符
(4)正则表达式
regexp ‘正则表达式’
(5)离散取值和连续取值
离散取值:in
连续取值:between..and..
(6)比较空值
is null、is not null

select扩展:
(1)order by filed_name {asc|desc}
说明:排序,asc是正序,默认也是正序,desc是逆序
(2)as
取别名,as可以省略,后面可以直接引用别名
(3)limit:只显示某些行
例子:
limit 2:最终结果只显示2个
limit 2,3:最终结果偏移2个,然后显示接下来的3个
(4)聚合计算
sum(),求总和
avg(),求平均值
min(),求最小值
max(),求最大值
count(),求数量
(5)group by
分组,主要是做聚合计算(一般来说,不是求聚合函数的就不要分组)
(6)having
对分组后的结果过滤,也就是说,对group by后的结果进行过滤必须用having,不能用where

2、多表查询
(1)交叉连接
select * from tb1,tb2
说明:tb1和tb2做笛卡尔乘积
(2)自然连接:对应字段必须保持等值关系
select tb1.xxx,tb2.xxx from tb1,tb2 where tb1.xxx=tb2.xxx
说明:可以加别名
(3)外连接
左外连接:(左表)left join (右表)on (条件)
右外连接:(右表)right join (左表) on (条件)
例子:
比如说,左表是课程表,右表是学生信息
如果以课程表为标准,如果课程表有学生选择,就显示出来,课程没人选就显示为null。这就叫做左外连接;
如果以学生为标准,如果学生有选课,就显示出来,没选课就显示为null。这就叫做右外连接。
(4)自连接
要连接的两个数据表在同一张表中,from tb1 as name1,tb1 as name2
同一张表,起两个别名

3、子查询
一个查询中嵌套另一个查询
(1)在where子句中使用
SELECT NAME FROM student WHERE Age > (SELECT AVG(age) FROM student);
说明:查询出大于平均年龄的学生
不能这样写:SELECT NAME FROM student WHERE Age > AVG(Age)
SELECT NAME FROM student WHERE Age IN (SELECT age FROM tutor)
说明:in的使用
(2)在from子句中使用
这种情况下一般可以使用联合查询(UNION)
例子:(SELECT col1,col2 FROM tb1) UNION (SELECT col1,col2 FROM tb2)