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;
posted @ 2020-12-09 21:34  局域网外  阅读(93)  评论(0编辑  收藏  举报