马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一.表利用
MySQL的利用中,一些专用的词无论是大写还是小写都是可以通过的。
1.插入数据
INSERT [INTO] table_name (列名称...) VALUES (列数据...), (列数据...);
"[]"表现无关紧要,插入时,如果不指定要插入的列,则表现默认全部列都要插入数据,插入数据的序次必须和列的序次划一。
如果插入单行数据,则只需一个"()",如果想要多行插入,则可以同时追加多个"()"。
2.更新数据
别的,由于主键大概唯一键对应的值已经存在而导致插入失败,则可以更新数据:
INSERT INTO 表名称 (列名称...) VALUES (列数据...) ON DUPLICATE KEY UPDATE 列名称=新数据...;
除这条语句之外,另有一条语句,名为更换,也可以办理主键或唯一键辩说题目:
REPLACE INTO 表名称 (列名称...) VALUES (列数据...);
如果没有发生辩说,就相当于直接插入,如果发生辩说,则删除原有数据,重新插入新数据。
二.查询
1.查找数据
(1)团体查找
全列查询
select * from 表名称;
指定列查询
select 列名称... from 表名称;
查询字段表达式
select 列名称... 表达式 from 表名称; 比方:
SELECT id, name, 10 FROM exam_result; +---+--------+----+ | id | name | 10 | +---+--------+----+ | 1 | 张三 | 10 | | 2 | 李四 | 10 | | 3 | 王五 | 10 | | 4 | 赵六 | 10 | 如果表达式与字段无关,则会天生一列表达式数据。
SELECT id, name, english + 10 FROM exam_result; +---+---------+-----------------+ | id | name | english + 10| +---+---------+-----------------+ | 1 | 张三 | 66 | | 2 | 李四 | 87 | | 3 | 王五 | 100 | | 4 | 赵六 | 77 | 表达式与字段有关:天生表达式为english + 10即将门生的英语结果+10分的列并体现。
SELECT id, name, chinese + math + english FROM exam_result;
另有如上表达式,表现体现门生汉数英的结果之和。
SELECT id, name, chinese + math + english 总分 FROM exam_result;还可以给表达式指定别名,即在表达式后追加别名。
SELECT DISTINCT 字段 FROM 表名称;
通过DISTINCT,可以将查询结果去重。
(2)定向查找
上边的查找利用,都是对一整个列的数据举行查找,如果我们想要对列中的特定命据举行查找,则可以通过WHERE 条件。
比力运算符:
>, >=, <, <= :大于,大于便是,小于,小于便是
= :便是,NULL 不安全,比方 NULL = NULL 的结果是 NULL
<=> :便是,NULL 安全,比方 NULL <=> NULL 的结果是 TRUE(1)
!=, <> :不便是
BETWEEN a0 AND a1 :范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...) :如果是 option 中的恣意一个,返回 TRUE(1)
IS NULL :是 NULL
IS NOT NULL :不是 NULL
LIKE :含糊匹配。% 表现恣意多个(包罗 0 个)字符;_ 表现恣意一个字符
逻辑运算符:
AND :多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR :恣意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT :条件为 TRUE(1),结果为 FALSE(0)
where根本利用
select 字段... from 表名称 where 条件;
比方,查找一张结果表中,英语不合格的门生名单:
SELECT name, english FROM exam_result WHERE english < 60;多个条件可以通过逻辑运算符相互组合。
如果现在要查找一个同砚,但是不记得他的全名,只记得他的姓为孙,该怎么找到他呢?
SELECT name FROM exam_result WHERE name LIKE '孙%';
SELECT name FROM exam_result WHERE name LIKE '孙_';
通过 "LIKE" 条件, 此中 '%' 表现该同砚的名字可以是恣意数目的字符,'_' 表现该同砚的名字只有一个字。
值得注意的是,在MySQL中,null 、0、和空字符' ',三者互不干系,实行干系的查询时应注意。
2.排序数据
对数据举行排序通常是查找到对应数据后的利用。
select 列名称... from 表名称 ORDER BY 列名称 排序方式;
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 如果不指明排序方式,则默以为 ASC
当数据中有null时,null视为比任何值都小。
别的,当出现多字段排序,好比:查询同砚各门结果,依次按 数学降序,英语升序,语文升序的方式体现,查询后的结果并不是说,就是按照上述排序方式将单独的科目举行排序,而是按照誊写优先级,先将团体数据按照数学降序排序,如果出现数学结果相当,再将厥后的英语结果按照升序排序,如果英语结果也相当,则末了排序语文结果。
3.筛选数据
当数据量过大时,如果直接查询,大概会引起诸多未便,好比直接就体现到了数据的末了几行。
因此可以通过 LIMIT 按行筛选数据的方式来查询对应行的数据信息:
起始下标为 0
从 0 开始,筛选 n 条结果
SELECT 列名称... FROM 表名称 LIMIT n;
从 s 开始,筛选 n 条结果
SELECT 列名称... FROM 表名称 LIMIT s, n;
从 s 开始,筛选 n 条结果,比第二种用法更明白,发起利用
SELECT 列名称... FROM 表名称 LIMIT n OFFSET s;
因此当我们对未知表举行查询时,最好加一条 LIMIT 1,克制由于表中数据过大,查询全表数据导致数据库卡死。
4.更新数据
数据更新必须共同where利用,由于你不大概将一整列的数据全部更新,一样平常都是对特定行的数据举行更新。
UPDATE 表名称 SET 列名称 = 新数据 [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]
可以同时对某一行的多个数据举行更新,也可以对更新后的数据举行排序筛选等利用。
值得注意的是,当必要对某数据举行加减运算时,在MySQL中不支持 "+=" 等利用,必须采取 "新数据 = 原数据 + 改变值" 的方式。
5.删除数据
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
删除数据时,可以利用where来指定要删除的数据,如果倒霉用where,则默以为删除整张表的全部数据。
值得注意的是,删除数据不会影响表的各种布局界说,就仅仅是删除插入的数据,诸如表字段的范例,以及表的各种束缚条件等都不会受到影响。
特别要注意的是,delete删除数据,不会对自增长AUTO_INCREMENT产生影响,好比说本来自增长已经到了5,此时删除全部数据,在举行插入,自增长依然会为6。
6.截断表
TRUNCATE [TABLE] table_name;截断表truncate,同样是清空表的全部数据,与delete差别的是,它会将自增长AUTO_INCREMEN同样打扫,从AUTO_INCREMEN的初始值重新开始增长。
7.聚合函数
COUNT([DISTINCT] expr) :返回查询到的数据的 数目
SUM([DISTINCT] expr) :返回查询到的数据的 总和,不是数字没故意义
AVG([DISTINCT] expr) :返回查询到的数据的 均匀值,不是数字没故意义
MAX([DISTINCT] expr) :返回查询到的数据的 最大值,不是数字没故意义
MIN([DISTINCT] expr) :返回查询到的数据的 最小值,不是数字没故意义
聚合函数可以选择对去重后的数据利用,通常和数据查找共同利用,比方查找某表统共有多少行:
SELECT COUNT(*) FROM 表名称;利用 * 做统计,不受 NULL 影响。
8.数据分组
在select中利用group by 子句可以对指定罗列行分组查询。
select 列名称... from table group by 列名称;
所谓分组查询,就是对表中某一列中的雷同数据组合,比方,有一张完备的门生表数据,此中包罗名称为班级号的字段,现在要查询每个班级分别有多少门生,就可以通太过组查询:
select class_id count(*) from student group by class_id;
having和group by共同利用,对group by结果举行过滤,作用雷同用where:
select 列名称... from table group by 列名称 having 过滤条件;
|