一、 基本用法
select 查询字段 from 表名或视图名
where 条件
group by 分组
having 筛选
order by排序
注意点 :
(1)可以使用as给查询出的字段取别名,as 也可以省略,但有些前台语言不能识别,所以最好还是需要加as,如果别名中含有一些特殊的字符要用引号或转义栝起来。
例: select name as 姓名 from students;
(2) 可以使用concat函数对字符串(比如说字段名)进行拼接。
例:select name as 姓名, concat(age,’岁’) as 年龄 from students;
(3)select可以将本不存在的值作为一列。
例:select name as 姓名, ’中国’ as 国家;
(4)使用变量作为列名
select name as 学生姓名, score as 分数,
@grade:=(
Case
When score between 90 and 100 then ‘优秀’
When score between 80 and 90 then ‘良好’
end
)as 等级
from students;
(5)sql中的!、||、&&可以使用and、or、not代替。
(6)可以使用limit查询指定的条数
limit(m,n):表示从第m个索引开始查询n个值。
(7)可以使用desc和asc进行排序,如果有两个相同的值,则按照主键进行排序,或者可以设置多个排序。
例: select age from students
where age=20
order by age asc,name desc;
(8)使用聚合函数进行统计。
例:select sum(age) from students
二、select中的模糊查询
1.使用like进行字符串的模糊查询,通常会和通配符一起使用,或者和正则表达式一起使用。如果需要对文章等比较长的文本进行搜索,建议使用全文匹配。
(1)Like中有两种通配符,%和
,使用%来进行多个字符的匹配,使用进行一个字符的匹配。
2.使用betwwen…and来进行数值和日期之间的比较查询,功能是介于两种数据之间,可以使用Not 进行取反操作。
(1)Between a and b 等价于 a<=num<=b,其中a<=b
3.使用in来查询一个范围值里面的匹配,可以使用not进行取反。
三、分组查询
1.基本语法:group by 分组字段1,分组字段2…
(1)Group by 的原理类似于distinct(删除重复的字段)
例: Select distinct sex from students;
2.group by 后面存放select语句中所有的非聚合字段,并可出现select中没有的字段。
四、分组过滤
1.使用having语句实现分组后结果集的再次筛选,having出现在group by之后,没有group by就没有Having
2.where和having的区别:
(1)where出现在Group by之前而having出现在group by 之后
(2)where实现对表中行的过滤,group by实现对对象分组后结果集的过滤
五、select的基本语法和执行原理。
书写顺序是:select 、from、where、group by、having 、order by
执行顺序是:from、where、group by、having、order by、select
六、多表查询
1.关键点逻辑:主外键以及父表、子表的关系。
2.语法:
(1)使用where语句进行查询
select 字段
from 表1 (as xxx),表2(as xxx)...
where 父表的主键=子表的外键 and其他表的主键=子表的外键 and 其他条件
(2)使用join实现表的连接
select 字段
From 子表 join 父表 on 子表的外键=父表的主键
[join 表3 on 外键=主键];
注:使用where时的语法(效率没有join高,不建议使用)
3.join 连接有三种情况:内连接,外连接、自连接默认情况下为inner join。
(1)内连接取的是两张表之间的交集,在一定的条件下,外连接可以代替内连接,反之不可以。
例: select s.name ,c.name from
students s inner join classes c
on s.id = cid;
(2)外连接:外连接又分为三个部分,left join(左连接),right join(右连接),union或者full join(联合查询,mysql不支持full join):
left join(左连接):显示结果为两个结果的交集再加上左边表部分多出来的结果的值。
right join(右连接):显示结果为两个结果的交集再加上右边表部分多出来的结果的值。
union(联合查询):将多个查询的结果合并成一个结果集。
联合查询的例子:
Select 1 union select2 union select3
注意:查询结果的字段的个数和类型要匹配。
(3)自连接:对表的自身进行连接
例:用stop字段来对route(公交线路表)进行自连接, 查询的结果就是共用同一车站的所有公交线。
SELECT * FROM route R1, route R2
WHERE R1.stop=R2.stop;