mysql基本增删改查、所有查询子句以及连接查询完全解读

上一章mysql教程中我们讨论了:mysql数据类型、数据库连接、基本数据库和表操作,本章中我们开始讨论mysql的高级内容:基本增删改查、所有查询子句以及连接查询。
一、mysql基本增删改查1、插入数据
要将数据插入MySQL表,需要使用SQL insert into命令可以将数据插入到MySQL表中,下面是insert into命令的通用SQL语法,用于将数据插入MySQL表:

insert into table_name ( field1, field2,...fieldN ) values ( value1, value2,...valueN );

2、查找数据
SQL select命令用于从MySQL数据库查找数据,下面是select命令的通用SQL语法,用于从MySQL表中查找数据:
select field1, field2,...fieldN from tn1, tn2... [where clause] [offset M ][limit N]

  • 你可以在单个select命令中获取一个或多个字段。
  • 你可以指定*号来代替字段,在本例中select *将返回所有字段。
  • 可以使用where子句指定任何条件。
  • offset为偏移量,默认偏移量从0开始。
  • 使用limit属性限制返回的数量。
3、更新数据
需要更新MySQL表中的现有数据,可以通过使用SQL update命令来实现这一点,这将修改任何MySQL表的任何字段值。下面的代码块使用update命令的通用SQL语法来修改MySQL表中的数据:
update table_name set field1 = new-value1, field2 = new-value2 [where clause]

4、删除数据
语法如下:
delete from table_name [where clause]

  • 如果没有指定where子句,那么所有记录都将从给定的MySQL表中删除。
  • 可以使用where子句指定任何条件。
  • 可以一次删除单个表中的记录。
当希望删除表中选定的行时,where子句非常有用。
二、MySQL所有查询子句1、where子句
我们可以使用一个名为where子句的条件句来过滤掉结果,使用这个where子句我们可以指定一个选择条件来从表中选择所需的记录。
下面的代码块具有select命令的通用SQL语法,带有用于从MySQL表获取数据的where子句:
select field1, field2,...fieldN tn1, tn2... [where condition1 [AND [OR]] condition2.....

  • 可以使用一个或多个由逗号分隔的表来包含使用where子句的各种条件,但是where子句是select命令的可选部分。
  • 可以使用where子句指定任何条件。
  • 可以使用and或or操作符指定多个条件。
【mysql基本增删改查、所有查询子句以及连接查询完全解读】where子句的工作原理类似于任何编程语言中的if条件,这个子句用于比较给定的值和MySQL表中可用的字段值。
以下是操作符列表,可以与where子句一起使用,假设字段A等于10字段B等于20:
操作符 描述 例子
= 相等则为真。 (A = B) not true.
!= 不相等则条件为真。 (A != B) true.
>   检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) not true.
<   检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) true.
> = 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A > = B) not true.
< = 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A < = B) true.
where子句特别是在使用MySQL连接查询的时候,并且使用主键搜索记录以加快搜索速度是一种常见的做法,果给定的条件不匹配表中的任何记录,那么查询将不返回任何行。
2、like子句
我们可以使用一个名为where子句的条件句来选择所需的记录,模糊查询使用where,如果没有%字符,LIKE子句与where子句的等号是一样的。
下面的代码块具有select命令的通用SQL语法,以及用于从MySQL表获取数据的like子句。
select field1, field2,...fieldN tn1, tn2... where field1 like condition1 [AND [OR]] filed2 = 'somevalue'

  • 可以使用where子句指定任何条件。
  • 可以使用like子句和where子句。
  • 你可以用LIKE子句来代替等号。
  • 当LIKE与%符号一起使用时,它将像元字符搜索一样工作。
  • 可以使用AND或or操作符指定多个条件。
  • where……like子句可以与update或delete共同使用。
3、like子句的正则表达式
你已经看到MySQL的like…%匹配模式,MySQL支持另一种基于正则表达式和REGEXP操作符的模式匹配操作。
模式 模式匹配
^ 字符串的开始
$ 字符串结束
. 任意单个字符
[… ] 方括号中列出的任何字符
[^… ] 不在方括号中列出的任何字符
p1|p2|p3 变更申请表; 匹配p1、p2或p3的任何模式
* 前一个元素的零或多个
+ 前一个元素的一个或多个实例
{n} 前一个元素的n个实例
{m,n} 前一个元素的m到n个实例
4、NULL值
MySQL提供了三个操作符将字段或列值与NULL进行比较:
  • is NULL – 字段为空返回true。
  • is not NULL – 字段不为空返回true。
  • < => – 这个操作符比较值包括比较NULL
不能使用= NULL或!= NULL在列中查找空值,有时甚至NULL = NULL也会失败,若要查找是否为空的列,请使用is NULL或is not NULL。
5、order by排序子句
这里可以通过添加order by子句对结果集进行排序,该子句指定要排序的列的名称。
下面的代码块是select命令的通用SQL语法和order by子句,用于对MySQL表中的数据进行排序。
select field1, field2,...fieldN tn1, tn2... order by field1, [field2...] [ASC [DESC]]

  • 对返回结果进行排序。
  • 可以对多个字段的结果进行排序。
  • ASC或DESC表现进行升序或降序排序,默认升序。
  • 在通常情况下你可以用where…like子句放在一个条件句中。
三、MySQL连接查询在大多数实际的MySQL使用中常常需要在一个查询中从多个表获取数据,我们可以在单个SQL查询中使用多个表。MySQL中的连接操作指的是将两个或多个表连接成一个表,我们还将看到一个左连接的示例,它与简单的MySQL连接不同。
1、union连接
union连接有union语句和union all语句,union语句用于将多个select的结果集合并为一个结果,union语句处理的是相同列的数据,而且不包含重复数据。union all语句也就将多个select结果集的相同列合并,但是包含重复数据,union连接使用语法如下:
select exp1, epx2, ... epx_n (字段1) from tables [where conditions] union [all | DISTINCT] select exp1, epx2, ... epx_n (和字段1相同) from tables [where conditions];

2、内连接inner join
inner join内连接用于获取两个表中自动匹配的记录,内连接求差集,和上面join的使用是类似的,但是这里合并两个表使用的条件关键字是on(包括下面介绍的左连接和右连接),
select exp1, epx2, ... epx_n from table1 inner join table2 [on conditions];

3、左连接left join
左连接求所有表中全部包含左边表数据的结果集,该查询包含左表所有数据,连接进来的表按照on条件的要求进行合并,使用语法和上面的内连接类似,table1是左边的表:
select exp1, epx2, ... epx_n from table1 left join table2 [on conditions];

4、右连接right join
右连接查询和左连接查询相反:结果集包含所有右表的数据,使用语法如下,table2为右边表:
select exp1, epx2, ... epx_n from table1 right join table2 [on conditions];

    推荐阅读