常用的基本SQL语句--增删查改

1、查询数据表——Select语句

SELECT * FROM <表名>   ---查询表所有字段
SELECT <字段名1>,<字段名2>,…,<字段名n> FROM <表名>  ---查询表某些特定字段

2、去重——DISTINCT语句

SELECT DISTINCT <字段名> FROM <表名>;
需要注意以下几点:
(1)DISTINCT 关键字只能在 SELECT 语句中使用。
(2)在对一个或多个字段去重时,DISTINCT 关键字必须在所有字段的最前面。
(3)如果 DISTINCT 关键字后有多个字段,只会对多个字段组合起来完全是一样的情况下才会被去重。

3、限制查询结果的条数——LIMIT语句

(1)LIMIT 初始位置,记录数
(2)LIMIT 记录数
(3)LIMIT 记录数 OFFSET 初始位置
注:LIMIT 后的两个参数必须都是正整数。

4、排序——ORDER BY 语句

ORDER BY <字段名> [ASC|DESC]
注:(1)字段名:表示需要排序的字段名称,多个字段时用逗号隔开。对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序
    (2)ASC|DESC:ASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC为默认值。

5、设置别名——AS语句

(1)为表指定别名:<表名> [AS] <别名>
(2)为字段指定别名:<字段名> [AS] <别名>

6、条件查询——WHERE语句

WHERE 查询条件
其中。查询条件可以是:
(1)带比较运算符和逻辑运算符的查询条件,比如AND、OR、XOR
(2)带 BETWEEN AND 关键字的查询条件
(3)带 IS NULL 关键字的查询条件
(4)带 IN 关键字的查询条件
(5)带 LIKE 关键字的查询条件

7、模糊查询——LIKE语句

(1)不区分字符大小写:[NOT] LIKE  '字符串'
(2)区分字符大小写:[NOT] LIKE BINARY '字符串' 
注:A、LIKE 关键字支持百分号“%”和下划线“_”通配符(字符串必须加单引号或双引号),其中:
带有“%”通配符,它能代表任何长度的字符串,字符串的长度可以为 0例如,a%b表示以字母 a 开头,以字母 b 结尾的任意长度的字符串。
带有“_”通配符,_”只能代表单个字符,字符的长度不能为 0。
B、尾部空格会干扰通配符的匹配;“%”通配符可以到匹配任意字符,但是不能匹配 NULL。

8、范围查询——BTWEEN AND语句

[NOT] BETWEEN 取值1 AND 取值2
注:取值1:表示范围的起始值。
    取值2:表示范围的终止值。

9、空值查询—— IS NULL语句

IS [NOT] NULL

10、分组查询——GROUP BY 语句

(1)GROUP BY  <字段名>:根据一个或多个字段对查询结果进行分组,单独使用 GROUP BY 关键字时,查询结果会只显示每个分组的第一条记录。
(2)GROUP BY 与 GROUP_CONCAT() 结合使用:GROUP_CONCAT() 函数会把每个分组的字段值都显示出来。
(3)GROUP BY 与聚合函数:在数据统计时,GROUP BY 关键字经常和聚合函数一起使用。聚合函数包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()。其中,COUNT() 用来统计记录的条数;SUM() 用来计算字段值的总和;AVG() 用来计算字段值的平均值;MAX() 用来查询字段的最大值;MIN() 用来查询字段的最小值。
(4)GROUP BY 与 WITH ROLLUP:WITH POLLUP 关键字用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,即统计记录数量,即:GROUP BY  <字段名> WITH POLLUP

11、过滤分组——HAVING语句

HAVING <查询条件>
WHERE 和 HAVING 关键字也存在以下几点差异:
(1)一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
(2)WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
(3)WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
(4)WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
(5)WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。

12、正则表达式查询——REGEXP语句

属性名 REGEXP '匹配方式'
注:
^	匹配文本的开始字符	
$	匹配文本的结束字符	
.	匹配任何单个字符	
*	匹配零个或多个在它前面的字符	
+	匹配前面的字符 1 次或多次	
[字符集合]	匹配字符集合中的任何一个字符	
[^]	匹配不在括号中的任何字符	
字符串{n,}	匹配前面的字符串至少 n 次	
{n,m}	匹配前面的字符串至少 n 次, 至多 m 次	

13、子查询

(1)IN | NOT IN
当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回值正好相反。
(2)EXISTS | NOT EXISTS
用于判断子查询的结果集是否为空,若子查询的结果集不为空,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回的值正好相反
注意:只出现在子查询中而没有出现在父查询中的表不能包含在输出列中
常见错误:SELECT * FROM (SELECT * FROM result);
这个子查询语句产生语法错误的原因在于主查询语句的 FROM 子句是一个子查询语句,因此应该为子查询结果集指定别名。正确代码为SELECT * FROM (SELECT * FROM result) AS Temp;

14、交叉连接——CROSS JOIN语句

交叉连接的语法格式如下:
SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句] 或 SELECT <字段名> FROM <表1>, <表2> [WHERE子句]
注意:当连接的表之间没有关系时,我们会省略掉 WHERE 子句,这时返回结果就是两个表的笛卡尔积,返回结果数量就是两个表的数据行相乘。 

笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积。
例如,有 A 和 B 两个集合,它们的值如下:

A = {1,2}  , B = {3,4,5}

集合 A×B 和 B×A 的结果集分别表示为:

A×B={(1,3), (1,4), (1,5), (2,3), (2,4), (2,5) };
B×A={(3,1), (3,2), (4,1), (4,2), (5,1), (5,2) };

以上 A×B 和 B×A 的结果就叫做两个集合的笛卡尔积。
并且,从以上结果我们可以看出: 两个集合相乘,不满足交换率,即 A×B≠B×A; A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。

多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。

16、内连接——INNER JOIN 语句

SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]
注:多个表内连接时,在 FROM 后连续使用 INNER JOIN 或 JOIN 即可。

17、外连接——LEFT/RIGHT JOIN语句

(1)SELECT <字段名> FROM <表1> LEFT (OUTER) JOIN <表2> <ON子句>
(2)SELECT <字段名> FROM <表1> RIGHT(OUTER)JOIN <表2> <ON子句>
注意:使用外连接查询时,一定要分清需要查询的结果,是需要显示左表的全部记录还是右表的全部记录,然后选择相应的左连接和右连接。

18、插入语句

INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]VALUES (值1) [… , (值n) ];

19、修改/更新语句

UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ] [ORDER BY 子句] [LIMIT 子句]
注意:保证 UPDATE 以 WHERE 子句结束,通过 WHERE 子句指定被更新的记录所需要满足的条件,如果忽略 WHERE 子句,MySQL 将更新表中所有的行。

20、删除语句

(1)DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
注意:在不使用 WHERE 条件的时候,将删除所有数据。
(2)TRUNCATE [TABLE] 表名 ---清空表

TRUNCATE 和 DELETE 的区别

  • DELETE 是 DML 类型的语句;TRUNCATE 是 DDL 类型的语句。它们都用来清空表中的数据。
  • DELETE 是逐行一条一条删除记录的;TRUNCATE 则是直接删除原来的表,再重新创建一个一模一样的新表,而不是逐行删除表中的数据,执行数据比 DELETE 快。因此需要删除表中全部的数据行时,尽量使用 TRUNCATE 语句, 可以缩短执行时间。
  • DELETE 删除数据后,配合事件回滚可以找回数据;TRUNCATE 不支持事务的回滚,数据删除后无法找回。
  • DELETE 删除数据后,系统不会重新设置自增字段的计数器;TRUNCATE 清空表记录后,系统会重新设置自增字段的计数器。
  • DELETE 的使用范围更广,因为它可以通过 WHERE 子句指定条件来删除部分数据;而 TRUNCATE 不支持 WHERE 子句,只能删除整体。
  • DELETE 会返回删除数据的行数,但是 TRUNCATE 只会返回 0,没有任何意义。

21、其他常用语句

1、UUNION语句
UNION运算符用于组合两个或更多SELECT语句的结果集,值得注意的是UNION中的每个SELECT语句必须具有相同的列数并且顺序也相同,类型不必完全相同,但是必须可以隐式转换。
(1)union 是对数据进行并集操作,不包括重复行,同时进行默认排序,语法为:
SELECT 字段名 FROM 表1
UNION
SELECT 字段名 FROM 表2;
(2)union all 也是对数据进行并集操作,包括重复行,并且不进行排序,语法为:
SELECT 字段名 FROM 表1
UNION ALL
SELECT 字段名 FROM 表2;
2、筛选有NULL值的数据,注意三值逻辑 —— TRUE, FALSE 和 UNKNOWN。
3、LEFT:返回最左边的n个字符的字符串str,或NULL如果任何参数是NULL。

  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值