MySQL select语法

发布时间:2025-12-09 11:52:48 浏览次数:1

select [ALL | DISTINCT | DISTINCTROW ]    [HIGH_PRIORITY]    [STRAIGHT_JOIN]    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]    [SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]    select_expr [, select_expr] ...    [into_option]    [FROM table_references      [PARTITION partition_list]]    [WHERE where_condition]    [GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]    [HAVING where_condition]    [WINDOW window_name AS (window_spec)        [, window_name AS (window_spec)] ...]    [ORDER BY {col_name | expr | position}      [ASC | DESC], ... [WITH ROLLUP]]    [LIMIT {[offset,] row_count | row_count OFFSET offset}]    [into_option]    [FOR {update | SHARE}        [OF tbl_name [, tbl_name] ...]        [NOWAIT | SKIP LOCKED]      | LOCK IN SHARE MODE]    [into_option]into_option: {    INTO outfile 'file_name'        [CHARACTER SET charset_name]        export_options  | INTO DUMPFILE 'file_name'  | INTO var_name [, var_name] ...}
  • 1、select ... INTO 语句可以将查询结果存储在一个变量中或文件中。

    • 1)select ... INTO var_list 将查询结果写入变量中
    • 2)select ... INTO outfile 将查询结果写入文件中,而且可以指定行和列的格式
    • 3)select ... INTO DUMPFILE 将查询结果写入文件中,但所有内容都在一行内。
  • 2、INTO 从句可以出现在 select 语句的几个不同的位置,但只能出现一次。INTO 从句不能用在 内嵌的 select 语句中

# 在 FROM 之前select * INTO @myvar FROM t1;# 在 锁 之前, MySQL 8.0.20 已经 过时,可能会移除select * FROM t1 INTO @myvar FOR update;# 在语句的最后, MySQL 8.0.20 支持select * FROM t1 FOR update INTO @myvar;
  • 3、var_list
    • 1)var_list 是一个或多个变量,每个变量可以是用户定义的变量,存储过程、函数的参数,或是存储程序的本地变量。变量名大小写不敏感
      1. 查询到的值会相应地赋给每个变量,变量的个数要和查询的列相同,而且结果行只能是一行。如果多行或零行则会报错。
# 可以用 LIMIT 1 限制返回的行数select id, data INTO @x, @y FROM test.t1 LIMIT 1;
  • 4、可以在 TABLE 语句中使用 INTO var_list,只需满足条件: 变量 和 表中列的总数一致,结果也只能是一行
# TABLE 语句, 类似 select * FROM employeesTABLE employees ORDER BY lname DESC LIMIT 1    INTO @id, @fname, @lname, @hired, @separated, @job_code, @store_id;
  • 5、可以使用 VALUES 语句来产生一行数据,应用到 INTO var_list 中,但要使用表的别名
select * FROM (VALUES ROW(2,4,8)) AS t INTO @x,@y,@z;select * FROM (VALUES ROW(2,4,8)) AS t(a,b,c) INTO @x,@y,@z;# 等同于 SET @x=2, @y=4, @z=8;
  • 5、 select ... INTO outfile 'file_name' ,会在服务器 上创建一个文件,文件名不能是已存在的。需要用户有 FILE 权限。
    如果客户端是远程的话,产生的文件可能不太方便访问到,因为只是mysql 客户端的话,不能访问服务器的文件系统。
    这时可以使用 客户端命令: mysql -e "select ..." > file_name, 这样产生的文件就会在客户端上的主机上了。

  • 6、select ... INTO outfile 和 LOAD DATA 语句是,互为相反的操作。都有 export_options,包含 FIELDS 从句 和 LINES 从句

# export_options  [{FIELDS | COLUMNS}        [TERMINATED BY 'string']              # 列 结束的字符串        [[OPTIONALLY] ENCLOSED BY 'char']  # 列 被什么字符环绕        [ESCAPED BY 'char']                  # 列 的转义字符处理    ][LINES        [STARTING BY 'string']        [TERMINATED BY 'string']    ]
TABLE employees ORDER BY lname LIMIT 1000    INTO outfile '/tmp/employee_data_1.txt'    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', ESCAPED BY '\'    LINES TERMINATED BY '\n';select * FROM (VALUES ROW(1,2,3),ROW(4,5,6),ROW(7,8,9)) AS t    INTO outfile '/tmp/select-values.txt';

如果你使用INTO DUMPFILE而不是INTO outfile, MySQL只写入一行到文件中,没有任何列或行终止,也没有执行任何转义处理。这对于选择BLOB值并将其存储在文件中非常有用

https://dev.mysql.com/doc/refman/8.0/en/select-into.html
https://dev.mysql.com/doc/refman/8.0/en/table.html
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_character_set_filesystem
https://dev.mysql.com/doc/refman/8.0/en/load-data.html

select into
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477