目录
一、什么是数据库?
二、常见的数据库
三、SQL语句分类
四、DML (数据操作语言)基本语法
五、DQL(数据查询语言)
常用的聚合函数
一、什么是数据库?
数据库(Database,简称DB)概念:
长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”。
作用:存放、管理数据
分类:关系型数据库、nosql数据库。
二、常见的数据库
关系数据库:MySQL、Oracle、postgresql
非关系数据库:MongoDB
三、SQL语句分类
SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一
种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
名词 | 解释 | 命令 |
DDL (数据定义语言) | 定义和管理数据对象, 如数据库,数据表等 | CREATE、DROP、ALTER |
DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | INSERT、UPDATE、DELETE |
DQL(数据查询语言) | 用于查询数据库数据 | SELECT |
DCL (数据控制语言) | 用来管理数据库的语言,包括管理权 限及数据更改 | GRANT、COMMIT、ROLLBACK |
四、DML (数据操作语言)基本语法
1.增加数据
语法:
INSERT INTO `表名` [(`字段1`,`字段2`,...`字段n`)] VALUES/VALUE ('值1','值2',...'值n')[,('值1','值2',...'值n')...];
注意:
其中:
•“[]” 包含的内容可以省略;
• 字段或值之间用英文逗号隔开;
• 可同时插入多条数据,values 后用英文逗号隔开;
• values和value的方式均可 。
2. 修改数据
语法:
UPDATE 表名 SET `字段名1` = '值1' [ , `字段名2` = '值2', …. ] [ WHERE 条件];
注意:
其中:
•“[]” 包含的内容可以省略;
• `字段名`为要更改数据的字段,'值'表示字段改后的值,注意字段和值的对应;
• 可同时修改多个字段,多个字段后用英文逗号隔开;
•“WHERE”是where子句,可以给修改增加条件;
• 条件:为筛选条件,如不指定则修改该表的所有列数据。
3.删除数据
语法:
DELETE FROM 表名 [ WHERE 条件];
注意:
其中:
•“[]” 包含的内容可以省略;
• “WHERE”可以通过where子句增加删除的条件。
五、DQL(数据查询语言)
DQL(Data Query Language 数据查询语言)。用途是查询数据库数据,如SELECT语句。是SQL语句 中最核心、最重要的语句,也是使用频率最高的语句。其中,可以根据表的结构和关系分为单表查询和多表联查。
查询语法
SELECT [DISTINCT]
{*|表1.*|[ 表1.字段1 [as 字段别名1]
[, 表1.字段2[as 字段别名2]][, …]]}
FROM 表1 [ as 表别名 ]
[ left|right|inner join 表2 on 表之间
的关系 ]
[ WHERE ]
[ GROUP BY ]
[ HAVING]
[ ORDER BY]
[ LIMIT {[ 位置偏移量,] 行数 }] ;
注意:
其中:
•“[ ]”包含的内容可以省略;
•“{ }”包含的内容必须存在;
DISTINCT
设定DISTINCT可以去掉重复记录。
AS
表名或者字段名过长时,可以用AS关键字起别名,方便操作。
GROUP BY
按组分类显示查询出的数据。
HAVING
GROUP BY分组时依赖的分组条件。
ORDER BY
将查询出来的结果集按照一定顺序排序完成。
LIMIT
限制显示查询结果的条数。
一、单表查询
针对数据库中的一张数据表进行查询,可以通过各种查询条件和方式去做相关的优化。
1. 指定字段列
SELECT * | 字段名1, 字段名2... FROM 表名
* 表示所查询的数据库表的全部字段。
表别名和字段别名
SELECT 表别名.字段名1 AS 字段别名1, 表别名.字段名2 AS 字段别名2 FROM 表名 AS 表别名
• “.” 当前表存在的字段;
• “AS”可忽略不写,“AS”的功能如下:
• 给字段取一个新别名;
• 给表取一个新别名;
• 把经计算或总结的结果用另外一个新名称来代替
DISTINCT
SELECT DISTINCT 字段名1, 字段名2...
去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条。
FROM 表名
WHERE条件子句
SELECT * FROM 表名 [ WHERE 条件];
• WHERE条件子句不是必须的;
• WHERE子句,可以给查询增加条件;
• 条件:为筛选条件,如不指定则修改该表的所有数据。
LIKE 关键字
SELECT * FROM 表名 WHERE 字段 LIKE 条件;
• 在WHERE子句中,使用LIKE关键字进行模糊查询;
• 与“%”一起使用,表示匹配0或任意多个字符;
• 与“_”一起使用,表示匹配单个字符
IN 关键字
SELECT * FROM 表名 WHERE 字段 IN (值1,值2...);
• 查询的字段的值,至少与IN 后的括号中的一个值相同;
• 多个值之间用英文逗号隔开。
NULL 值查询
SELECT * FROM 表名 WHERE 字段 IS NULL | IS NOT NULL
• NULL代表“无值”;
• 区别于零值0和空符串;
• 只能出现在定义允许为NULL的字段;
• 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较。
GROUP BY和HAVING分组
GROUP BY
1、对所有的数据进行分组统计;
2、分组的依据字段可以有多个,并依次分组。
HAVING
与GROUP BY结合使用,进行分组后的数据筛选。
常用的聚合函数
函数名 | 返回值 |
AVG(col) | 返回指定列的平均值 |
COUNT(col) | 返回指定列中非NULL值的个数 |
MIN(col) | 返回指定列的最小值 |
MAX(col) | 返回指定列的最大值 |
SUM(col) | 返回指定列的所有值之和 |
9.ORDER BY排序
SELECT * FROM 表名 ORDER BY 字段名 [DESC|ASC]
• ORDER BY 表示对SELECT语句查询得到的结果,按字段名进行排序;
• DESC表示排序的顺序为降序,ASC表示排序的顺序为升序;
•“[ ]”包含的内容可以省略。
LIMIT关键字
SELECT * FROM 表名 LIMIT [n , m ]
• LIMIT关键字是MySQL特有关键字;
• LIMIT限制SELECT返回结果的行数;
• n 表示第一条记录的偏移量,m 表示显示记录的数量;
•“[ ]”包含的内容可以省略。
二、多表查询
针对数据库中两张或者两张以上的表同时进行查询,依赖的手段有复杂查询和嵌套查询。
等值查询和非等值查询
非等值查询:SELECT * FROM 表1,表2
等值查询:SELECT * FROM 表1,表2 WHERE 表1.字段1 = 表2.字段2...
• 与单表查询类似,都是SELECT语句;
• 把多个表放到FROM后,并用逗号隔开;
• 可使用AS关键字取别名,便于引用;
• 如无重名查询字段则可省略数据表的指定。
连接查询
SELECT * FROM 表1 LEFT|right|INNER JOIN 表2 ON 条件
LEFT JOIN
从左表(表1)中返回所有的记录,即便在右
(表2)中没有匹配的行。
RIGHT JOIN
从右表(table_2)中返回所有的记录,即便
在左(table_1)中没有匹配的行。
INNER JOIN
在表中至少一个匹配时,则返回记录。
3.UNION
union 是求两个查询的并集。
select A.field1 as f1, A.field2 as f2 from <table1> A
union
(select B.field3 as f1, field4 as f2 from <table2> B)
order by 字段 desc/asc
注意:
1列名不一致时,会以第一张表的表头为准,并对其栏目。
2会将重复的行过滤掉。
3如果查询的表的列数量不相等时,会报错。
4在每个子句中的排序是没有意义的,mysql在进行合并的时候会忽略掉。
5如果子句中的排序和limit进行结合是有意义的。
6可以对合并后的整表进行排序