MySQL笔记
1.limit语法
MySQL不支持top语法,那么在查询前xx条记录时应该怎么办呢?
limit可以很好的解决这个问题。
1.查询前10条记录
select * from table limit 10;
2.查询第11到50的40条的记录
select * from table limit 10,40;
3.查询后10条记录
select * from table
order by id desc limit 10;
4.查询倒数第2到倒数第10的9条记录
select * from table
order by id desc limit 1,9;
注意:limit的格式为 limit m,n。
m为查询记录的起始位置(从0开始),n为要查询的记录个数。当从头部或者尾部开始查询时,m为0,可以省略不写。而很多情况下,不会有明确的需求告知要查询多少条记录,而只给出需要查询从xx到xx的记录,所以在查询之前一定要清楚需要查询的记录条数,尤其是倒序查询时。
2.like语法
语法 | 效果 |
---|---|
'A%' | 以A开头的 |
'%A' | 以A结尾的 |
'%A%' | 包含A的 |
'_A%' | 第二个字符为A的 |
'_AB%' | 第二个字符为A且第三个字符为B的 |
'2_%_%' | 以2开头且长度至少为3的 |
'_2%3' | 第二个字符为2且以3结尾的 |
'A%B' | 以A开头并且以B结尾的 |
3.通配符
语法 | 效果 |
---|---|
'[ABC]%' | 以A或B或C开头的 |
'[!ABC]%' | 不以A或B或C开头的 |
4.写SQL语句的一般顺序
SELECT(字段)
FROM(表名)
WHERE(条件)
GROUP BY(分组表法师)
HAVING(分组条件)
ORDER BY(排序 默认为升序ASC,降序DESC)
5.子查询
1.any,some关键字
例如:
table1表中有(1), (5),(13),(27)四个值
table2表中有(6),(14),(11),(20)四个值
返回number1中任意大于number2的值
select number1 from table1
where number1 > any(select number2 from table2)
结果返回13,27
2.all关键字
返回number1中全部大于number2的值
select number1 from table1
where number1 > all(select number2 from table2)
结果返回27
3.exists关键字
查询suppliers表中是否存在s_id=107的供应商,若存在,则返回fruits表中的记录
select * from fruits
where exists(select s_name from suppliers where s_id=107)
只要内层查询语句返回至少一行数据,即返回true
4.in关键字
内层查询的结果集为外层查询的一个条件
5.比较运算符
“>”,"<","=",">=","<=","!="
6.合并结果集
合并结果集可以用union或union all连接两个单独的查询语句
区别:
union all:单纯的将两个(或多个)查询结果合并到一起,不去重,故效率高
union:去重复
7.as取别名
select s_name as 学生姓名 from student;
注:
1.as可以省略不写
2.as后面的别名不需要加’ ’
3.当表名取as后,返回结果中不会显示,只会显示新的字段别名