目录
1. 插入数据(Insert):
1. 插入数据的基本语法:
2. 使用`INSERT INTO ... SELECT`来插入查询结果:
3. 插入数据的注意事项:
4. REPLACE语句:
2. 更新数据(Update):
1. 更新数据的基本语法:
2. 注意事项:
3. 删除数据(Delete):
1. 删除数据的基本语法:
2. 注意事项:
3.TRUNCATE语句:
4.查询语句(Select)
1. 基本查询语法:
2. 查询结果的排序:
2.1 Having函数
3. 查询结果的限制:
4. 使用聚合函数查询数据:
4.1count(*) 和 count(1)和count(列名)区别
1. COUNT(*):COUNT(*)用于计算满足条件的行数,其中的`*`表示匹配所有行。
2. COUNT(1):COUNT(1)用于计算满足条件的行数,其中的`1`表示匹配所有的行,可以看作是一个常量。
3. COUNT(列名):COUNT(列名)用于计算特定列中非NULL值的行数。
5. 连接多个表查询数据:
1. 内连接(INNER JOIN):
2. 左连接(LEFT JOIN):
3. 右连接(RIGHT JOIN):
4. 全连接(FULL JOIN):
5.注意事项:
INSERT语句用于向表中插入新的行。
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
示例:
INSERT INTO customers (name, email, phone)
VALUES ('John Doe', '[email protected]', '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', '[email protected]', '1234567890'),
('Jane Smith', '[email protected]', '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', '[email protected]', '123456789');
这个示例将在"customers"表中插入一行数据,包括姓名、邮箱和电话号码。如果已存在具有相同主键或唯一键的行,则会先删除旧行,然后插入新行。
注意事项:
总结:
使用UPDATE语句来更新数据,通过SET子句指定要修改的列及其相应的新值。
基本语法:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
`table_name` 是要更新数据的表名。
SET子句用于指定要更新的列和对应的新值。
WHERE子句用于指定要更新的记录的条件,如果未提供WHERE子句,将更新所有记录。
示例:
UPDATE customers
SET email = '[email protected]', phone = '9876543210'
WHERE id = 1;
这个示例将更新"customers"表中"id"为1的记录的"email"列为'[email protected]',"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的客户的姓名、邮箱和电话,并按姓名升序排序。
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的客户的总数。
在MySQL中,COUNT函数用于计算满足条件的行数。count(*)、count(1)和count(列名)都是用于计算行数的常见用法,它们之间有一些细微的区别。下面是它们的详细说明:
示例:
SELECT COUNT(*)
FROM customers;
这个示例将计算"customers"表中的所有行数。
区别和注意事项:
示例:
SELECT COUNT(1)
FROM customers;
这个示例将计算"customers"表中的所有行数,结果与COUNT(*)相同。
区别和注意事项:
示例:
SELECT COUNT(email)
FROM customers;
这个示例将计算"customers"表中具有非NULL值的email列的行数。
区别和注意事项:
当需要从多个表中检索相关数据时,可以使用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)的相关数据。
左连接返回左表中的所有记录,以及与右表匹配的记录。
基本语法:
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)的相关数据。即使某些顾客没有订单,也会包括在结果集中。
右连接返回右表中的所有记录,以及与左表匹配的记录。
基本语法:
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)的相关数据。即使某些订单没有关联的顾客,也会包括在结果集中。
全连接返回左表和右表中的所有记录,如果没有匹配的记录,则填充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子句将其筛选出来。
以上是一些常见的多表查询用法,具体的查询方式取决于数据表之间的关系和查询需求。请根据实际情况选择适合的连接类型和查询条件。