MySQL(一)基础

116 阅读3分钟

1.基础查询

SELECT * FROM table_name
SELECT field1, field2,...fieldN FROM table_name

使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据

1.1. 条件:WHERE

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....

WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。

1.1.1. 操作符

SELECT * FROM table_name1 WHERE field1 = '文本';   #非数字要加引号
SELECT * FROM table_name1 WHERE field1 = 100;    #纯数字加不加引号都可以
SELECT * FROM table_name1 WHERE field1 != 100;    #不等于
SELECT * FROM table_name1 WHERE field1 <> 100;   #不等于
SELECT * FROM table_name1 WHERE field1 > 100;     #大于
SELECT * FROM table_name1 WHERE field1 >= 100;   #大于等于
SELECT * FROM table_name1 WHERE field1 < 100;     #小于
SELECT * FROM table_name1 WHERE field1 <= 100;   #大于等于

1.1.2. 逻辑运算

AND、OR
SELECT * FROM table_name1 WHERE field1 = '文本' AND field2 = '文本';  #且
SELECT * FROM table_name1 WHERE field1 = '文本' OR field1 = 100;  #或
IF
 WHERE  IF(条件,  true执行条件, false执行条件 )
SELECT * FROM book WHERE IF(price > 120, btypeid=10, btypeid=11); 

以上sql查询语句,意思是查price字段大于120,当price大于120为真时,再找btypeid等于10的行记录,

1.1.3. LIKE

SELECT * FROM table_name1 WHERE field1 LIKE '%com%'   #查找包含com的数据
SELECT * FROM table_name1 WHERE field1 LIKE 'com%'    #查找以com开头的数据
SELECT * FROM table_name1 WHERE field1 LIKE '%com'    #查找以com结尾的数据

1.2. 数量:LIMIT

LIMIT[起始条目索引,],条目数
特点:起始条目索引从0开始,其实条目索引可省略;
SELECT * FROM 表名 LIMIT 3; #从第4条数据开始取数,取1条数据,即只取第四条
SELECT * FROM 表名 LIMIT 3,1; 
#LIMIT 条目数 OFFSET 起始条目索引
特点:起始条目索引从0开始,其实条目索引可省略;
#从第4条数据开始取数,取1条数据,即只取第四条
SELECT * FROM 表名 LIMIT 1 OFFSET 3; 

 

1.3. 排序:ORDER BY

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
 ORDER BY field1 DESC, field2 ASC

ASC:升序,不填默认为升序, DESC: 降序

排序使空排在最后 order by field1 is null

mysql> select * from bjy_order order by order_number is null,order_number asc;

排序空值放最后.png

2.分组:GROUP BY

2.1. 分组统计 COUNT(*)

SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
将数据表按名字进行分组,并统计每个人有多少条记录

2.2. 分组再统计 WITH ROLLUP

SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…) 其中记录 NULL 表示所有人的登录次数。 我们可以使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:

select coalesce(a,b,c);

参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。

SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

2.3. 分组后条件:HAVING

SELECT JSON_UNQUOTE(JSON_EXTRACT(syd, '$[0].name')) 生源地,COUNT(*) 人数 FROM data_repository_4 GROUP BY syd HAVING 生源地 NOT IN ('','华侨','北方工大') ORDER BY 人数 DESC

HAVING 可以用别名,WHERE不可以; WHERE用在GROUP BY 前,HAVING 用在GROUP BY 后;

3. 数据操作

3.1. 更新:UPDATE 

UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]

1. 可以同时更新一个或多个字段。 2. 可以在 WHERE 子句中指定任何条件

3.2. 删除:DELETE 

DELETE FROM table_name [WHERE Clause]

1. 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。 2. 可以在 WHERE 子句中指定任何条件

3.3. 插入数据:INSERT INTO

INSERT INTO table_name ( field1, field2,...fieldN )  VALUES   ( value1, value2,...valueN );