SELECT —— 查询数据
语法
-- mysql数据库中查询数据通用的SELECT语法 SELECT column1,column2,.... FORM table_name [WHERE condition] [ORDER BY column_name[ASC|DESC]] [LIMT number] -- column1,column2,...是想要选择的列的名称,如果使用*表示选择所有列。 -- table_name 是要从中查询数据的名称 -- WHERE condition 是一个可选的子句,用于指定过滤条件,只返回符合条件的行 -- ORDER BY column_name[ASC|DESC]是一个可选的子句,用于指定结果集的排序顺序,默认升序(ASC) -- LIMIT number 是一个可选的子句,用于限制返回的行数WHWRE 子句
从MySQL表中使用SELECT语句来读取数据,如需有条件地从表中选取数据,可将WHERE子句添加到SELECT语句中。WHERE子句用于在MySQL中过滤查询结果,只返回满足特定条件的行。
语法
-- SQL SELECT 语句使用WHERE子句从数据表中读取数据的通用语法 SELECT column1,column2,... FORM table_name WHERE condition;更多说明
- 查询语句中可以使用一个或者多个表,表之间使用逗号,分割,并使用WHERE语句来设定查询条件。
- 可以在WHERE子句中指定任何条件。
- 可以使用AND或者OR指定一个或多个条件。
- WHERE子句也可以运用于SQL的DELETE或者UPDATE命令。
- WHERE子句类似于程序语言中的if条件,根据MySQL表中的字段值来读取指定的数据。
简单实例
-- 1.等于条件 SELECT * FROM users WHERE username = 'test'; -- 2.不等于条件 SELECT * FROM users WHERE username != 'runoob'; -- 3.大于条件 SELECT * FROM products WHERE price > 50.00; -- 4.小于条件 SELECT * FROM orders WHERE order_date <'2023-01-01'; -- 5.大于等于条件 SELECT * FROM employees WHERE salary >= 50000; -- 6.小于等于条件 SELECT * FROM students WHERE age <= 21; -- 7.组合条件(AND,OR) *** SELECT * FROM products WHERE category='Electronics' AND price >100.00; -- 8.模糊匹配条件(LIKE) *** SELECT * FROM customers WHERE frist_name LIKE 'J%'; -- 9.IN 条件 SELECT * FROM countries WHERE country_code IN('US','CA','MX'); -- 10.NOT 条件 SELECT * FROM products WHERE NOT category = 'Colthing';
– 11.BETWEEN条件 ***
SELECT * FROM orders WHERE order_date BETWEEN ‘2023-01-01’ AND ‘2023-12-31’;
– 12.IS NULL 条件
SELECT * FROM customers WHERE email IS NOT NULL;
LIKE 子句
LIKE 子句中使用百分号 % 字符来表示任意字符,类似于UNIX或正则表达式中的星号*。
如果没有使用百分号%,LIKE子句与等号 = 的效果是一样的。
语法
-- SQL SELECT 语句使用LIKE子句数据表中读取数据的通用语法。
SELECT column1,column2,…
FROM table_name WHERE column_name LIKE pattern;– column_name 是你要应用LIKE 子句的列的名称
– pattern 是用于匹配的模式,可以包含通配符。- **更多说明** 1.你可以在WHERE子句中指定任何条件 2.你可以在WHERE子句中使用LIKE子句 3.你可以使用LIKE子句代替等号= 4.LIKE通常与%一同使用,类似于一个元字符的搜索 5.你可以使用AND或者OR指定一个或多个条件 6.你可以在DELETE或UPDATE命令中WHERE....LIKE子句来指定条件 - **实例** ```mysql -- 1.百分号通配符 % -> %通配符表示零个或多个字符,例如,'a%'匹配以字母'a'开头的任何字符串。 SELECT * FROM customers WHERE last_name LIKE 'S%'; -- 2.下划线通配符 _ -> _通配符表示一个字符。例如,'_r%'匹配第二个字符为'r'的任何字符串。 SELECT * FROM products WHERE product_name LIKE '_a%'; -- 3.组合使用 % 和_; -> 例如,'aaron','apol' SELECT * FROM users WHERE username LIKE 'a%o_'; -- 4.不区分大小写的匹配 SELECT * FROM employees WHERE last_name LIKE 'smi%'COLLATE utf8mb4_general_ci; ```UNION 操作符
UNION 操作符用于连接两个以上的SELECT语句的结果组合到一个结果集合,并去除重复的行。
UNION 操作符必须由两个或多个SELECT语句组成,每个SELECT语句的列数和对应位置的数据类型必须相同。
语法
-- UNION 操作符语法格式
SELECT column1,column2,… FROM table1 WHERE condition1 UNION SELECT column1,column2,… FROM table2 WHERE condition2 [ORDER BY column1,column2,…];
ORDER BY(排序)语句
ORDER BY(排序)语句可以按照一个或多个列的值进行升序(ASC)或降序(DESC)排序。
语法
以下是SELECT语句使用ORDER BY子句将查询数据排序后再返回数据:
SELECT column1,column2,... FROM table_name ORDER BY column1[ASC|DESC],column2[ASC|DESC],...; -- ORDER BY column1[ASC|DESC],column2[ASC|DESC],... 是用于指定排序顺序的子句。ASC表示升序(默认),DESC表示降序。更多说明
- 可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
- 可以设定多个字段来排序
- 可以使用ASC或DESC关键字来设置查询结果是按升序或降序排序。默认情况下,它是按升序排序。
- 你可以添加WHERE…LIKE子句来设置条件。
实例
单列排序
SELECT * FROM products ORDER BY product_name ASC -- 选择产品表 products 中的所有产品,并按产品名称升序 ASC 排序。多列排序
SELECT * FROM employess ORDER BY department_id ASC,hire_data DESC; -- 选择员工表 employees 中的所有员工,并先按部门 ID 升序 ASC 排序,然后在相同部门中按雇佣日期降序 DESC 排序。使用数字表示列的位置
SELECT first_name,last_name,salary FROM employess ORDER BY 3 DESC,1 ASC -- 选择员工表 employees 中的名字和工资列,并按第三列(salary)降序 DESC 排序,然后按第一列(first_name)升序 ASC 排序。使用表达式排序
SELECT product_name,price * discount_rate AS discounted_price FROM products ORDER BY discounted_price DESC; -- 选择产品表 products 中的产品名称和根据折扣率计算的折扣后价格,并按折扣后价格降序 DESC 排序。
GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用COUNT,SUM,AVG等函数。
GROUP BY语句是SQL查询中用于汇总和分析数据的重要工具,尤其在处理大量数据时,它能够提供有用的汇总信息。
语法
SELECT column1,aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1; -- column1 指定分组的列 -- aggregate_function(column2) 对分组后的每个组执行的聚合函数。 -- table_name 要查询的表名 -- condition 可选,用于筛选结果的条件实例
-- 假设有一个名为 orders 的表,包含以下列:order_id、customer_id、order_date 和 order_amount。按照 customer_id 进行分组,并计算每个客户的订单总金额。 SELECT customer_id ,SUM(order_amount) AS total_amount FROM orders GROUP BY customer_id;
MySQL 连接的使用
使用MySQL 的JOIN在两个或多个表中查询数据。
JOIN按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录
-- INNER JOIN 返回两个表中满足连接条件的匹配行 SELECT column1,column2,...FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; -- table1.column_name = table2.column_name 是连接条件,指定了两个表中用于匹配的列。LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
-- LEFT JOIN 返回左表的所有行,并包括右表中匹配的行,如果右表中没有匹配的行,将返回 NULL 值 SELECT column1,column2,... FROM table1 LEFT JOIN table2 ON table1.column_name = table2.coumn_name;RIGHT JOIN(右连接):与LEFT JOIN相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
-- RIGHT JOIN 返回右表的所有行,并包括左表中匹配的行,如果左表中没有匹配的行,将返回 NULL 值 SELECT column1,column2,... FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;