SELECT
语法结构
SELECT
column_1, column_2, ...
FROM
table_1
[INNER | LEFT |RIGHT] JOIN table_2 ON conditions
WHERE
conditions
GROUP BY column_1
HAVING group_conditions
ORDER BY column_1
LIMIT offset, length
SELECT语句由以下列表中所述的几个子句组成:
- SELECT之后是逗号分隔列或星号(*)的列表,表示要返回所有列。
- FROM指定要查询数据的表或视图。
- JOIN根据某些连接条件从其他表中获取数据。
- WHERE过滤结果集中的行。
- GROUP BY将一组行组合成小分组,并对每个小分组应用聚合函数。
- HAVING过滤器基于GROUP BY子句定义的小分组。
- ORDER BY指定用于排序的列的列表。
- LIMIT限制返回行的数量。
语句中的SELECT和FROM语句是必须的,其他部分是可选的。
简单的查询语句
在学生表中查询学生的学号和姓名
SELECT stu_id,stu_name FROM student;
查询学生表中所有的信息
SELECT * FROM student;
*
表示查询所有的列,但并不是每次都需要表中所有的列,这样写虽然方便但是会增加I/O,降低查询的速度
使用WHERE语句过滤查询结果
如果不使用WHERE子句,只是用SELECT语句就会返回数据表中所有的行,但往往不是所有的行都是需要的,比如想要查找及格的学生的学号和姓名。WHERE子句可以通过设置过滤表达式对结果集进行过滤,只返回需要的行。
WHERE子句中形成过滤表达式的比较运算符
操作符 | 描述 |
---|---|
= | 等于,几乎任何数据类型都可以使用它 |
<>或!= | 不等于 |
< | 小于,通常使用数字和日期/时间数据类型 |
> | 大于 |
<= | 小于或等于 |
= | 大于或等于 |
还有一些有用的运算符可以在WHERE子句中使用来形成复杂的条件,例如:
* BETWEEN选择在给定范围值内的值。
* LIKE匹配基于模式匹配的值。
* IN指定值是否匹配列表中的任何值。
* IS NULL 检查该值是否为NULL。
使用BETWEEN查询所需日期(requiredDate)从2013-01-01到2013-01-31的所有订单
SELECT
orderNumber,requireddate,status
FROM
orders
WHERE requireddate BETWEEN CAST('2013-01-01' AS DATE) AND CAST('2013-01-31' AS DATE);
在mysql中提供了两个通配符,用于LIKE运算符一起使用
* 百分号%
通配符允许匹配人和我字符串的零个或多个字符
* 下划线_
通配符允许匹配任何单个字符
查询已字母a
开头的员工的信息
SELECT employeeNumber,lastname,firstname FROM employees WHERE firstname LIKE 'a%';
为了获取像_20
和10%
这样的数据的时候,需要使用转义,在不指定转义字符的情况下\
作为转义的标志
查询包含_20
字符串
SELECT productcode,productName FROM products WHERE productcode LIKE '%\_20';
也可以通过ESCAPE
指定转义的符号
SELECT productcode,productName FROM products WHERE productcode LIKE '%$_20' ESCAPE '$';