MySQL select语句
时间:2019-02-04 12:52:24 来源:igfitidea点击:
MySQL SELECT语句用于从MySQL中的一个或多个表中检索记录。
在本教程中,将通过语法和示例说明如何使用MySQL SELECT语句。
MySQL select语句语法
MySQL的SELECT语句的完整语法是:
SELECT [ ALL | DISTINCT | DISTINCTROW ] [ HIGH_PRIORITY ] [ STRAIGHT_JOIN ] [ SQL_SMALL_RESULT | SQL_BIG_RESULT ] [ SQL_BUFFER_RESULT ] [ SQL_CACHE | SQL_NO_CACHE ] [ SQL_CALC_FOUND_ROWS ] expressions FROM tables [WHERE conditions] [GROUP BY expressions] [HAVING condition] [ORDER BY expression [ ASC | DESC ]] [LIMIT [offset_value] number_rows | LIMIT number_rows OFFSET offset_value] [PROCEDURE procedure_name] [INTO [ OUTFILE 'file_name' options | DUMPFILE 'file_name' | @variable1, @variable2, ... @variable_n] [FOR UPDATE | LOCK IN SHARE MODE];
里面有很多关键词。
一般我们都先用MySQL中SELECT语句语法中最简单的形式:
SELECT expressions FROM tables [WHERE conditions];
然后再根据需要添加相应的关键词。
MySQL SELECT语句关键词的说明
在语法中,中括号[]括起来的都是可选的
关键字 | 说明 |
---|---|
SELECT | 指定执行SELECT操作 |
ALL | 可选的。返回所有匹配的行 |
DISTINCT | 可选的。从结果集中删除重复项。 |
DISTINCTROW | 可选的。 和DISTINCT一样 |
HIGH_PRIORITY | 可选的。它告诉MySQL,当SELECT和UPDATE语句在等待相同资源时,先运行SELECT。它可以和使用了表级锁定的MyISAM,MEMORY和MERGE表一起使用。 |
STRAIGHT_JOIN | 可选的。它告诉MySQL按照在FROM子句中列出的顺序连接表。 |
SQL_SMALL_RESULT | 可选的。使用快速临时表存储结果(与DISTINCT和GROUP BY一起使用)。(避免排序和IO操作) |
SQL_BIG_RESULT | 可选的。优先做排序操作,而不是使用临时表存储结果(与DISTINCT和GROUP BY一起使用)。 |
SQL_BUFFER_RESULT | 可选的。使用临时表存储结果(不能与子查询一起使用)。 |
SQL_CACHE | 可选的。将结果存储在查询缓存中。 |
SQL_NO_CACHE | 可选的。不要将结果存储在查询缓存中。 |
SQL_CALC_FOUND_ROWS | 可选的。计算结果集中有多少条之后可以使用FOUND_ROWS函数检索出来的记录(不考虑LIMIT修饰符)。 |
expressions | 想要获取的列或者表达式。如果想选择所有列,那么用 星号*。 |
FROM tables | 从哪些表获取数据。在FROM子句中必须列出至少一个表。 |
WHERE conditions | 可选的。conditions是选择的数据行必须满足的条件。 |
GROUP BY expressions | 可选的。跨多个记录收集数据,并按一个或多个列对结果进行分组。 |
HAVING condition | 可选的。与GROUP BY组合使用,结果只返回那些满足条件 condition的行组。 |
ORDER BY expression | 可选的。用于对结果集中的记录(数据行)进行排序。 |
LIMIT | 可选的。限定返回结果的行数。最大数由上面的number_rows指定,而offset_value指定了从结果集中的第几行开始算,默认是第一行。 |
PROCEDURE | 可选的。用于指定对结果集中的数据进行处理的过程。procedure_name是过程名称 |
INTO | 将结果集写入到文件或者变量。 比如 INTO OUTFILE 'filename' options INTO DUMPFILE 'filename' INTO @variable1, @variable2 |
FOR UPDATE | 可选的。(写锁)受查询影响的记录将被写锁锁定,直到事务完成。 |
LOCK IN SHARE MODE | 可选的。(共享模式锁定)受查询影响的记录可以被其他事务使用,但不能被那些其他事务更新或删除。 |
MySQL select语句例子
MySQL SELECT从一个表中查询所有字段
SELECT * FROM orderdetails WHERE quantity >= 20 ORDER BY quantity DESC;
*
表示选择所有字段,- quantity>=20 只获取数量大于或等于20的记录,
- 结果集按quantity降序排序。
MySQL SELECT从一个表中只选择特定的字段
SELECT orderid, quantity, unitprice FROM orderdetails WHERE quantity < 300 ORDER BY quantity ASC, unitprice DESC;
- 只返回order_id、quantity和unit_price字段,
- 这些字段来自order_details表,
- 只返回quantity小于300的记录。
- 结果按数量进行升序排序,然后按unit_price进行降序排序。
MySQL SELECT从多个表中检索字段
SELECT orders.OrderID, customers.CompanyName FROM customers INNER JOIN orders ON customers.CustomerID = orders.CustomerID ORDER BY OrderID;
- 我们通过 CustomerID将两个表连接在一起。
- 然后选择检索orders_id和customer_name两个字段。
- 最后对结果集按order_id升序排序。
MySQL SELECT将结果集写入文件
SELECT OrderID, Quantity, UnitPrice FROM orderdetails WHERE Quantity < 500 ORDER BY Quantity INTO OUTFILE 'results.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
- 执行该MySQL SELECT语句后,将会在数据库的目录(比如D:\mysqldata\northwind) 下创建一个results.txt。
- 所有的数据将保存在这个文件中。
- 其中,每一条记录通过 换行符号\n进行分割,所有每条记录一行。
- 每个字段通过 逗号,进行分隔,
- 如果字段需要封装起来,那么就是用 分号
在INTO OUTFILE 'filename' options中的options可以指定为以下值
FIELDS ESCAPED BY 'character'
FIELDS TERMINATED BY 'character' [ OPTIONALLY ENCLOSED BY 'character' ]
LINES TERMINATED BY 'character'
character是某一个字符,比如 逗号,, 分号;等
ESCAPED表示转义
TERMINATED表示分隔
ENCLOSED表示封装 (比如字段的值本身带有 逗号,, 那么就需要封装起来)