赞
踩
目录
2. 使用`INSERT INTO ... SELECT`来插入查询结果:
4.1count(*) 和 count(1)和count(列名)区别
1. COUNT(*):COUNT(*)用于计算满足条件的行数,其中的`*`表示匹配所有行。
2. COUNT(1):COUNT(1)用于计算满足条件的行数,其中的`1`表示匹配所有的行,可以看作是一个常量。
3. COUNT(列名):COUNT(列名)用于计算特定列中非NULL值的行数。
INSERT语句用于向表中插入新的行。
- INSERT INTO table_name (column1, column2, ...)
- VALUES (value1, value2, ...);
示例:
- INSERT INTO customers (name, email, phone)
- VALUES ('John Doe', 'johndoe@example.com', '1234567890');
除了直接插入值,还可以使用`INSERT INTO ... SELECT`语法将查询的结果插入到表中。
示例:
- INSERT INTO new_customers (name, email, phone)
- SELECT name, email, phone
- FROM old_customers
- WHERE age > 30;
这个示例将从 `old_customers` 表中选择年龄大于30的客户的姓名、邮箱和电话,并将结果插入到 `new_customers` 表中的相应列。
示例:
- INSERT INTO customers (name, email, phone)
- VALUES
- ('John Doe', 'johndoe@example.com', '1234567890'),
- ('Jane Smith', 'janesmith@example.com', '9876543210');
REPLACE语句用于向表中插入新的行,如果行已存在,则先删除旧行,再插入新行。
基本语法:
- REPLACE INTO table_name (column1, column2, ...)
- VALUES (value1, value2, ...);
table_name
是要插入数据的表名。(column1, column2, ...)
是要插入数据的列名列表,可以选择插入特定列,也可以插入所有列。(value1, value2, ...)
是要插入的值列表,与列一一对应。示例:
- REPLACE INTO customers (name, email, phone)
- VALUES ('John Doe', 'john@example.com', '123456789');
这个示例将在"customers"表中插入一行数据,包括姓名、邮箱和电话号码。如果已存在具有相同主键或唯一键的行,则会先删除旧行,然后插入新行。
注意事项:
总结:
使用UPDATE语句来更新数据,通过SET子句指定要修改的列及其相应的新值。
基本语法:
- UPDATE table_name
- SET column1 = value1, column2 = value2, ...
- WHERE condition;
`table_name` 是要更新数据的表名。
SET子句用于指定要更新的列和对应的新值。
WHERE子句用于指定要更新的记录的条件,如果未提供WHERE子句,将更新所有记录。
示例:
- UPDATE customers
- SET email = 'newemail@example.com', phone = '9876543210'
- WHERE id = 1;
这个示例将更新"customers"表中"id"为1的记录的"email"列为'newemail@example.com',"phone"列为'9876543210'。
示例:
- UPDATE products
- SET price = price * 1.1, stock = stock - 1
- WHERE category = 'Electronics';
这个示例将更新"products"表中"category"为'Electronics'的记录的"price"增加10%,"stock"减少1。
使用DELETE语句来删除数据,通过FROM子句指定要删除的表和WHERE子句指定要删除的记录。
基本语法:
- DELETE FROM table_name
- WHERE condition;
`table_name` 是要删除数据的表名。
WHERE子句用于指定要删除的记录的条件,如果未提供WHERE子句,将删除表中的所有记录。
示例:
- DELETE FROM customers
- WHERE id = 1;
这个示例将删除"customers"表中"id"为1的记录。
示例:
- DELETE FROM orders
- WHERE status = 'Cancelled' AND amount < 100;
这个示例将删除"orders"表中状态为"Cancelled"且金额小于100的订单记录。
TRUNCATE语句用于从表中快速删除所有行,它比DELETE语句执行得更快。
基本语法:
TRUNCATE TABLE table_name;
table_name
是要清空数据的表名。
示例:
TRUNCATE TABLE customers;
这个示例将快速清空"customers"表中的所有数据,但保留表的结构。
TRUNCATE操作的注意事项:
总结:
注:这里只总结了单表查询和多表查询,子查询与正则表达式查询可以看我另一篇博客
使用SELECT语句来查询数据,可以选择特定的列或所有列,也可以使用WHERE子句来过滤查询条件。
基本语法:
- SELECT column1, column2, ...
- FROM table_name
- WHERE condition;
示例:
- SELECT name, email, phone
- FROM customers
- WHERE age > 30;
可以使用ORDER BY子句对查询结果进行排序,可以按照一个或多个列进行升序(ASC)或降序(DESC)排序 ,ASC为默认,可以忽略不写;。
示例:
- SELECT name, email, phone
- FROM customers
- WHERE age > 30
- ORDER BY name ASC;
这个示例将查询年龄大于30的客户的姓名、邮箱和电话,并按姓名升序排序。
2.1 Having函数
HAVING函数用于在查询结果中过滤基于聚合函数的条件。
- HAVING语句必须与GROUP BY语句一起使用,并且位于GROUP BY之后。
示例:
- SELECT city, COUNT(*) as total_customers
- FROM customers
- GROUP BY city
- HAVING total_customers > 10;
这个示例将返回"customers"表中每个城市的客户数量大于10的结果,包括城市名称和客户数量。
注意事项:
可以使用LIMIT子句限制查询结果的数量,可以指定返回的行数和偏移量。
基本语法:
- SELECT column1, column2, ...
- FROM table_name
- LIMIT offset, count;
示例:
- SELECT name, email
- FROM customers
- LIMIT 5;
这个示例将从"customers"表中选择前5条记录,并只返回"name"和"email"列。
注意事项:
示例:
- SELECT name, email
- FROM customers
- ORDER BY created_date DESC
- LIMIT 10;
这个示例将返回"customers"表中按创建日期倒序排列的前10个记录的"name"和"email"列。
聚合函数如SUM、COUNT、AVG等可以用于计算数据的总和、计数、平均值等。
常用有:
示例:
- SELECT COUNT(*) as total_customers
- FROM customers
- WHERE age > 30;
这个示例将计算年龄大于30的客户的总数。
4.1count(*) 和 count(1)和count(列名)区别
在MySQL中,COUNT函数用于计算满足条件的行数。count(*)、count(1)和count(列名)都是用于计算行数的常见用法,它们之间有一些细微的区别。下面是它们的详细说明:
1. COUNT(*):
COUNT(*)用于计算满足条件的行数,其中的`*`表示匹配所有行。
示例:
- SELECT COUNT(*)
- FROM customers;
这个示例将计算"customers"表中的所有行数。
区别和注意事项:
2. COUNT(1):
COUNT(1)用于计算满足条件的行数,其中的`1`表示匹配所有的行,可以看作是一个常量。
示例:
- SELECT COUNT(1)
- FROM customers;
这个示例将计算"customers"表中的所有行数,结果与COUNT(*)相同。
区别和注意事项:
3. COUNT(列名):
COUNT(列名)用于计算特定列中非NULL值的行数。
示例:
- SELECT COUNT(email)
- FROM customers;
这个示例将计算"customers"表中具有非NULL值的email列的行数。
区别和注意事项:
当需要从多个表中检索相关数据时,可以使用JOIN操作来实现多表查询。
1. 内连接(INNER JOIN):
内连接根据两个表之间的关联条件,返回两个表中匹配的行。
基本语法:
- SELECT columns
- FROM table1
- INNER JOIN table2
- ON table1.column = table2.column;
示例:
- SELECT orders.order_id, customers.customer_name
- FROM orders
- INNER JOIN customers
- ON orders.customer_id = customers.customer_id;
这个示例中,通过将"orders"表与"customers"表连接,根据订单的顾客ID(customer_id)和顾客表中的顾客ID(customer_id),检索订单ID(order_id)和顾客名称(customer_name)的相关数据。
2. 左连接(LEFT JOIN):
左连接返回左表中的所有记录,以及与右表匹配的记录。
基本语法:
- SELECT columns
- FROM table1
- LEFT JOIN table2
- ON table1.column = table2.column;
示例:
- SELECT customers.customer_name, orders.order_id
- FROM customers
- LEFT JOIN orders
- ON customers.customer_id = orders.customer_id;
这个示例中,通过将"customers"表与"orders"表左连接,根据顾客表中的顾客ID(customer_id)和订单表中的顾客ID(customer_id),检索顾客名称(customer_name)和订单ID(order_id)的相关数据。即使某些顾客没有订单,也会包括在结果集中。
3. 右连接(RIGHT JOIN):
右连接返回右表中的所有记录,以及与左表匹配的记录。
基本语法:
- SELECT columns
- FROM table1
- RIGHT JOIN table2
- ON table1.column = table2.column;
示例:
- SELECT customers.customer_name, orders.order_id
- FROM customers
- RIGHT JOIN orders
- ON customers.customer_id = orders.customer_id;
这个示例中,通过将"customers"表与"orders"表右连接,根据顾客表中的顾客ID(customer_id)和订单表中的顾客ID(customer_id),检索顾客名称(customer_name)和订单ID(order_id)的相关数据。即使某些订单没有关联的顾客,也会包括在结果集中。
4. 全连接(FULL JOIN):
全连接返回左表和右表中的所有记录,如果没有匹配的记录,则填充NULL值。
只有少数数据库(如MySQL的版本8.0+)支持全连接,有些数据库可能使用其他语法(如MySQL使用UNION和LEFT JOIN/RIGHT JOIN实现)。
示例(使用UNION和LEFT JOIN):
- SELECT customers.customer_name, orders.order_id
- FROM customers
- LEFT JOIN orders
- ON customers.customer_id = orders.customer_id
- UNION
- SELECT customers.customer_name, orders.order_id
- FROM customers
- RIGHT JOIN orders
- ON customers.customer_id = orders.customer_id
- WHERE customers.customer_id IS NULL;
这个示例中,通过将左连接和右连接的结果使用UNION合并,以获取左表和右表中的所有记录。如果某些记录没有关联的数据,则使用WHERE子句将其筛选出来。
以上是一些常见的多表查询用法,具体的查询方式取决于数据表之间的关系和查询需求。请根据实际情况选择适合的连接类型和查询条件。
5.注意事项:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。