Mysql查询语句
排序查询
SELECT * FROM 表名 ORDER BY 列名; 【默认按此列名升序】
SELECT * FROM 表名 ORDER BY 列名 DESC; 【按指定列降序】
SELECT * FROM 表名 ORDER BY 列名1 ASC, 列名2 DESC; 【按列名1升序,并且按列名2降序】
SELECT * FROM 表名 ORDER BY 列名1, 列名2 DESC ; 【按列名1升序,并且按列名2降序,省略了ASC关键字】
限制查询结果返回的数量
SELECT * FROM 表名 LIMIT x; 【查询出结果集中x条记录】
SELECT * FROM 表名 LIMIT x, y; 【查询结果集中y条记录,从第x条之后开始】
子查询
子查询(Subquery)是指出现在其他SQL语句内的SELECT语句
修饰子查询返回的多个结果
INSERT...SELECT
将查询结果写入数据表
INSERT [INTO] 表名 [(列名,...)] SELECT...
多表更新
UPDATE 表名 INNER JOIN 表名2 ON 列名1 = 列名2 SET 列名1= 列名2;
CREATE...SELECT
创建数据表的同时,将查询结果写入数据表
CREATE TABLE [IF NOT EXISTS] 表名 [(CREATE_definition,...)] select_statement
举例
CREATE TABLE tdb_goods_brands(
brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
brand_name VARCHAR(40) NOT NULL
)
SELECT brand_name FROM tdb_goods GROUP BY brand_name;
连接类型
INNER JOIN,内连接
在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。
LEFT [OUTER] JOIN,左外连接
RIGHT [OUTER] JOIN,右外连接
连接条件
使用ON关键字来设定连接条件,也可以使用WHERE来代替。
通常使用ON关键字来设定连接条件,
使用WHERE关键字进行结果集记录的过滤。
仅显示左表及右表符合连接条件的记录
内连接
显示左表及右表符合连接条件的记录
SELECT 表1.列名, 表2.列名 FROM 表名1 INNER JOIN 表名2 ON 表1.列名= 表2.列名;
左外连接
显示左表的全部记录及右表符合连接条件的记录
SELECT 表1.列名, 表2.列名 FROM 表名1 LIFT JOIN 表名2 ON 表1.列名= 表2.列名;
右外连接
显示右表的全部记录及做表符合连接条件的记录
SELECT 表1.列名, 表2.列名 FROM 表名1 RIGHT JOIN 表名2 ON 表1.列名= 表2.列名;
三表联查后面在跟一个INNER JOIN
SELECT 表1.列名, 表2.列名,表3.列名 FROM 表名1 INNER JOIN 表名2 ON 表1.列名= 表2.列名 INNER JOIN 表名3 ON 表1.列名= 表3.列名;
外连接
ALTER JOIN B join_condition
数据表B的结果集依赖数据表A。
数据表A的结果集根据左连接条件依赖所有数据表(B表除外)。
左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)。
如果数据表A的某条记录否和WHERE条件,但是在数据表B不存在否和连接条件的记录,将生成一个所有列为空的额外的B行。
自身连接
同一个数据表对其自身进行连接
SELECT
s.列名,
p.列名
FROM
表名1 AS s
LEFT JOIN 表名1 AS p
ON s.`列名` = p.`列名`;
分组查询
GROUP BY 列名
分组条件
HAVING 条件 条件列必须出现在查询字段上,否则需要聚合函数
SELECT `列名` FROM 表名HAVING COUNT(列名) > 5;