0


MySQL - 基础增删改查(Curd)语句及一些常用的子句_学习记录

文章目录

新增(Create)

语法

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

如果数据是字符型,必须使用英文状态下的单引号或者双引号,如:'value’或者"value"。

  • 单行数据 全列插入
INSERT INTO table_name VALUES (100,10000,'Java',NULL);
INSERT INTO table_name VALUES (101,10001,'Golang','123456');
  • 多行数据 指定列插入
-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO table_name(field1,field2,field3) VALUES
    (102, 20001, 'PHP'),
    (103, 20002, 'JavaScript');

查询(Retrieve)

语法

SELECT
 [DISTINCT] {* | {column [, column] ...} 
 [FROM table_name]
 [WHERE ...]
 [ORDER BY column [ASC | DESC], ...]
 LIMIT ...

在需要查询全列所有的数据时,使用 * 来代表所有数据。

  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT 命令可以一次性读取一条或者多条记录。
  • 使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 使用 WHERE 语句来限定你所查询数据的条件。类似于编程语句中的IF语句。
  • 使用 LIMIT 属性来设定返回的记录数,即返回多少条数据。
  • 通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。这里的偏移量也就是我们需要查询的数据,从第几行开始显示。

更新(Update)

语法

UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
  • 可以同时更新一个或多个字段。
  • 可以在 WHERE 子句中指定任何条件。
  • 可以在一个单独表中同时更新数据。

删除(Delete)

语法

DELETE FROM table_name [WHERE Clause]
  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。即清空所有的记录值。
  • 可以在 WHERE 子句中指定任何条件,类似于编程中的IF语句的作用。
  • 可以在单个表中一次性删除记录。

WHERE

语法

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

操作符描述实例=等号,检测两个值是否相等,如果相等返回true(A = B) 返回false。<>, !=不等于,检测两个值是否相等,如果不相等返回true(A != B) 返回 true。>大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true(A > B) 返回false。<小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true(A < B) 返回 true。>=大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true(A >= B) 返回false。<=小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true(A <= B) 返回 true。

注意:在使用where子句时,不能够使用别名。

LIKE

SQL LIKE 子句中

使用百分号 %字符来表示任意数量的字符,可以代表0个字符。

_ 来代表任意的一个字符。类似于UNIX或正则表达式中的星号 *****。

如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

语法

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • 可以在 WHERE 子句中指定任何条件。
  • 可以在 WHERE 子句中使用LIKE子句。
  • 可以使用LIKE子句代替等号 **=**。
  • LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
  • 可以使用 AND 或者 OR 指定一个或多个条件。含义AND为条件与,OR为条件或
  • 可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件。

示例:

SELECT * FROM Person WHERE Email LIKE '%@qq.com';

示例说明:该SQL实际为选择Person表中Email后缀为@qq.com的所有的数据。

联合(Union)

UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

语法

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

参数

  • expression1, expression2, … expression_n: 要检索的列。
  • tables: 要检索的数据表。
  • WHERE conditions: 可选, 检索条件。
  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
  • ALL: 可选,返回所有结果集,包含重复数据。

排序(Order By)

语法

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
  • 可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
  • 可以设定多个字段来排序。
  • 可以使用 ASC(升序) 或 DESC(降序) 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序(ASC)排列。
  • 可以添加 WHERE…LIKE 子句来设置条件。

分组(Group By)

GROUP BY 语句根据一个或多个列对结果集进行分组。

语法

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

示例1:

# 查询根据 name 字段进行分组的所有信息
SELECT * FROM users GROUP BY name;

在分组的列上我们可以使用 COUNT, SUM, AVG…等函数。

示例2:

# 这里的count(*) 统计的是相同的 name 值有多少条记录
SELECT *,count(*) FROM users GROUP BY name;

With Rollup

WITH ROLLPU 语句可以实现在分组统计的基础上,再进行相同的统计。(SUM,COUNT,AVG…)

示例:

# 先进行分组统计,然后在此基础上再进行函数统计。
SELECT name,SUM(age) as age_count FROM users GROUP BY name WITH ROLLUP;
coalesce()

函数可以用来设置取代

NULL

的值。

语法:

SELECT coalesce(a,b,c),SUM(age) FROM users GROUP BY name WITH ROLLUP;

如果 a != null,则返回a;否则再判断b,如果 b != null,则返回b;否则再判断c,如果 c != null,则返回c;如此循环,直到输出一个值,或者判断完后均为Null,则输出Null

也可以认为给定了一个预准备的值,如果原值为null,则输出这个值

JOIN 连接

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

在这里插入图片描述

语法示例:

SELECT a.id,a.name,a.age,b.sex,b.mail FROM users a INNER JOIN infos b ON a.id = b.id;

使用Where实现:

SELECT a.id,a.name,a.age,b.sex,b.mail FROM users a,infos b WHERE a.id = b.id;
INNER JOIN

类似与一个求交集的过程,即通过联表的字段,查出在两张表中分别都有的记录值。

如果左表有,但右表没有,或者右表有但左表没有,此时均不会被输出。

  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
SELECT a.id,a.name,a.age,b.sex,b.mail FROM users a LEFT JOIN infos b ON a.id = b.id;

在这里插入图片描述

会输出所有左表中的数据,然后再右表中找到对应的信息,如果右表中没有对应的值,那么直接使用默认值填充。

  • RIGHT JOIN(右连接):LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
SELECT a.id,a.name,a.age,b.sex,b.mail FROM users a RIGHT JOIN infos b ON a.id = b.id;

在这里插入图片描述

会输出所有右表中的数据,然后再左表中找到对应的信息,如果左表中没有对应的值,那么直接使用默认值填充。

Null 值比较

  • IS NULL: 当列的值是 NULL,此运算符返回 true。
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
  • <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。

判断NULL的时候不能使用 = 或者 != 来判断,任何值和NULL进行等于判断都返回NULL,即NULL = NULL ==> NULL

注意:在进行查询运算时,会遇到两个数进行操作,此时如果任意一个值为

NULL

,那么计算的结果就为

Null

例如:5 + 10 + NULL = NULL

那么我们有时仍需要在这种情况下进行计算,如何解决?这里我们引入了

IFNULL()

函数

语法:

IFNULL(a,b);

如果 a IS NULL 那么,返回b

Alter

ALTER指令是对数据库进行操作的,当我们需要对数据库进行修改或者添加等操作的时候使用。

  • 删除表中字段
ALTER TABLE table_name DROP field_name;

该语句的功能是删除

table_name

表中的

field_name

字段

  • 添加一个字段
ALTER TABLE table_name ADD field_name DATATYPE;

该语句的功能是向

table_name

表中添加一个数据类型为

DATATYPE

名为

field_name

的字段。

相较于删除字段而言,这里需要指定插入的字段名和数据类型。

  • 修改一个字段
  1. MODIFY子句
ALTER TABLE table_name MODIFY field_name [DATATYPE];

该语句的功能是修改

table_name

表中名为

field_name

的字段,其新的数据类型为DATATYPE;

MODIFY只能修改字段的数据类型,并不能直接修改字段名和数据类型。

  1. CHANGE子句
ALTER TABLE table_name CHANGE old_field_name new_field_name DATATYPE;

该语句的功能是修改

table_name

表中名为

old_field_name

的字段,新的字段名为

new_field_name

,新的数据类型为DATATYPE;

可以一次性修改字段名称和数据类型。

  • 设置默认值和是否为NULL
ALTER TABEL table_name MODIFY field_name DATATYPE NOT NULL DEFULT 100;

该语句的功能是设置字段的默认值和不能为NULL,并且设置的字段的默认值为100。

  • 修改字段默认值
ALTER TABLE table_name ALTER field_name SET DEFULT 100;

该语句的功能是将

table_name

数据表中的

field_name

字段的默认值修改为100;

  • 删除默认值
ALTER TABLE table_name DROP field_name DEFULT;

该语句的功能是将

table_name

数据表中的

field_name

字段的默认值删除;

  • 修改数据表类型
ALTER TABLE table_name ENGINE = new_engine;

该语句的功能是修改数据表的类型,将类型修改为

new_engine
  • 修改表名
ALTER TABLE table_name RENAME TO new_table_name;

该语句的功能是修改数据表

table_name

的名称为

new_table_name

;

标签: mysql 学习 数据库

本文转载自: https://blog.csdn.net/qq_33685334/article/details/123485676
版权归原作者 爱编程的小盆友 所有, 如有侵权,请联系我们删除。

“MySQL - 基础增删改查(Curd)语句及一些常用的子句_学习记录”的评论:

还没有评论