select语句,是数据库中使用最广泛的语句。
查询表中所有数据
语法如下:
select * from [数据库名.]表名;
语句中的*号,表示数据表中的所有字段。
如果已经使用use 数据库名语句选定了数据库,则在执行查询语句时,可以不指定数据库名。
示例:
select * from school.student;
查询表中指定字段
语法如下:
select 字段1,字段2,... from [数据库名.]表名;
示例:
select student_id,student_name from school.student;
查询表中部分数据
语法如下:
select * from [数据库名.]表名 where 查询条件1 and|or 查询条件2 ...;
and:查询条件1和查询条件2都满足才返回;
or:查询条件1和查询条件2只要有一个满足就返回;
当有多个查询条件时,查询条件的执行顺序可能会影响最终返回的结果。默认情况下,查询条件是从左到右、从上到下执行的。可以使用括号改变查询条件的执行顺序。
比如:(查询条件1 and 查询条件2) or (查询条件3 and 查询条件4)
示例:
查看年龄在10岁以上的男同学:
select * from school.student where age > 10 and gender = '男';
查询表中指定字段的部分数据
语法如下:
select 字段1,字段2,... from [数据库名.]表名 where 查询条件1 and|or 查询条件2 ...;
示例:
select student_id,student_name from school.student where age > 10 and gender = '男';
完整的SELECT语句
语法如下:
SELECT [distinct] * | [表名|表别名.]字段1 [as] [字段别名1],[表名|表别名.]字段2 [as] [字段别名1],... [FROM 表名 [as] [表别名] [WHERE 查询条件] [GROUP BY子句] [HAVING子句] [ORDER BY 子句] [LIMIT 子句]
表名、字段名如果为SQL的关键字,会引起歧义导致语法错误。此时,需要在表名和字段名两边加上反引号`。如`table`;
select语句中的部分子句可以没有,但书写不能乱。必须以上面的顺序书写。
示例:
查询student表中,教授50个以上大于10岁的学生的前5个老师id及学生数量:
select a.teacher_id, count(1) from school.student a where a.age > 10 group by a.teacher_id having count(1) >= 50 order by a.teacher_id asc limit 5;
表别名
在FROM的表名后面,可以为表取一个别名。这样在使用这个表中的字段时,除了可以限定表名外,还可以限定别名。
这在FROM后有多张表或表名本身较长时,非常有用。
当然,当FROM后面只有一张表时,SELECT中使用的字段名前可以不限定表名或表别名,因为即使不限定也不会引起歧义。
设置的表别名如果为SQL的关键字或包含有空格,需要在别名两边添加反引号`。如`table`;
比如:
select student.student_id,student.student_name from student;
等价于:
select a.student_id,a.student_name from student as a;
字段别名
跟表别名一样,也可以为字段设置别名。设置字段别名后,返回的结果集的列名即名设置后的别名。
比如:
select student_id as id,student_name as name from student;
设置的字段别名如果为SQL的关键字或包含有空格,需要在别名两边添加反引号`。如`table`;
DISTINCT去除重复
当SELECT的结果集中存在重复数据,而对于重复数据又只想返回一条时,可以使用DISTINCT关键字,对SELECT返回的结果集去重。
示例:
查询学生表中所有的teacher_id、teacher_name并去重:
select distinct teacher_id,teacher_name from student;
LIMIT限定返回行数
在不做其他限定的情况下,SELECT语句返回所有符合条件的行。但如果返回的行比较多,而又只需要返回部分行时,可以使用LIMIT关键字进行限定。常常应用于WEB应用中的分页功能。
语法如下:
limit [位置偏移量[,|offset]]行数
位置偏移量:指定从哪一行结果开始返回。第一行的位置偏移量为0;如果不指定位置偏移量,会从第一行开始返回;
行数:要返回的总行数;
offset:在LIMIT子句中,使用逗号,与使用offset关键字是等价的。也就是说,limit m,n等价于limit m offset n;
示例:
按student_id升序排序,返回前5名学生:
select * from school.student order by student_id limit 5;
按student_id升序排序,每10行记录为一页,返回第3页(开始的位置偏移量为20)的记录:
select * from school.student order by student_id limit 20,10;
在未指定返回顺序的情况下,SELECT结果集的返回结果是无序的。所以在使用LIMIT子句时,经常搭配ORDER BY子句一起使用,否则返回的结果可能是不稳定的;
limit n与limit 0,n是等价的;
limit 1,1返回的是第二行的记录;
SELECT子句的执行顺序
数据库接收到查询请求时,按照预先定义好的顺序进行执行。
select子句的执行顺序如下:
FROM > WHERE > GROUP BY > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。